sklearn-SVC实现与类参数算法
SVC继承了父类BaseSVC数组
SVC类主要方法:多线程
★__init__() 主要参数:dom
C: float参数 默认值为1.0函数
错误项的惩罚系数。C越大,即对分错样本的惩罚程度越大,所以在训练样本中准确率越高,可是泛化能力下降,也就是对测试数据的分类准确率下降。相反,减少C的话,允许训练样本中有一些误分类错误样本,泛化能力强。对于训练样本带有噪声的状况,通常采用后者,把训练样本集中错误分类的样本做为噪声。测试
kernel: str参数 默认为‘rbf’spa
算法中采用的核函数类型,可选参数有:线程
‘linear’:线性核函数对象
‘poly’:多项式核函数blog
‘rbf’:径像核函数/高斯核
‘sigmod’:sigmod核函数
‘precomputed’:核矩阵
具体这些核函数类型,请参考上一篇博客中的核函数。须要说明的是,precomputed表示本身提早计算好核函数矩阵,这时候算法内部就再也不用核函数去计算核矩阵,而是直接用你给的核矩阵。核矩阵为以下形式:
还有一点须要说明,除了上面限定的核函数外,还能够给出本身定义的核函数,其实内部就是用你本身定义的核函数来计算核矩阵。
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: float参数 默认为1e^-3
svm中止训练的偏差精度
cache_size:float参数 默认为200
指定训练所须要的内存,以MB为单位,默认为200MB。
class_weight:字典类型或者‘balance’字符串。默认为None
给每一个类别分别设置不一样的惩罚参数C,若是没有给,则会给全部类别都给C=1,即前面参数指出的参数C.
若是给定参数‘balance’,则使用y的值自动调整与输入数据中的类频率成反比的权重。
verbose :bool参数 默认为False
是否启用详细输出。 此设置利用libsvm中的每一个进程运行时设置,若是启用,可能没法在多线程上下文中正常工做。通常状况都设为False,不用管它。
max_iter :int参数 默认为-1
最大迭代次数,若是为-1,表示不限制
random_state:int型参数 默认为None
伪随机数发生器的种子,在混洗数据时用于几率估计。
★fit()方法:用于训练SVM,具体参数已经在定义SVC对象的时候给出了,这时候只须要给出数据集X和X对应的标签y便可。
★predict()方法:基于以上的训练,对预测样本T进行类别预测,所以只须要接收一个测试集T,该函数返回一个数组表示个测试样本的类别。
★属性有哪些:
svc.n_support_:各种各有多少个支持向量
svc.support_:各种的支持向量在训练样本中的索引
svc.support_vectors_:各种全部的支持向量
# -*- coding:utf-8 -*-
from sklearn.svm import SVC
import matplotlib.pyplot as plt
import numpy as np
X=np.array([[1,1],[1,2],[1,3],[1,4],[2,1],[2,2],[3,1],[4,1],[5,1],
[5,2],[6,1],[6,2],[6,3],[6,4],[3,3],[3,4],[3,5],[4,3],[4,4],[4,5]])
Y=np.array([1]*14+[-1]*6)
T=np.array([[0.5,0.5],[1.5,1.5],[3.5,3.5],[4,5.5]])
svc=SVC(kernel='poly',degree=2,gamma=1,coef0=0)
svc.fit(X,Y)
pre=svc.predict(T)
print pre
print svc.n_support_
print svc.support_
print svc.support_vectors_
运行结果:
[ 1 1 -1 -1] #预测结果
[2 3] #-1类和+1类分别有2个和3个支持向量
[14 17 3 5 13] #-1类支持向量在元训练集中的索引为14,17,同理-1类支持向量在元训练集中的索引为3,5,13
[[ 3. 3.] #给出各支持向量具体是哪些,前两个是-1类的
[ 4. 3.]
[ 1. 4.] #后3个是+1的支持向量
[ 2. 2.]
[ 6. 4.]]
结果如图所示。