基于经典的支持向量机算法完成鸢尾花的分类问题( 二 )
cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])
def plot_estimator(estimator, X, y):
estimator.fit(X, y)#拟合x , y
x_min, x_max = X[:, 0].min() - .1, X[:, 0].max() + .1y_min, y_max = X[:, 1].min() - .1, X[:, 1].max() + .1xx, yy = np.meshgrid(np.linspace(x_min, x_max, 100),np.linspace(y_min, y_max, 100))Z = estimator.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)pl.figure()#plt.figure(1) # 创建图表1pl.pcolormesh(xx,yy,Z, cmap=cmap_light)#类似np.pcolor, 是对坐标点着色xx , yy标识样本 , Z表示作色方案
plot_estimator(svc,x_train,y_train)#调用plot_estimator函数
print svc.predict(x_test)#预测测试集 , 输出测试结果
print y_test#真实的测试集类型 , 与预测结果进行比较
pl.scatter(x_test[:, 0], x_test[:, 1], c=y_test, cmap=cmap_bold)# , 将测试集数据散点图表示 , c为指定cmap的颜色pl.axis('tight')pl.axis('off')pl.tight_layout()
pl.show()
代码分析
import pylab as pl#从 numpy 和 matplotlib 填充交互式命名空间 , pylab结合了pyplot和numpy , 对交互式使用来说比较方便 , 既可以画图又可以进行简单的计算 , 但是建议一个项目中还是numpy和pyplot分开使用比较好# 鸢尾花数据集是sklearn自带的 。 iris = datasets.load_iris()#只提取前面两列数据作为特征X = iris.data[:, :2]i=np.random.permutation(len(X))#生成一个从1到150的随机数组
本文插图
本文插图
这个代码的意思就是取140行训练集数据 , 取10行测测试集数据 , 是随机存取的 。
svc = svm.SVC(kernel='linear')svc.fit(x_train,y_train)#基于这些数据训练出一个支持向量分离器SVC#拟合函数cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])#预测结果颜色cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])#样本颜色# 因为鸢尾花是3分类问题 , 我们要对样本和预测结果均用三种颜色区分开 。 x_min, x_max = X[:, 0].min() - .1, X[:, 0].max() + .1#第一列的最大值加1 , 最小值减1y_min, y_max = X[:, 1].min() - .1, X[:, 1].max() + .1#第二列的最大值加1 , 最小值减1目的就是弄出足够大的网格空间# 产生网格节点xx, yy = np.meshgrid(np.linspace(x_min, x_max, 100),np.linspace(y_min, y_max, 100))#xx为一个100行100列的数组 , 其中每列上的数据都一样 , yy为一个100行100列的数组 , 其中每行上的数据都一样# print xx.ravel()#将多维数组变成一维,这样那长度就是10000了#print np.c_[xx.ravel(), yy.ravel()]#将xx.ravel和yy.ravel合并为一个矩阵[[]] , 第一列为xx.level,第二列为yy.levelZ = estimator.predict(np.c_[xx.ravel(), yy.ravel()])#我们是使用刚刚拟合好的svc来预测np.c_[xx.ravel(), yy.ravel()] , 这个np.c_[xx.ravel(), yy.ravel()]仍然是通过X和y来获取到的,所以他们的预测结果所画的图的决策边界就是svc训练集的结果# 对预测结果上色Z = Z.reshape(xx.shape)#把Z的shape弄成100*100的 , Z是预测的结果也就是0 , 1 , 2这些东西这个表示对应位置的颜色pl.pcolormesh(xx,yy,Z, cmap=cmap_light)#类似np.pcolor, 是对坐标点着色xx , yy标识样本 , Z表示作色方案
代码图片版
本文插图
推荐阅读
- 泰迪小公举|原定演员临时辞演,找了个满口东北话的新人救场,却意外成就经典
- 娱乐圈|为何吴京要说女孩不要混娱乐圈?杨幂的例子太经典,柳岩却最无奈
- 卢伟冰|月销44万台,力压华为P40 Pro成老大,卢伟冰这波操作堪称经典
- 壁纸|支持 iOS 14 系统,隐藏 Dock 栏壁纸分享
- 西安王老师聊教育|饮食养生,当以何书为经典?
- 辣妹盘点酱|Hz高刷+鸿蒙OS华为Mate40,华为Mate30白菜价直呼残暴,支持144
- 移动信息IT杂谈三星Galaxy Note 20 Ultra:不支持100倍变焦,最高到50倍
- 追着幸福跑|两只“量子柴郡猫”交换笑脸
- 那年初夏|MIUI 12稳定版正式推送!率先支持13款机型,看看有你的吗?
- 游戏葡萄说|与妻儿聚少离多!17年23个世界冠军还差一纪录,马龙感谢家人支持
