1.SVM原理
本文侧重于利用sklearn库实现svm,对理论知识不做讲解。
2.sklearn实现SVM
本文目的:使用svm对Iris数据集进行分类。
数据集介绍:Iris数据集是常用的分类实验数据集,也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。
数据集链接:http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data
import pandas as pd
import numpy as np
from sklearn import datasets
from sklearn import svm
# 使用交叉验证的方法,将数据集分为训练集与测试集
from sklearn.model_selection import train_test_split
# 加载iris数据集
def load_data():
iris = datasets.load_iris()
"""展示数据集的形状
diabetes.data.shape, diabetes.target.shape
"""
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
iris.data, iris.target, test_size=0.10, random_state=0)
return X_train, X_test, y_train, y_test
# 使用LinearSVC考察线性分类SVM的预测能力
def test_LinearSVC(X_train,X_test,y_train,y_test):
# 选择模型
cls = svm.LinearSVC()
# 利用训练数据训练模型
cls.fit(X_train,y_train)
# 训练好的参数
print('Coefficients:%s \n\nIntercept %s' % (cls.coef_,cls.intercept_))
# 利用测试数据评判模型
print('\n\nScore: %.2f' % cls.score(X_test, y_test))
if __name__=="__main__":
X_train,X_test,y_train,y_test=load_data()
test_LinearSVC(X_train,X_test,y_train,y_test)
3.分析
sklearn实现SVM主要分为两步,先利用fit()进行拟合完成训练过程,再利用score()进行评判测试准确率。
上述程序结果如下所示:
其中,Coefficients:为三个类别特征向量,Intercept 为判别函数类别参数。