简单通俗理解,使用SVM

一.SVM的分类表达式:
y = wx+b,w表示权重,b表示偏置
可以看出来,是一个线性分类器,那么就只能解决一个,就是我们输入的数据是线性可分的

所以总的来说:
1.如果数据是线性可分的(一般表现为特征维度远远大于数据量,或者数据维度很大),就可以直接使用线性核函数kernel=”liner”
2.如果数据是线性不可分,那么就要使用核函数将数据x变成线性可分,然后带回线性分类器,比如有输入数据x,核函数k,那么SVM分类器就表示为:y = wk(x)+b,
SVM的核函数共有5种’linear’(其实就是不使用核函数), ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’

但实际过程中根本不知道你的数据是线性可分还是不是线性可分的,所以一般都是使用数据把所有SVM各个核函数跑一遍,谁高选谁

SVM代码实例
from sklearn.svm import SVC
clf = SVC()
clf.set_params(kernel=svm_kernel,probability=probability).fit(X_train, y_train)
clf.predict(X_test)

二.SVM的参数
C=1.0, 惩罚因子C,即对误差的宽容度。c越高,说明越不能容忍出现误差,容易过拟合。C越小,容易欠拟合。
kernel=’rbf’, SVM核函数,可以为’linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’,或者自定义。
degree=3, 只作用于’poly’核函数,设置多项式核函数的最高此项次数
gamma=’auto’,决定了数据映射到新的特征空间后的分布,gamma越大,支持向量越少,gamma值越小,支持向量越多。支持向量的个数影响训练与预测的速度
coef0=0.0,
shrinking=True,
probability=False, 如果要返回分类的百分比,就把这个设置为True
tol=1e-3,
cache_size=200, 缓存
class_weight=None,
verbose=False,
max_iter=-1, 最大迭代次数
decision_function_shape=’ovr’, 设置多分类比较方式,1对1,还是1对多
random_state=None

三.各个核函数可调参的参数
C参数,任何核函数都可调 一般选择10^t , t=[- 4,4]
1.linear没其它参数可调的
2.poly 多项式核函数 重点就调一个degree参数,可以选择1-12
3.RBF 径向基核函数 gamma参数可以选择下面几个数的倒数:0.1 0.2 0.4 0.6 0.8 1.6 3.2 6.4 12.8,默认的是类别数的倒数,即1/k,2分类的话就是0.5
4.sigmoid 一般还可调2个参数,gamma,coef0,一般可选1 2 3 4,r选0.2 0.4 0.6 0.8 1

四.sklearn中SVM的问题
1.不支持多线程并行运算
2.不支持在线计算
3.2种预测方法predict和predict_proba(取最高概率)最终结果居然不一样

猜你喜欢

转载自blog.csdn.net/u011311291/article/details/81034656