支持向量机 - 线性 SVM 决策过程的可视化
我们可以使用 sklearn 中的式子来为可视化我们的决策边界,支持向量,以及决策边界平行的两个超平面。
单独说一下 make_blobs
make_blobs( ['n_samples=100', 'n_features=2', 'centers=None', 'cluster_std=1.0', 'center_box=(-10.0, 10.0)', 'shuffle=True', 'random_state=None'], ) # n_samples:待生成的样本的总数 # n_features:每个样本的特征数。 # centers:中心数,就是分成几类 # luster_std:表示每个类别的方差。如果是一个数字,则所有类的方差都是这个数;如要要不同类方差不一致,可以使用列表 # random_state:随机数生成器 # 注意返回X和y两个array
一会可视化会更好理解
画决策边界:理解函数 contourContour 是我们专门用来绘制等高线的函数。等高线,本质上是在二维图像上表现三维图像的一种形式,其中两维 X 和 Y 是两条坐标轴上的取值,而 Z 表示高度。Contour 就是将由 X 和 Y 构成平面上的所有点中,高度一致的点连接成线段的函数,在同一条等高线上的点一定具有相同的 Z 值。我们可以利用这个性质来绘制我们的决策边界。
我们的决策边界是,并在决策边界的两边找出两个超平面,使得超平面到决策边界的相对距离为 1。那其实,我们只需要在我们的样本构成的平面上,把所有到决策边界的距离为 0 的点相连,就是我们的决策边界,而把所有到决策边界的相对距离为 1 的点相连,就是我们的两个平行于决策边界的超平面了。此时,我们的 Z 就是平面上的任意点到达超平面的距离。
上面这一段加粗的就是 contour 核心的东西
那首先,我们需要获取样本构成的平面,作为一个对象。
单独说一下 vstack
np.vstack([[1,2,3],[2,3,4]]) # 纵向堆叠,认为是矩阵加行 # vstack能够将多个结构一致的一维数据按行堆叠起来 --- array([[1, 2, 3], [2, 3, 4]])
有了网格后,我们需要计算网格所代表的“平面上所有的点”到我们的决策边界的距离。所以我们需要我们的模型和决策边界。
进一步理解,我们要画过某点平行于决策边界的超平面
关于 reshape(-1,1),reshape(1,-1),这里的负数不是行或列的元素数为负数,负数代表不指定元素个数,例如 reshape(-1,1),就是我们只要求有一列,行上我们不要求,让计算机自己计算。因此我们也可以有 reshape(-1,2)等操作
我们再回看上面绘制决策边界的过程,发现我们只需要模型和散点图的边框就可以得到可视化的决策边界。因此,我们可视化决策边界的过程进行包装
探索建好的模型
视频作者:菜菜TsaiTsai链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili
版权声明: 本文为 InfoQ 作者【烧灯续昼2002】的原创文章。
原文链接:【http://xie.infoq.cn/article/3a8c71944a129183dad115c0a】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论