python SVM算法实例

iris数据集是来自于Python自带的基础算法分析数据,主要作为算法分析和算法认识,是最为基础性的实例。

1.引入函数依赖

在这里使用了sklearn和numpy两个库作为基础依赖,算法选取了SVM算法实现二分类问题的求解。

import sklearn
from sklearn import datasets
from sklearn import svm
import numpy as np

2.数据显示与预处理

首先要将iris数据集中的数据直观的展现出来,这里将所有数据进行截取,选择样本前五行进行显示。

if __name__ == '__main__':
    iris = sklearn.datasets.load_iris()

    # data对应了样本的4个特征,150行4列
    print('>> shape of data:')
    print(iris.data.shape)

    # 显示样本特征的前5行
    print('>> line top 5:')
    print(iris.data[:5])

    # target对应了样本的类别(目标属性),150行1列
    print('>> shape of target:')
    print(iris.target.shape)

    # 显示所有样本的目标属性
    print('>> show target of data:')
    print(iris.target)

    #数据加载
    x = iris.get('data')
    y = iris.get('target')
    iris = datasets.load_iris()
    print(type(iris), dir(iris))

3.模型训练

训练数据时要对数据进行分割处理,本次使用了三七开的方式,即:70%训练集、30%测试集。

 # 数据分割
    num = x.shape[0]
    ratio = 7 / 3
    num_test = int(num / (1 + ratio))  # 测试集样本数目
    num_train = num - num_test  # 训练集样本数目
    index = np.arange(num)  # 产生样本标号
    np.random.shuffle(index)  # 洗牌
    x_test = x[index[:num_test], :]  # 取出洗牌后前 num_test 作为测试集
    y_test = y[index[:num_test]]
    x_train = x[index[num_test:], :]  # 剩余作为训练集
    y_train = y[index[num_test:]]

实际的模型设计如下:



    # 数据集训练
    clf_linear = svm.SVC(decision_function_shape="ovo", kernel="linear")
    clf_rbf = svm.SVC(decision_function_shape="ovo", kernel="rbf")
    clf_linear.fit(x_train, y_train)
    clf_rbf.fit(x_train, y_train)

    y_test_pre_linear = clf_linear.predict(x_test)
    y_test_pre_rbf = clf_rbf.predict(x_test)

在完成模型训练后,还需要对模型进行分析评估,测试算法的准确率,算法准确率是评估模型好坏的重要指标。

    #判断训练效果
    acc_linear = sum(y_test_pre_linear == y_test) / num_test
    print('linear kernel: The accuracy is', acc_linear)
    acc_rbf = sum(y_test_pre_rbf == y_test) / num_test
    print('rbf kernel: The accuracy is', acc_rbf)

最后,完整代码如下:

import sklearn
from sklearn import datasets
from sklearn import svm
import numpy as np

if __name__ == '__main__':
    iris = sklearn.datasets.load_iris()

    # data对应了样本的4个特征,150行4列
    print('>> shape of data:')
    print(iris.data.shape)

    # 显示样本特征的前5行
    print('>> line top 5:')
    print(iris.data[:5])

    # target对应了样本的类别(目标属性),150行1列
    print('>> shape of target:')
    print(iris.target.shape)

    # 显示所有样本的目标属性
    print('>> show target of data:')
    print(iris.target)

    #数据加载
    x = iris.get('data')
    y = iris.get('target')
    iris = datasets.load_iris()
    print(type(iris), dir(iris))
    # 数据分割
    num = x.shape[0]
    ratio = 7 / 3
    num_test = int(num / (1 + ratio))  # 测试集样本数目
    num_train = num - num_test  # 训练集样本数目
    index = np.arange(num)  # 产生样本标号
    np.random.shuffle(index)  # 洗牌
    x_test = x[index[:num_test], :]  # 取出洗牌后前 num_test 作为测试集
    y_test = y[index[:num_test]]
    x_train = x[index[num_test:], :]  # 剩余作为训练集
    y_train = y[index[num_test:]]

    # 数据集训练
    clf_linear = svm.SVC(decision_function_shape="ovo", kernel="linear")
    clf_rbf = svm.SVC(decision_function_shape="ovo", kernel="rbf")
    clf_linear.fit(x_train, y_train)
    clf_rbf.fit(x_train, y_train)

    y_test_pre_linear = clf_linear.predict(x_test)
    y_test_pre_rbf = clf_rbf.predict(x_test)

    #判断训练效果
    acc_linear = sum(y_test_pre_linear == y_test) / num_test
    print('linear kernel: The accuracy is', acc_linear)
    acc_rbf = sum(y_test_pre_rbf == y_test) / num_test
    print('rbf kernel: The accuracy is', acc_rbf)

猜你喜欢

转载自blog.csdn.net/weixin_48117689/article/details/123547298