ML之SVM:基于SVM(sklearn+subplot)的鸢尾花iris数据集的前两个特征(线性不可分的两个样本),判定鸢尾花是哪一种类型
目录
输出结果
实现代码
输出结果
(1)、黄色的点为支持向量
实现代码
#ML之SVM:基于SVM(sklearn+subplot)的鸢尾花数据集的前两个特征,判定鸢尾花是哪一种类型#基于鸢尾花的花萼的长度和宽度进行分类的,本案例只采用前两维特征import numpy as npimport pylab as plfrom sklearn import svmsvc = svm.SVC(kernel='linear')from sklearn import datasets # 鸢尾花数据集是sklearn自带的。iris = datasets.load_iris()X = iris.data[:, :2] # 只提取前面两列数据作为特征,鸢尾花的长度、宽度y = iris.targetsvc.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=10pl.title('Both circles are support vectors')#下面进行调参C:该C可以理解为正则项的Csvc = 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=10pl.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=10pl.title('Low C values: high number of support vectors')pl.show() #采用核方法的SVMsvc = 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=10pl.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=10pl.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=10pl.title('RBF kernel')pl.show()
相关文章推荐
ML之SVM:基于SVM(sklearn+subplot)的鸢尾花数据集的前两个特征,判定鸢尾花是哪一种类型
ML之SVM:基于SVM(sklearn+subplot)的鸢尾花iris数据集的前两个特征(线性不可分的两个样本) 判定鸢尾花是哪一种类型