机器学习sklearn(9)支持向量机svm——非线性

参数说明如下:

C:惩罚项,float类型,可选参数,默认为1.0,C越大,即对分错样本的惩罚程度越大,因此在训练样本中准确率越高,但是泛化能力降低,也就是对测试数据的分类准确率降低。相反,减小C的话,容许训练样本中有一些误分类错误样本,泛化能力强。对于训练样本带有噪声的情况,一般采用后者,把训练样本集中错误分类的样本作为噪声。
kernel:核函数类型,str类型,默认为’rbf’。可选参数为: 
  ’linear’:线性核函数
  ‘poly’:多项式核函数
  ‘rbf’:径像核函数/高斯核
  ‘sigmod’:sigmod核函数
  ‘precomputed’:核矩阵
precomputed表示自己提前计算好核函数矩阵,这时候算法内部就不再用核函数去计算核矩阵,而是直接用你给的核矩阵,核矩阵需要为n*n的。
degree:多项式核函数的阶数,int类型,可选参数,默认为3。这个参数只对多项式核函数有用,是指多项式核函数的阶数n,如果给的核函数参数是其他核函数,则会自动忽略该参数。
gamma:核函数系数,float类型,可选参数,默认为auto。只对’rbf’ ,’poly’ ,’sigmod’有效。如果gamma为auto,代表其值为样本特征数的倒数,即1/n_features。
coef0:核函数中的独立项,float类型,可选参数,默认为0.0。只有对’poly’ 和,’sigmod’核函数有用,是指其中的参数c。
probability:是否启用概率估计,bool类型,可选参数,默认为False,这必须在调用fit()之前启用,并且会fit()方法速度变慢。
shrinking:是否采用启发式收缩方式,bool类型,可选参数,默认为True。
tol:svm停止训练的误差精度,float类型,可选参数,默认为1e^-3。
cache_size:内存大小,float类型,可选参数,默认为200。指定训练所需要的内存,以MB为单位,默认为200MB。
class_weight:类别权重,dict类型或str类型,可选参数,默认为None。给每个类别分别设置不同的惩罚参数C,如果没有给,则会给所有类别都给C=1,即前面参数指出的参数C。如果给定参数’balance’,则使用y的值自动调整与输入数据中的类频率成反比的权重。
verbose:是否启用详细输出,bool类型,默认为False,此设置利用libsvm中的每个进程运行时设置,如果启用,可能无法在多线程上下文中正常工作。一般情况都设为False,不用管它。
max_iter:最大迭代次数,int类型,默认为-1,表示不限制。
decision_function_shape:决策函数类型,可选参数’ovo’和’ovr’,默认为’ovr’。’ovo’表示one vs one,’ovr’表示one vs rest。
random_state:数据洗牌时的种子值,int类型,可选参数,默认为None。伪随机数发生器的种子,在混洗数据时用于概率估计。
 

import numpy as np
import pandas as pd
from sklearn import svm
import matplotlib.pyplot as plt
%matplotlib inline

#载入训练集
path_train = r"C:\Users\Machine Learning\testset_rbf.txt"
dataset = pd.read_csv(path_train, sep='\t', header=None, encoding='ANSI')

#拆分特征向量和标签
dataset = np.array(dataset)
dataset_data = dataset[:,:-1]
dataset_label = dataset[:,-1]

#数据集可视化
plt.scatter(dataset_data[dataset_label==1,0],dataset_data[dataset_label==1,1])
plt.scatter(dataset_data[dataset_label==-1,0],dataset_data[dataset_label==-1,1])
plt.show()

#训练模型
clf = svm.SVC(kernel='rbf', gamma='auto')
clf.fit(dataset_data, dataset_label)

SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf',
  max_iter=-1, probability=False, random_state=None, shrinking=True,
  tol=0.001, verbose=False)

clf.support_vectors_         #支持向量

