本文共 1598 字,大约阅读时间需要 5 分钟。
决策边界又称为是限定边界,引用百度的定义:在具有两个类的统计分类问题中,决策边界或决策表面是超曲面,其将基础向量空间划分为两个集合,一个集合。 分类器将决策边界一侧的所有点分类为属于一个类,而将另一侧的所有点分类为属于另一个类。
我们先看逻辑回归的sigmoid函数。
我们求出
在中我们已经计算出来了值,那么我们把这条曲线绘制出来。
这个线就是我们的决策边界,可以通过图形,清晰看到这条直线把上面点分为两类。
这里Bobo老师提供了一种通用的方法。 老师的代码分享如下:
def plot_decision_boundary(model, axis): x0, x1 = np.meshgrid( np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1, 1), np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1, 1), ) X_new = np.c_[x0.ravel(), x1.ravel()] y_predict = model.predict(X_new) zz = y_predict.reshape(x0.shape) from matplotlib.colors import ListedColormap custom_cmap = ListedColormap(['#EF9A9A','#FFF59D','#90CAF9']) plt.contourf(x0, x1, zz, linewidth=5, cmap=custom_cmap)
model: 训练模型
axis: X和Y轴对应的起始和终止点
使用是matplotlib模块
上面的逻辑回归我们就可以利用这种绘制成这样:
3、 以前KNN分类应该如何绘制?
从上图看起始分类有点过拟合了,我们看看参数:
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski', metric_params=None, n_jobs=1, n_neighbors=5, p=2, weights='uniform')
可以看出来,这个n_neighbours =5,现在我们修改为50再试试:
这样看起来好多了。绘制KNN的代码如下:
from sklearn.neighbors import KNeighborsClassifierknn_clf_all = KNeighborsClassifier()knn_clf_all.fit(iris.data[:,:2], iris.target)plot_decision_boundary(knn_clf_all, axis=[4, 8, 1.5, 4.5])plt.scatter(iris.data[iris.target==0,0], iris.data[iris.target==0,1])plt.scatter(iris.data[iris.target==1,0], iris.data[iris.target==1,1])plt.scatter(iris.data[iris.target==2,0], iris.data[iris.target==2,1])plt.show()
总结:
1、 模型的复杂与简单与决策边界的直接练习。
2、通过决策边界可视化看到模型是否存在过拟合。
参考文章:
转载地址:http://bekai.baihongyu.com/