一、支持向量机的python代码(svm.SVC)
本文先对python中自带的数据:鸢尾花数据使用支持向量机进行分类。然后使用从外部导入的数据进行分类。
1、对鸢尾花数据调用python中支持向量机的包对其进行分类
#导入需要的包
from sklearn import svm
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
#导入鸢尾花数据
data=load_iris()
data_x,data_y=data.data,data.target
print("分类的类数:",data)
#将数据分成测试集和训练集
data_train_x,data
_test_x=train_test_split(data_x,test_size=0.2,random_state=55)
data_train_y,data_test_y=train_test_split(data_y,test_size=0.2,random_state=55)
#拟合模型(不同类型的核函数,依次为:linear、rbf、poly、sigmoid)
clf1=svm.SVC(kernel='linear',decision_function_shape='ovr').fit(data_train_x,data_train_y)
clf2=svm.SVC(kernel='rbf',gamma=1).fit(data_train_x,data_train_y)
clf3=svm.SVC(kernel='poly').fit(data_train_x,data_train_y)
clf4=svm.SVC(kernel='sigmoid').fit(data_train_x,data_train_y)
#得训练集和测试集分类的准确性
cl1_1=clf1.score(data_train_x,data_train_y)
cl1_2=clf1.score(data_test_x,data_test_y)
cl2_1=clf2.score(data_train_x,data_train_y)
cl2_2=clf2.score(data_test_x,data_test_y)
cl3_1=clf3.score(data_train_x,data_train_y)
cl3_2=clf3.score(data_test_x,data_test_y)
cl4_1=clf4.score(data_train_x,data_train_y)
cl4_2=clf4.score(data_test_x,data_test_y)
#使用predict()查看预测结果
clf1.predict(data_test_x)
print("分类准确性:",cl1_1)
print("测试集data_test_x的预测:",clf1.predict(data_test_x))
运行上面相应代码则得到如下结果

2、从外部导入数据进行分类
#导入需要的包
import pandas as pd
import numpy as np
from sklearn import svm
from sklearn.model_selection import train_test_split
#从c盘桌面导入数据(根据自己数据所在位置决定)
df1=pd.read_excel('C:/Users/sun17/Desktop/data1.xlsx')
df2=np.array(df1)
#x标签为前3列;y标签为第4列。
data_x,data_y=df2[:,0:3],df2[:,4]
#将数据分成测试集和训练集
data_train_x,data_test_x=train_test_split(data_x,test_size=0.2,random_state=55)
data_train_y,data_test_y=train_test_split(data_y,test_size=0.2,random_state=55)
#拟合模型(不同类型的核函数)
clf1=svm.SVC(kernel='linear',decision_function_shape='ovr').fit(data_train_x,data_train_y)
clf2=svm.SVC(kernel='rbf',gamma=1).fit(data_train_x,data_train_y)
clf3=svm.SVC(kernel='poly').fit(data_train_x,data_train_y)
clf4=svm.SVC(kernel='sigmoid').fit(data_train_x,data_train_y)
#得训练集和测试集分类的准确性
cl1_1=clf1.score(data_train_x,data_train_y)
clf1.score(data_test_x,data_test_y)
clf2.score(data_train_x,data_train_y)
clf2.score(data_test_x,data_test_y)
clf3.score(data_train_x,data_train_y)
clf3.score(data_test_x,data_test_y)
clf4.score(data_train_x,data_train_y)
clf4.score(data_test_x,data_test_y)
#使用predict()查看预测结果
clf1.predict(data_test_x)
print("分类准确性:",cl1_1)
print("测试集data_test_x的预测:",clf1.predict(data_test_x))

分类准确性: 0.9583333333333334
测试集data_test_x的预测: ['setosa' 'setosa' 'setosa' 'virginica' 'virginica' 'setosa' 'virginica'
'virginica' 'setosa' 'setosa' 'setosa' 'versicolor' 'virginica' 'setosa'
'virginica' 'virginica' 'versicolor' 'setosa' 'versicolor' 'virginica'
'versicolor' 'virginica' 'versicolor' 'virginica' 'versicolor'
'versicolor' 'virginica' 'versicolor' 'virginica' 'versicolor']
二、SVC相应参数的含义
python中SVC代码如下:
sklearn.svm.SVC(*, C=1.0, kernel='rbf', degree=3, gamma='scale', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=- 1, decision_function_shape='ovr', break_ties=False, random_state=None)
上述包里的部分相应参数的含义:
C:正则化参数。正则化的强度与c成反比,必须是严格正的。默认C的值为1。
kernel:核函数的选取。这个代码提供了'linear','poly','rbf','sigmoid'四种核函数。
degree:表示当核函数为'poly'时也即为多项式时,多项式的维数,默认为3。
gamma:'poly','rbf','sigmoid'三种核函数的系数。
当gamma='scale'(默认)时,使用1 / (n_features * X.var())作为gamma的值;当为' auto '时,使用1 / n_features。
coef0:核函数中的独立项。它只在“poly”和“sigmoid”中有意义
shrinking:是否使用收缩启发式。
probability:是否启用概率估计。这必须在调用fit之前启用,这会降低该方法的速度,因为它内部使用了5倍交叉验证,而且predict_proba可能与predict不一致。
tol:停止标准公差。
cache_size:指定内核缓存的大小(单位为MB)。