1、什么是决策边界?
决策边界又称为是限定边界,引用百度的定义:在具有两个类的统计分类问题中,决策边界或决策表面是超曲面,其将基础向量空间划分为两个集合,一个集合。 分类器将决策边界一侧的所有点分类为属于一个类,而将另一侧的所有点分类为属于另一个类。
我们先看逻辑回归的sigmoid函数。
我们求出
在上一篇博客中我们已经计算出来了值,那么我们把这条曲线绘制出来。
这个线就是我们的决策边界,可以通过图形,清晰看到这条直线把上面点分为两类。
2、那么对于不规则的分类如何求出决策边界呢,比如下面?
这里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 KNeighborsClassifier
knn_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、通过决策边界可视化看到模型是否存在过拟合。
参考文章: