zoukankan      html  css  js  c++  java
  • Python | 使用SVM支持向量机进行鸢尾花分类

    运行环境

    Python: 3.7.1
    库: sklearn (Python的机器学习工具箱)
    

    目的:

    根据鸢尾花的四个特征,对三种鸢尾花进行分类

    数据(共150行,这里截取前6行,完整数据以及代码的下载链接见文末):

    方法:调用内部SVM库进行鸢尾花分类

    特征1 特征2 特征3 特征4 鸢尾花类型
    5.1 3.5 1.4 0.2 Iris-setosa
    4.9 3 1.4 0.2 Iris-setosa
    4.7 3.2 1.3 0.2 Iris-setosa
    4.6 3.1 1.5 0.2 Iris-setosa
    5 3.6 1.4 0.2 Iris-setosa
    5.4 3.9 1.7 0.4 Iris-setosa

    代码如下:

    from sklearn.model_selection import train_test_split
    from sklearn import svm
    
    data_Set = []
    data_Set_x = []
    data_Set_y = []
    
    #打开数据集,字符串前加r表示raw string,防止路径字符串中存在的反斜杠带来的转义
    data_file = open(r"D:\\Coding\\Py\\Machine-Learning\\SVM_OLD\\Data_SVM.csv")
    
    #拆分数据集,取前四列为x,第五列为y
    for line in data_file.readlines():
        lineArr = line.strip().split(',')
        data_Set.append(lineArr)
        data_Set_x.append(lineArr[0:4])
        data_Set_y.append(lineArr[4])
    
    #按照7:3的比例分割训练集和测试集
    data_train_x, data_test_x = train_test_split(data_Set_x,
                                                 test_size=0.3,
                                                 random_state=55)
    data_train_y, data_test_y = train_test_split(data_Set_y,
                                                 test_size=0.3,
                                                 random_state=55)
    """
    分别利用四种核函数进行训练,这些核函数都可以设置参数,例如
    decision_function_shape='ovr'时,为one v rest,即一个类别与其他类别进行划分,
    decision_function_shape='ovo'时,为one v one,即将类别两两之间进行划分,用二分类的方法模拟多分类的结果。
    不设置的话会使用默认参数设置
    """
    #使用linear线性核函数,C越大分类效果越好,但是可能过拟合
    clf1 = svm.SVC(C=1, kernel='linear',
                   decision_function_shape='ovr').fit(data_train_x, data_train_y)
    #使用rbf径向基核函数,gamma值越小,分类界面越连续;gamma值越大,分类界面越“散”,分类效果越好,但有可能会过拟合。
    clf2 = svm.SVC(C=1, kernel='rbf', gamma=1).fit(data_train_x, data_train_y)
    #使用poly多项式核函数
    clf3 = svm.SVC(kernel='poly').fit(data_train_x, data_train_y)
    #使用sigmoid神经元激活核函数
    clf4 = svm.SVC(kernel='sigmoid').fit(data_train_x, data_train_y)
    
    #打印使用不同核函数进行分类时,训练集和测试集分类的准确率
    print("linear线性核函数-训练集:", clf1.score(data_train_x, data_train_y))
    print("linear线性核函数-测试集:", clf1.score(data_test_x, data_test_y))
    print("rbf径向基核函数-训练集:", clf2.score(data_train_x, data_train_y))
    print("rbf径向基函数-测试集:", clf2.score(data_test_x, data_test_y))
    print("poly多项式核函数-训练集:", clf3.score(data_train_x, data_train_y))
    print("poly多项式核函数-测试集:", clf3.score(data_test_x, data_test_y))
    print("sigmoid神经元激活核函数-训练集:", clf4.score(data_train_x, data_train_y))
    print("sigmoid神经元激活核函数-测试集:", clf4.score(data_test_x, data_test_y))
    
    # 使用decision_function()可以查看决策函数
    print(clf1.decision_function(data_train_x))
    # 使用predict()可以查看预测结果
    print(clf1.predict(data_train_x))
    

    运行结果:

    1. 分类准确率
    linear线性核函数-训练集: 1.0
    linear线性核函数-测试集: 0.9555555555555556
    rbf径向基核函数-训练集: 0.9904761904761905
    rbf径向基函数-测试集: 0.9555555555555556
    poly多项式核函数-训练集: 1.0
    poly多项式核函数-测试集: 0.9333333333333333
    sigmoid神经元激活核函数-训练集: 0.34285714285714286
    sigmoid神经元激活核函数-测试集: 0.3111111111111111
    
    1. 决策函数(仅截取部分,每一列的值代表到各类别的举例)
    [[-0.18006398  1.06550708  2.1145569 ]
     [-0.2266221   1.07558987  2.15103223]
     [-0.16806693  1.08720057  2.08086637]
     [ 2.07795355  1.29285195 -0.3708055 ]
     [-0.18840558  1.05553666  2.13286892]
     [-0.20384     1.10258546  2.10125453]
    
    1. 分类结果(仅截取部分)
    ['Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-setosa'
     'Iris-virginica' 'Iris-virginica' 'Iris-setosa' 'Iris-versicolor'
     'Iris-virginica' 'Iris-versicolor' 'Iris-setosa' 'Iris-setosa'
    

    代码以及数据集下载:

    链接:https://pan.baidu.com/s/1iZo472Ynvav0mQK3VvpJFQ
    提取码:ovri

    参考文章:


    Tips:时间会解决一切
  • 相关阅读:
    Visual C++ in Visual Studio 2015
    Paxos
    dtrace
    性能测试应该怎么做?
    CLREX
    Header Field Definitions Accept-Encoding
    汇编跟逆向工程
    Optimize Managed Code For Multi-Core Machines
    Improve Scalability With New Thread Pool APIs
    CLR thread pool
  • 原文地址:https://www.cnblogs.com/RioTian/p/15521370.html
Copyright © 2011-2022 走看看