ML之SVM:基于SVM(sklearn+subplot)的鸢尾花iris数据集的前两个特征(线性不可分的两个样本),判定鸢尾花是哪一种类型

ML之SVM:基于SVM(sklearn+subplot)的鸢尾花iris数据集的前两个特征(线性不可分的两个样本),判定鸢尾花是哪一种类型


输出结果

(1)、黄色的点为支持向量

实现代码

#ML之SVM:基于SVM(sklearn+subplot)的鸢尾花数据集的前两个特征,判定鸢尾花是哪一种类型
#基于鸢尾花的花萼的长度和宽度进行分类的,本案例只采用前两维特征
import numpy as np
import pylab as pl

from sklearn import svm
svc = svm.SVC(kernel='linear')

from sklearn import datasets   # 鸢尾花数据集是sklearn自带的。

iris = datasets.load_iris()
X = iris.data[:, :2]   # 只提取前面两列数据作为特征,鸢尾花的长度、宽度
y = iris.target
svc.fit(X, y)   # 基于这些数据训练出一个支持向量分离器SVC

……

plot_estimator(svc, X, y, 3,2,1)
pl.title('one versus one')   #如图所示,红色与其他点是线性可分的;蓝色和绿色的点是线性不可分的

plot_estimator(svm.LinearSVC(), X, y, 3,2,2)
pl.title('one versus all')

X, y = X[np.in1d(y, [1, 2])], y[np.in1d(y, [1, 2])]
plot_estimator(svc, X, y, 3,2,3)
pl.scatter(svc.support_vectors_[:, 0], svc.support_vectors_[:, 1], s=80,c='y')   #,c='',facecolors='none', zorder=10
pl.title('Both circles are support vectors')

#下面进行调参C:该C可以理解为正则项的C
svc = svm.SVC(kernel='linear', C=1e3)
plot_estimator(svc, X, y, 3,2,4)
pl.scatter(svc.support_vectors_[:, 0], svc.support_vectors_[:, 1], s=80,c='y')  #, facecolors='none', zorder=10
pl.title('High C values: small number of support vectors')

svc = svm.SVC(kernel='linear', C=1e-3)
plot_estimator(svc, X, y, 3,2,5)
pl.scatter(svc.support_vectors_[:, 0], svc.support_vectors_[:, 1], s=80)  #, facecolors='none', zorder=10
pl.title('Low C values: high number of support vectors')
pl.show() 

#采用核方法的SVM
svc = svm.SVC(kernel='linear')
plot_estimator(svc, X, y, 2,2,1)
pl.scatter(svc.support_vectors_[:, 0], svc.support_vectors_[:, 1], s=80,c='y')  #, facecolors='none', zorder=10
pl.title('Linear kernel→linear')

svc = svm.SVC(kernel='poly', degree=4)
plot_estimator(svc, X, y, 2,2,2)
pl.scatter(svc.support_vectors_[:, 0], svc.support_vectors_[:, 1], s=80,c='y')  #, facecolors='none', zorder=10
pl.title('Polynomial kernel→parabola')

#可以看到,高斯核更灵活,而且对于训练数据效果是最好的。但是要担心过拟合。
svc = svm.SVC(kernel='rbf', gamma=1e2)
plot_estimator(svc, X, y, 2,2,3)
pl.scatter(svc.support_vectors_[:, 0], svc.support_vectors_[:, 1], s=80,c='y')   #, facecolors='none', zorder=10
pl.title('RBF kernel')
pl.show() 

相关文章推荐
ML之SVM:基于SVM(sklearn+subplot)的鸢尾花数据集的前两个特征,判定鸢尾花是哪一种类型

(0)

相关推荐