支持向量机——sklearn 实现支持向量机(SVM)

《Python machine learning》书籍学习~~~

支持向量机的数学模型稍后补上,先来讲一下sklearn中的实现。

Support Vector Machine(SVM) ,优化目标与感知机相反,感知机是实现错误的最小优化;SVM实现边缘最大优化。

边缘(margin):两个分离差超平面之间的距离

支持向量(support vector):距离分割超平面最近的训练样本点

 

支持向量机——sklearn 实现支持向量机(SVM)_第1张图片

SVM的数学模型稍后补上。

 

SVC:SVM的一种类型,用于分类;SVR用于回归。

【sklearn库实现SVM】

调用sklearn.svm库中的SVC类。其中C参数是惩罚松弛变量。

C值越大,表示对误分类的惩罚增大,趋向于对于训练集全部正确分类,泛化能力弱。

C值越小,表示可以容忍错误分类,泛化能力强。

from sklearn.svm import SVC
svm = SVC(kernel = 'linear', C = 1.0, random_state = 1)
svm.fit(X_combined_std, y_combined)
plot_decision_regions(X =  X_combined_std, 
                      y = y_combined, 
                      classifier = svm, 
                      test_idx = range(105,150))
plt.xlabel('petal length [standardized]')
plt.ylabel('petal width [standardized]')
plt.legend(loc='upper left')
plt.tight_layout()
#plt.savefig('images/03_06.png', dpi=300)
plt.show()

支持向量机——sklearn 实现支持向量机(SVM)_第2张图片

 

【解决极大数据集的 SGDClassifier】

perceptron ,LogisticRegression来自于liblinear库,svc来自于libsvm库,这两个库对于大量的线性分类器允许进行极其快速的训练。 但是如果训练数据极其大,  sklearn库提供了SGDclassifier 类,即stochastic gradient descent classifier(随机梯度递减)。可以分别用perceptron,LR,SVM初始化SGDClassifier,loss参数表示损失函数选项,可选择不同分类器的损失函数。

支持向量机——sklearn 实现支持向量机(SVM)_第3张图片

例如:

from sklearn.linear_model import SGDClassifier
ppn = SGDClassifier(loss = 'perceptron')
lr = SGDClassifier(loss = 'log')#LogisticRegression
svm = SGDClassifier(loss = 'hinge')

【kernel methods  for linearly inseparable data】

#利用异或构造线性不可分数据集

#inlinear dataset
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(1)
X_xor = np.random.randn(200, 2)
#logical_xor(X1,X2)函数,返回   x1逻辑异或x2的结果
y_xor = np.logical_xor(X_xor[:, 0] > 0 , 
                      X_xor[:, 1] > 0)
y_xor = np.where(y_xor,1,-1)   
plt.scatter(X_xor[y_xor == 1, 0],
            X_xor[y_xor == 1, 1], 
            c = 'b', marker = 'x',
            label = '1')

plt.scatter(X_xor[y_xor == -1, 0],
            X_xor[y_xor == -1, 1],
            c = 'r', marker = 's', 
            label = '-1')
plt.xlim([-3, 3])
plt.ylim([-3, 3])
plt.legend(loc='best')
plt.tight_layout()
plt.show()

支持向量机——sklearn 实现支持向量机(SVM)_第4张图片
#利用kernel methods 分类数据集

kernel methods  即将二维非线性数据转换为三维可分数据集,利用下列φ函数

定义kernel function为:

 

其中比较常用的为radial basic function (RBF)也称为高斯kernel(Gaussian kenel)

   支持向量机——sklearn 实现支持向量机(SVM)_第5张图片

常写作,其中

svc = SVC(kernel ='rbf', C = 10.0, gamma =0.1, random_state = 1 )
svc.fit(X_xor, y_xor)
plot_decision_regions(X= X_xor, y = y_xor, classifier = svc)
plt.legend(loc = 'best')
plt.show()

其中gamma参数越大,分离超平面越严格,但是泛化能力越弱。所以gamma函数的调整是调整泛华能力的关键。

支持向量机——sklearn 实现支持向量机(SVM)_第6张图片

支持向量机——sklearn 实现支持向量机(SVM)_第7张图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(python,机器学习,sklearn)