概述
文章目录
- 概述
- 1. sklearn.svm分类器
- 1.1 sklearn.svm.SVC
- 1.2 sklearn.svm.NuSVC
- 1.3 sklearn.svm.LinearSVC
- 1.4 SVC实例
概述
支持向量机(Support Vector Machine)是一种建立在统计学VC维和结构风险最小化原则下的监督学习机制,既可用于分类,也可用于回归和异常值检测。
SVM分类的理论基础及Python代码详见我的《小瓜讲机器学习——分类算法(二)支持向量机(SVM)算法原理详解》。
这里只对scikit-learn中的svm分类器做介绍和实践。
1. sklearn.svm分类器
sklearn库中的svm包是基于国立台湾大学林智仁(Lin Chih-Jen)教授团队开发的libsvm和linearsvm开源库开发的支持向量机包,里面包含多种支持向量机模型,如下表所示
模型/estimators | 说明 |
---|---|
svm.LinearSVC | 线性支持向量机分类器 |
svm.LinearSVR | 线性支持向量机回归模型 |
svm.NuSVC | 支持向量机分类器 |
svm.NuSVR | 支持向量机回归模型 |
svm.OneClassSVM | 异常值检测 |
svm.SVC | 支持向量机分类器 |
svm.SVR | 支持向量机回归模型 |
svm.l1_min_c |
1.1 sklearn.svm.SVC
支持向量机SVC是一种多分类器,帮助可查sklearn.svm.SVC,格式如下
sklearn.svm.SVC(C=1.0, kernel=’rbf’, degree=3, gamma=’auto_deprecated’, 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’, random_state=None)
参数说明:
- C (default=1.0):惩罚因子,即是SVM优化目标 ( 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ ξ i ) (frac{1}{2}||w||^2+Csum xi_i) (21∣∣w∣∣2+C∑ξi)中的松弛变量的系数,C值越大,对误分类的容错变小,过大的C值容易过拟合,C值越小,对误分类的容错变大,过小的C值容易欠拟合;
- kernel (default=‘rbf’):核函数选择,可选值:'linear’线性核函数, 'poly’多项式核函数, 'sigmoid’双曲正切核函数,‘rbf’高斯核函数, ‘precomputed’;
- ‘poly’核函数: K ( x i , x j ) = ( γ x i T ∙ x j + r ) p K(x_i,x_j)=(gamma x_i^Tbull x_j+r)^p K(xi,xj)=(γxiT∙xj+r)p
- ‘rbf’核函数: K ( x i , x j ) = exp ( − γ ∣ ∣ x i − x j ∣ ∣ 2 ) K(x_i,x_j)=exp (-gamma ||x_i-x_j||^2) K(xi,xj)=exp(−γ∣∣xi−xj∣∣2)
- 'sigmoid’核函数: K ( x i , x j ) = tanh ( γ x i T x j + r ) K(x_i,x_j)=tanh (gamma x_i^Tx_j+r) K(xi,xj)=tanh(γxiTxj+r)
- 'linear’核函数: K ( x i , x j ) = x i T x j K(x_i,x_j)=x_i^Tx_j K(xi,xj)=xiTxj
- degree(default=3):多项式核函数阶数,只对‘poly’有效;
- gamma(default=‘auto’):‘rbf’、‘poly’、'sigmoid’核函数的参数 γ gamma γ;
- coef0(default=0.0):核函数中的常量 r r r,仅对‘poly’和‘sigmoid’有用;
- shrinking(default=True):是否进行启发式;
- probability(default=False):概率估计;
- tol(default=1e-3):迭代终止精度;
- cache_size:核函数的缓存空间;
- class_weight:类别权重,主要针对不同类别中样本数不平衡的情况;
- verbose(default=False):是否将训练的过程详细输出;
- max_iter(default=-1):最大迭代次数,默认-1是无限制的意思;
- decision_function_shape(default=‘ovr’):SVM是二分类的方法,扩展到多分类情况下需要一定的策略,包含‘ovo’、‘ovr’,默认为’ovr’;
- random_state(default=None):将样本顺序随机化,更有利于训练模型。
属性:
- support_:支持向量的索引值;
- support_vectors:支持向量;
- n_support_:支持向量数;
- dual_coef_:决策函数中支持向量的系数,其实就是式 f ( x ) = ∑ α i y i K ( x , x i ) + b f(x)=sum alpha_iy_iK(x,x_i)+b f(x)=∑αiyiK(x,xi)+b其中的 α i y i alpha_iy_i αiyi;
- coef_:决策函数decision function特征系数参数(仅线性核函数);
- intercept_:决策函数常量参数(截距);
- fit_status_:拟合程度,0代表正确拟合,1代表非正确;
- probA_,probB_:Platt的概率估计参数。
1.2 sklearn.svm.NuSVC
支持向量机NuSVC是一种多分类器,帮助可查sklearn.svm.NuSVC,格式如下
sklearn.svm.SVC(nu=0.5, kernel=’rbf’, degree=3, gamma=’auto_deprecated’, 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’, random_state=None)
参数说明:与SVC不同的点是将惩罚系数C换了nu,其他都一样。
属性说明:属性与SVC前六点一样,第7和8两项NuSVC没有。
1.3 sklearn.svm.LinearSVC
支持向量机LinearSVC是一种多分类器,帮助可查sklearn.svm.LinearSVC,格式如下
sklearn.svm.LinearSVC(penalty=’l2’, loss=’squared_hinge’, dual=True, tol=0.0001, C=1.0, multi_class=’ovr’,
fit_intercept=True, intercept_scaling=1, class_weight=None, verbose=0,
random_state=None, max_iter=1000)
参数说明:
- penalty(default=‘l2’):正则化参数,L1和L2两种参数可选,仅LinearSVC有;
- loss(default=‘squared_hinge’):损失函数,可选值’hinge’和’squared_hinge’;
- dual(default=True):是否转化为对偶问题求解;
- tol(default=1e-4):迭代终止精度;
- C(default=1):惩罚因子,即是SVM优化目标 ( 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ ξ i ) (frac{1}{2}||w||^2+Csum xi_i) (21∣∣w∣∣2+C∑ξi)中的松弛变量的系数,C值越大,对误分类的容错变小,过大的C值容易过拟合,C值越小,对误分类的容错变大,过小的C值容易欠拟合;
- multi_class(default=‘ovr’):多分类策略,包含‘ovo’、‘ovr’、‘None’,默认为’ovr’;
- fit_intercept:是否计算截距;
- intercept_scaling:当self.fit_intercept为True时,实例向量x变为[x,self.intercept_scaling],即具有等于intercept_scaling的常量值的“合成”特征被附加到实例向量。 截距变为intercept_scaling *合成特征权重注意! 合成特征权重与所有其他特征一样经受l1 / l2正则化。 为了减小正则化对合成特征权重(并因此对截距)的影响,必须增加intercept_scaling(原文链接:https://blog.csdn.net/ustbclearwang/article/details/81236732)
- class_weight:类别权重,主要针对不同类别中样本数不平衡的情况;
- verbose(default=0):是否将训练的过程详细输出;
- random_state(default=None):将样本顺序随机化,更有利于训练模型;
- max_iter(default=1000):最大迭代次数。
属性说明:
- coef_:决策函数decision function特征系数参数(仅线性核函数);
- intercept_:决策函数常量参数(截距);
1.4 SVC实例
训练样本为
4.45925637575900 8.22541838354701 -1
0.0432761720122110 6.30740040001402 -1
6.99716180262699 9.31339338579386 -1
4.75483224215432 9.26037784240288 -1
...
4.15244831176753 1.44597290703838 1
9.55986996363196 1.13832040773527 1
1.63276516895206 0.446783742774178 1
9.38532498107474 0.913169554364942 1
训练过程如下
import numpy as np
import pandas as pd
from sklearn.svm import SVC
import matplotlib.pyplot as plt
def dataplot(data, label):
data1 = data[label.label==-1]
data2 = data[label.label==1]
plt.scatter(data1.x, data1.y, c='red')
plt.scatter(data2.x, data2.y, c='blue')
#plt.show()
if __name__=='__main__':
with open(r'h:python dataanalysissklearnsvm_train_data.txt') as f:
data = []
label = []
for loopi in f.readlines():
line = loopi.strip().split('t')
data.append([float(line[0]),float(line[1])])
label.append(float(line[2]))
feature_x = np.array(data)
label_y = np.array(label)
datax = pd.DataFrame(data, columns=['x','y'])
labely = pd.DataFrame(label, columns=['label'])
clf = SVC(C=0.5,kernel='linear')
clf.fit(feature_x, label_y)
print('----support vector indice----')
print(clf.support_)
print('------ support vector ------')
print(clf.support_vectors_)
print('------- coef of feacture -------')
print(clf.coef_)
print('--------- intercept_ -------')
print(clf.intercept_)
print('--------- n_support_ -------')
print(clf.n_support_)
x = np.array([0, 10])
y = -1/clf.coef_[0,1] * (clf.coef_[0,0] * x + clf.intercept_)
dataplot(datax, labely)
plt.plot(x,y)
plt.show()
可以得到训练的线性支持向量机模型
----support vector indice----
[ 46 62 127 139]
------ support vector ------
[[4.14342744 5.21158368]
[5.47187479 6.52268275]
[9.41511021 8.19137839]
[1.29475743 0.24866204]]
------- coef of feacture -------
[[ 0.89370539 -0.91378603]]
--------- intercept_ -------
[0.07033913]
--------- n_support_ -------
[2 2]
画成图,可以见到蓝色线即是训练得到的分割超平面,两边为正实例和负实例。
最后
以上就是含蓄小白菜为你收集整理的[数据挖掘之scikit-learn] sklean.svm 分类器实例详解的全部内容,希望文章能够帮你解决[数据挖掘之scikit-learn] sklean.svm 分类器实例详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复