支持向量机——sklearn 实现支持向量机(SVM)
2018-04-01 16:58
399 查看
《Python machine learning》书籍学习~~~
支持向量机的数学模型稍后补上,先来讲一下sklearn中的实现。
Support Vector Machine(SVM) ,优化目标与感知机相反,感知机是实现错误的最小优化;SVM实现边缘最大优化。
边缘(margin):两个分离差超平面之间的距离
支持向量(support vector):距离分割超平面最近的训练样本点
![](https://img-blog.csdn.net/20180331170235127?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FteV9tbQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
SVM的数学模型稍后补上。
SVC:SVM的一种类型,用于分类;SVR用于回归。
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()
![](https://img-blog.csdn.net/20180401113031460?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FteV9tbQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
![](https://img-blog.csdn.net/20180401114613764?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FteV9tbQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
例如:from sklearn.linear_model import SGDClassifier
ppn = SGDClassifier(loss = 'perceptron')
lr = SGDClassifier(loss = 'log')#LogisticRegression
svm = SGDClassifier(loss = 'hinge')
![](https://img-blog.csdn.net/20180401130603450?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FteV9tbQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
#利用kernel methods 分类数据集kernel methods 即将二维非线性数据转换为三维可分数据集,利用下列φ函数
![](https://img-blog.csdn.net/20180401130849263?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FteV9tbQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
定义kernel function为:
![](https://img-blog.csdn.net/20180401130936901?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FteV9tbQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
其中比较常用的为radial basic function (RBF)也称为高斯kernel(Gaussian kenel)
![](https://img-blog.csdn.net/20180401131132566?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FteV9tbQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
常写作
![](https://img-blog.csdn.net/20180401131233972?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FteV9tbQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
,其中
![](https://img-blog.csdn.net/20180401131247220?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FteV9tbQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
。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函数的调整是调整泛华能力的关键。
![](https://img-blog.csdn.net/20180401131528771?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FteV9tbQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
支持向量机的数学模型稍后补上,先来讲一下sklearn中的实现。
Support Vector Machine(SVM) ,优化目标与感知机相反,感知机是实现错误的最小优化;SVM实现边缘最大优化。
边缘(margin):两个分离差超平面之间的距离
支持向量(support vector):距离分割超平面最近的训练样本点
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()
【解决极大数据集的 SGDClassifier】
perceptron ,LogisticRegression来自于liblinear库,svc来自于libsvm库,这两个库对于大量的线性分类器允许进行极其快速的训练。 但是如果训练数据极其大, sklearn库提供了SGDclassifier 类,即stochastic gradient descent classifier(随机梯度递减)。可以分别用perceptron,LR,SVM初始化SGDClassifier,loss参数表示损失函数选项,可选择不同分类器的损失函数。例如: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()
#利用kernel methods 分类数据集kernel methods 即将二维非线性数据转换为三维可分数据集,利用下列φ函数
定义kernel function为:
其中比较常用的为radial basic function (RBF)也称为高斯kernel(Gaussian kenel)
常写作
,其中
。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)
- 支持向量机——sklearn 实现支持向量机(SVM)
- 支持向量机——sklearn 实现支持向量机(SVM)
- 支持向量机——sklearn 实现支持向量机(SVM)
- 支持向量机——sklearn 实现支持向量机(SVM)
- 支持向量机——sklearn 实现支持向量机(SVM)
- 支持向量机——sklearn 实现支持向量机(SVM)
- 支持向量机——sklearn 实现支持向量机(SVM)
- 支持向量机——sklearn 实现支持向量机(SVM)
- 支持向量机——sklearn 实现支持向量机(SVM)
- 支持向量机——sklearn 实现支持向量机(SVM)
- 支持向量机——sklearn 实现支持向量机(SVM)
- 支持向量机——sklearn 实现支持向量机(SVM)
- 支持向量机 (SVM) 以及 sklearn 实现
- 从软件工程的角度写机器学习5——SVM(支持向量机)实现
- 支持向量机(SVM)理解以及在sklearn库中的简单应用
- sklearn的机器学习之路:支持向量机(SVM)
- OpenCV3.3中支持向量机(Support Vector Machines, SVM)实现简介及使用
- 支持向量机(SVM)算法的Python实现
- 基于支持向量机SVM的文本分类的实现