svm_SVC

本文介绍了SVM(支持向量机)的基本概念,包括支持向量、SVM的分类与回归模型。SVM通过找到最佳超平面实现分类,关键参数如C和核函数的选择对模型性能至关重要。示例展示了如何使用Python的sklearn库实现SVM,并进行了10重交叉验证。SVM可用于分类和回归任务,且在处理小样本和高维数据时表现出色。
摘要由CSDN通过智能技术生成

SVM算法

概要:SVM算法(support vector machine,支持向量机),是一种二分类算法。

  • 支持向量:支持或支撑平面上把两类类别划分开的超平面的向量点
  • 机:一个算法

SVM模型的种类

  • svm.LinearSVC Linear Support Vector Classification.
  • svm.LinearSVR Linear Support Vector Regression.
  • svm.NuSVC Nu-Support Vector Classification.
  • svm.NuSVR Nu Support Vector Regression.
  • svm.OneClassSVM Unsupervised Outlier Detection.
  • svm.SVC C-Support Vector Classification.
  • svm.SVR Epsilon-Support Vector Regression.

可以很简单的解释为三者的关系

  • SVM=Support Vector Machine 是支持向量
  • SVC=Support Vector Classification就是支持向量机用于分类,
  • SVR=Support Vector Regression.就是支持向量机用于回归分析

语言:python

领域:机器学习

支持向量机之SVC算法(svm.SVC)

svm.SVC:C-Support Vector Classification即svm用于分类

sklearn.svm.SVC(
	C=1.0, 
	kernel='rbf', 
	degree=3, 
	gamma='auto', 
	coef0=0.0, 
	shrinking=True, 
	probability=False, 
	tol=0.001, 
	cache_size=200, 
	class_weight=None, 
	verbose=False, 
	max_iter=-1, 
	decision_function_shape=None,
	random_state=None
	)

参数:

关键参数:

  • C:float类型,默认值是1.0
    参数表明算法要训练数据点需要作出多少调整适应,C小,SVM对数据点调整少,多半取平均,仅用少量的数据点和可用变量,C值增大,会使学习过程遵循大部分的可用训练数据点并牵涉较多变量。C值过大,有过拟合问题,C值过小,预测粗糙,不准确。

  • kernel :str类型,默认是rbf,核函数,可选参数有

    • linear:线性核函数
      k ( x , x i ) = x ⋅ x i k(x,x_i)=x \cdot xi k(x,xi)=xxi

    • poly:多项式核函数
      k ( x , x i ) = ( x ⋅ x i + 1 ) d k(x,x_i)=(x \cdot xi+1)^d k(x,xi)=(xxi+1)d

    • rbf:径像核函数/高斯核
      k ( x , x i ) = e x p ( − ∣ ∣ x − x i ∣ ∣ 2 δ 2 ) k(x,x_i)=exp({-||x-xi||^2 \over \delta^2}) k(x,xi)=exp(δ2xxi2)

    • sigmoid:sigmoid核函数(实现多层神经网络)
      k ( x , x i ) = t a n h ( η < x , x i > + θ ) k(x,x_i)=tanh(\eta <x,x_i>+\theta) k(x,xi)=tanh(η<x,xi>+θ)

    • precomputed:核矩阵表示自己提前计算好核函数矩阵,这时候算法内部就不再用核函数去计算核矩阵,而是直接用你给的核矩阵。

  • degree :int 类型,默认为3
    多项式poly函数的阶数n,选择其他核函数时会被忽略。

  • gamma :float 类型,默认为auto代表其值为样本特征数的倒数,即1/n_features
    核函数系数,只对rbf,poly,sigmod有效。

  • coef0 :float 类型,默认为0.0
    核函数的常数项,对于poly和 sigmoid代表其中的参数c

其他参数:

  • probability :bool类型,默认为False
    是否采用概率估计,需要在训练fit()模型时加上这个参数,之后才能用相关的方法:predict_proba和predict_log_proba
  • shrinking :bool类型,默认为True
    是否采用shrinking heuristic()启发式收缩方式
  • tol :float类型,默认为1e-3
    svm停止训练的误差值大小
  • cache_size :float类型,默认为200(MB)
    指定训练所需要的内存,以MB为单位
  • class_weight :字典类型或’balance’字符串,默认为None
    类别的权重,字典形式传递。设置第几类的参数C为weight*C(C-SVC中的C)
  • verbose :bool类型,默认为False
    是否启用详细输出。 此设置利用libsvm中的每个进程运行时设置,如果启用,可能无法在多线程上下文中正常工作。一般情况都设为False,不用管它。
  • max_iter :int类型, 默认为-1
    最大迭代次数。-1为无限制。
  • decision_function_shape :str类型,默认为’ovr’
    ovo’, ‘ovr’, default=’ovr’,是否将形状(n_samples,n_classes)的one-rest-rest(‘ovr’)决策函数作为所有其他分类器返回,或者返回具有形状的libsvm的原始one-vs-one(‘ovo’)决策函数(n_samples) ,n_classes *(n_classes - 1)/ 2)。
    通俗解释:ovr即为one v rest 一个类别分别与其他类别进行划分,ovo为one v one,类别两两之间划分,用二分类的方法模拟多分类的结果
  • random_state :int类型,默认为None
    伪随机数发生器的种子,在混洗数据时用于概率估计。

SVM预测模型的通用步骤

  • 选择使用的SVM类
  • 用数据训练模型
  • 检查验证误差并作为基准线
  • 为SVM参数尝试不同的值
  • 检查验证误差是否改进
  • 再次使用最优参数的数据来训练模型

示例代码

from sklearn.svm import SVC
import numpy as np
X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])  # 特征样本
y = np.array([1, 1, 2, 2])  # 分类标记
clf = SVC(kernel='sigmoid')  # 线性核函数
clf.fit(X, y)  # 训练模型,自动分类

print(clf.fit(X, y))  # svc训练函数参数
print(clf.predict([[-0.8, -1]]))  # 测试,新样本分类
print(clf.support_vectors_)  # 支持向量点 
print(clf.support_)  # 支持向量点的索引 
print(clf.n_support_)  # 每个class有几个支持向量点 

10重交叉验证

start = time.time()
clf = svm.SVC(kernel='sigmoid')
scores = cross_val_score(clf, X, Y, cv=10, scoring='accuracy')
print '用时%f 秒!' % (time.time() - start)
print 'svm10重交叉验证评分:', scores
print 'svm10重交叉验证平均分:', scores.mean()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值