鸢尾花SVM二特征分类实验:
程序:
from sklearn import svm from sklearn import datasets import matplotlib.pyplot as plt import matplotlib as mpl from matplotlib import colors import numpy as np #处理数据集 def datadeal(): iris=datasets.load_iris() sourcedata = iris['data'] # 得到属性向量 labledata = iris['target'] # 得到类别标记 # 划分训练集和测试集 train_x = sourcedata[0:89, :] train_y = labledata[0:89] test_x = sourcedata[90:100, :] test_y = labledata[90:100] return train_x,train_y,test_x,test_y #读取测试集的精度 def cal_accuracy(test_y,predict_data): m=np.shape(predict_data)[0] count=0 for i in range(m): if test_y[i]==predict_data[i]: count=count+1 accuracy=count/m*100 return accuracy #绘制一个二维的图像。所以将数据变成一个二维的数据 def plot_show(train_x,train_y,test_x,test_y): plot_train_x=train_x[:,0:2] plot_test_x=test_x[:,0:2] clf = svm.SVC(C=0.91, kernel='linear', gamma=20, decision_function_shape='ovr') clf.fit(train_x, train_y) #指定默认字体,不然汉字显示不出来 mpl.rcParams['font.sans-serif'] = [u'SimHei'] mpl.rcParams['axes.unicode_minus'] = False # predict_data = clf.predict(test_x) plt.scatter(plot_train_x[:, 0], plot_train_x[:, 1], c=train_y, cmap=plt.cm.Paired) plt.scatter(plot_test_x[:, 0], plot_test_x[:, 1],c=predict_data,marker='o',cmap=None) plt.title(u'鸢尾花SVM二特征分类', fontsize=15) plt.ylabel(u'花萼宽度', fontsize=13) plt.show() def main(): train_x, train_y, test_x, test_y=datadeal() clf = svm.SVC(C=0.91, kernel='rbf', gamma=20, decision_function_shape='ovr') clf.fit(train_x, train_y.ravel()) predict_data= clf.predict(test_x) accuracy=cal_accuracy(test_y,predict_data) print(accuracy) plot_show(train_x, train_y, test_x,test_y) if __name__=='__main__': main()
主要原理可以详看: 支持向量机通俗导论(理解SVM的三层境界) - 结构之法 算法之道 - CSDN博客 http://blog.csdn.net/v_july_v/article/details/7624837
绘图不懂请看:http://blog.csdn.net/crossky_jing/article/details/49466127