python(svm算法)


鸢尾花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

猜你喜欢

转载自blog.csdn.net/qq_23859701/article/details/78970026
今日推荐