array([[-2.14824e-01,  6.62756e-01],
       [-5.57789e-01,  3.75797e-01],
       [ 4.90767e-01, -6.80029e-01],
       [-3.56048e-01,  5.37960e-01],
       [-4.75167e-01, -3.46247e-01],
       [ 4.02158e-01,  5.77744e-01],
       [ 6.19080e-01, -8.81880e-02],
       [ 5.39368e-01, -3.74972e-01],
       [-4.03483e-01,  4.74466e-01],
       [-1.29980e-02,  5.25985e-01],
       [ 1.53738e-01,  4.91531e-01],
       [ 3.88215e-01, -6.56567e-01],
       [ 7.47800e-01, -6.66300e-02],
       [-7.01600e-01,  1.90983e-01],
       [ 5.95222e-01,  2.09570e-01],
       [-3.07768e-01,  5.03038e-01],
       [-7.77063e-01, -3.48066e-01],
       [-7.55431e-01,  9.67110e-02],
       [ 3.34204e-01,  3.81237e-01],
       [ 2.27222e-01,  5.27437e-01],
       [ 5.77939e-01,  4.03784e-01],
       [-5.68534e-01,  4.42948e-01],
       [ 2.97885e-01, -6.32874e-01],
       [ 5.41359e-01, -2.05969e-01],
       [-6.89946e-01, -5.08674e-01],
       [ 5.23902e-01, -4.36156e-01],
       [ 2.49281e-01, -7.11840e-01],
       [ 1.93449e-01,  5.74598e-01],
       [-2.57542e-01, -7.53885e-01],
       [-7.25568e-01, -2.92022e-01],
       [ 2.23650e-01,  1.30142e-01],
       [ 2.07123e-01, -1.94630e-02],
       [ 1.95300e-01, -1.79039e-01],
       [-2.38076e-01,  5.83000e-04],
       [-4.13576e-01,  1.45681e-01],
       [ 1.99894e-01, -1.99381e-01],
       [-3.92868e-01, -1.25261e-01],
       [ 3.53588e-01, -7.06170e-02],
       [ 3.94164e-01, -5.82170e-02],
       [-4.49349e-01, -3.80740e-02],
       [ 2.68066e-01, -7.16210e-02],
       [-1.51650e-02,  3.59326e-01],
       [ 7.95220e-02,  1.93198e-01],
       [ 2.53289e-01, -2.85861e-01],
       [-2.50001e-01,  1.41621e-01],
       [ 6.82860e-02,  3.92741e-01],
       [ 3.53980e-02, -3.33682e-01],
       [ 2.11795e-01,  2.46890e-02],
       [-4.56770e-02,  1.72907e-01],
       [ 2.29465e-01,  2.50409e-01],
       [ 3.84300e-01, -1.76570e-01],
       [ 1.73900e-02,  1.52441e-01],
       [-2.93382e-01, -1.39778e-01],
       [-2.03272e-01,  2.86855e-01],
       [ 2.33512e-01, -1.06274e-01],
       [-4.48939e-01,  1.76725e-01],
       [ 1.55907e-01, -1.66371e-01],
       [ 2.04177e-01, -2.35160e-02],
       [-2.16050e-02,  1.58080e-01]])

clf.support_

array([ 0,  6, 15, 17, 21, 25, 27, 30, 36, 41, 42, 43, 46, 48, 53, 58, 59,
       65, 76, 78, 81, 82, 85, 87, 88, 90, 91, 92, 93, 99,  3,  7,  9, 13,
       14, 16, 18, 19, 23, 26, 28, 29, 33, 34, 40, 45, 50, 51, 52, 54, 56,
       60, 61, 62, 71, 74, 75, 80, 94])

clf.n_support_

array([30, 29])

#载入测试集
path_test = r"C:\Users\Machine Learning\testset_rbf2.txt"
dataset2 = pd.read_csv(path_test, header=None, sep='\t')
dataset2 = np.array(dataset2)
dataset2_data_test = dataset2[:,:-1]
dataset2_label_test = dataset2[:,-1]

clf_pred = clf.predict(dataset2_data_test)

clf.score(dataset2_data_test, dataset2_label_test)     #模型评估

0.9

#统计预测错误率

num = len(dataset2_label_test)
n = 0
for i in range(0,num):
    if clf_pred[i] != dataset2_label_test[i]:
        n += 1
print(n)
print("error_rate: %.2f" %(n/num) )

10
error_rate: 0.10

#对比真实值与预测值

print('dataset2_label_test clf_pred')
for i in range(0,num):
    print(dataset2_label_test[i],'                 ', clf_pred[i])

dataset2_label_test clf_pred
-1.0                   -1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
-1.0                   1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
-1.0                   1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
-1.0                   1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
-1.0                   1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
-1.0                   -1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
-1.0                   -1.0
-1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0

猜你喜欢

转载自blog.csdn.net/weixin_44530236/article/details/88823475