机器学习——支持向量机(SVM)

一、SVM 概念

  1. 将样本的两种特征用 一条直线或者超平面分开,并且间隔最大。
  2. 非线性问题,因为其复杂性,需要使用复杂模型,参数多,容易过拟合,而 SVM既能解决复杂问题,又不容易过拟合(但不能保证不会过拟合)
    这里写图片描述

二、支持向量机算法基本原理

2.1 线性 SVM
线性(SVM):找到最好的决策边界
最大化 Margin: 决策边界最近的距离
最小的Margin之和最大化              

这里写图片描述

2.1 非线性(SVM)超平面
低维映射到高维再处理,找到最优的(核方法)
    一条直线方程,其中m是斜率,c是直线在y轴的截距:y= mx +c 
    二维空间里面,一条直线的方程可以表示为:Ax+By+C=0
    三维空间里面,平面的方程可以表示为:Ax+By+Cz+D=0
    那么超平面方程:

wTx=0wTx+b=0 w T x = 0 也 可 以 写 作 ( w T · x + b = 0 )

其中 w 和 x 是向量,w^T是两个向量的点积。向量w通常被称为权重。
w , x皆为向量, wx+b=0就是a1*x1+a2*x2+...an*xn+b=0  
2.2 超平面公式推导
超平面之间的距离

这里写图片描述

样本点到超平面之间的距离

这里写图片描述

样本的正确分类 - 拉格朗日方法(对偶算法):
  • 约束最优化问题
    对于线(w,b)可以通过缩放使得其结果值|y|>=1           yi(wTΦ(xi)+b)1 y i ( w T Φ ( x i ) + b ) ⩾ 1
    argmaxw,b{1wmini[yi(wTΦ(xi)+b)]} a r g m a x w , b { 1 ‖ w ‖ m i n i [ y i ( w T Φ ( x i ) + b ) ] }

    即(目标函数): argmaxw,b1w a r g m a x w , b 1 ‖ w ‖ yi(wTΦ(xi)+b)1 y i ( w T Φ ( x i ) + b ) ⩾ 1

      argminw,b12w2             转 换 成 求 最 小 值 : a r g m i n w , b 1 2 w 2 yi(wTΦ(xi)+b)1 y i ( w T Φ ( x i ) + b ) ⩾ 1

  • 拉格朗日乘子法标准格式:
    minf(x) m i n f ( x )
    s.tgi(x)0,i=1,2...m s . t g i ( x ) ⩽ 0 , i = 1 , 2... m
  • 样本正确分类(拉格朗日方法):
    1. f(x)=wTx+b f ( x ) = w T x + b
    2. 构造拉格朗日方程:
      s.t.yi(wTx+b)1,   i=1,2,3...m s . t . y i ( w T x + b ) ≥ 1 ,       i = 1 , 2 , 3... m
      gi(x)=1yi(wTxi+b)0,   i=1,2,3...m g i ( x ) = 1 − y i ( w T x i + b ) ≤ 0 ,       i = 1 , 2 , 3... m

                     L(w,b,α)=12||w||2+mi=1αi(1yi(wTxi+b))                                           L ( w , b , α ) = 1 2 | | w | | 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) )

2.3 拉格朗日乘子法-超平面推论

对偶算法-1
对偶算法-2
对偶算法-3
对偶算法-4
对偶算法-5

2.4 示例:拉格朗日乘子法求超平面

例题:已知如图训练集:
正例点 x1=(3,3)T,x2=(4,3)T,x3=(1,1)T x 1 = ( 3 , 3 ) T , x 2 = ( 4 , 3 ) T , 负 例 点 x 3 = ( 1 , 1 ) T
试求最大间隔分离超平面。
这里写图片描述
对偶算法-6
对偶算法-7

2.5 松弛因子

这里写图片描述
这里写图片描述
这里写图片描述

在 SVM 中设定一个参数「C」;从而你可以在两种结果中权衡:
    1. 拥有很宽的间隔;
    2. 精确分离训练数据;
C 的值越大,意味着在训练数据中允许的误差越少。
必需强调一下这是一个权衡的过程。如果想要更好地分类训练数据,那么代价就是间隔会更宽。 
以下几个图展示了在不同的 C 值中分类器和间隔的变化(未显示支持向量)。

这里写图片描述

三、核函数

核函数特点
如果数据集中有 n 个点,SVM 只需要将所有点两两配对的点积以寻找分类器。仅此而已。
当我们需要将数据映射到高维空间的时候也是这样, 不需要向 SVM 提供准确的映射
而是提供映射空间中所有点两两配对的点积
3.1 核函数定义
假设X是输入空间,H是特征空间,存在一个映射ϕ使得X中的点x能够计算得到H空间中的点h ,对于所有的X中的点都成立:

h=ϕ(x) h = ϕ ( x )

若x,z是X空间中的点,函数k(x,z)满足下述条件,那么都成立,则称k为核函数,而ϕ为映射函数:

k(x,z)=ϕ(x)ϕ(z) k ( x , z ) = ϕ ( x ) ⋅ ϕ ( z )

3.2 常用核函数
线性核
线性核,主要用于线性可分的情况,我们可以看到特征空间到输入空间的维度是
一样的,其参数少速度快,对于线性可分数据,其分类效果很理想。
K(xi,xj)=xTi,xj K ( x i , x j ) = x i T , x j
多项式核
将低维的输入空间映射到高纬的特征空间,但是多项式核函数的参数多,当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大,计算复杂度会大到无法计算。(d≥1为多项式的次数)
K(xi,xj)=(xTi,xj)d K ( x i , x j ) = ( x i T , x j ) d
高斯(RBF)核函数
高斯径向基函数是一种局部性强的核函数,可以将一个样本映射到一个更高维的空间内,该核函数是应用最广的一个,无论大样本还是小样本都有比较好的性能,(相对于多项式核函数参数要少)。
因此大多数情况下在不知道用什么核函数的时候,优先使用高斯核函数多项式核。
(σ ( σ >0 为高斯核的宽带)
K(xi,xj)=exp(||xTi,xj||22σ2) K ( x i , x j ) = e x p ( − | | x i T , x j | | 2 2 σ 2 )

这里写图片描述
sigmoid核函数
采用sigmoid核函数,支持向量机实现的就是一种多层神经网络。
(tanh为双曲正切函数,β>0,θ<0)
K(xi,xj)=tanh(βxTixj+θ) K ( x i , x j ) = t a n h ( β x i T x j + θ )
核函数选择依据

如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM;
如果特征的数量小,样本的数量正常,则选用SVM+高斯核函数;
如果特征的数量小,而样本的数量很大,则需要手工添加一些特征从而变成第一种情况。

这里写图片描述
这里写图片描述

3.3 核矩阵

这里写图片描述
对于一个二位空间 映射到 三维空间: P(x,y)=(x2,2xy,y2) P ( x , y ) = ( x 2 , 2 x y , y 2 )
这里写图片描述
考虑到核函数: K(v1,v2)=<v1,v2>2 K ( v 1 , v 2 ) =< v 1 , v 2 > 2 , 即“内积平方”
设二维空间存在: v1=(x1,y1),v2=(x2,y2) v 1 = ( x 1 , y 1 ) , v 2 = ( x 2 , y 2 ) 两点:
可证
这里写图片描述

三、支持向量机代码演示

from sklearn.svm.import SVC
svc = SVC(
            C = 1.0,
            lernel = '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  --误差项惩罚参数,C越大,越容易过拟合
kernel  --核参数,'linear','poly','rbf','sigmoid'
gamma   --当kernel为'poly','rbf','sigmoid'时,默认1/n_feature

四、支持向量机参数优化

parameters = {
               'C':[0.001,0.01,0.1,1,10,1000],
               'kernel':['linear','poly','rbf','sigmoid']
               'gamma':[0.0001,0.001]
             }
svm= SVC()
grid_search = GridSearchCV(svm,parameters,scoring = 'accuracy',cv = 5)
grid_search.fit(x,y)

五、支持向量机总结

支持向量机是一个‘超平面分类算法’
最佳超平面-->支持向量Margin(间隔)最大的超平面
支持向量就是离超平面最近的数据点
数据低维--kernel() -->高维,使其线性分开
SVM 主要参数调优:C,gamma,kernel
SVM只支持数值型变量,分类型变量-->onehot编码
SVM对缺失值敏感,需提取处理

这里写图片描述
SVM没有处理缺失值的策略(决策树有)。而SVM希望样本在特征空间中线性可分,所以特征空间的好坏对SVM的性能很重要。缺失特征数据将影响训练结果的好坏。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
情感识别系统是一种可以自动判断和分类文本或语音中所表达的情感的算法支持向量机(SVM)是一种常用的机器学习方法,在情感识别中也广泛应用。 SVM基于对数据进行特征映射,将数据从低维空间转化为高维空间,以便更好地进行分类。在情感识别中,我们可以将文本或语音数据转化为特征向量表示,然后使用SVM进行分类。通常选择常用的特征表示方法如词袋模型或者TF-IDF进行特征提取。 下面给出一个用Matlab实现情感识别系统的示例代码: ```matlab % 导入情感数据集 data = importdata('emotion_data.txt'); % 划分训练集和测试集 trainRatio = 0.8; trainSize = int32(length(data) * trainRatio); trainData = data(1:trainSize,:); testData = data(trainSize+1:end,:); % 提取特征和标签 trainFeatures = trainData(:,1:end-1); trainLabels = trainData(:,end); testFeatures = testData(:,1:end-1); testLabels = testData(:,end); % 创建SVM模型 svmModel = fitcsvm(trainFeatures, trainLabels); % 在测试集上进行预测 predictedLabels = predict(svmModel, testFeatures); % 计算准确率 accuracy = sum(predictedLabels == testLabels) / length(testLabels); disp(['准确率:' num2str(accuracy*100) '%']); ``` 以上代码中,我们首先导入情感数据集,然后将数据划分为训练集和测试集。接着我们提取特征和标签,即将文本数据转化为特征向量表示。 然后我们使用fitcsvm函数来创建SVM模型,并通过predict函数在测试集上进行预测。最后我们计算准确率来评估模型的性能。 这是一个简单的情感识别系统的实现示例,实际情感识别会有更多的特征提取方法和模型调参等工作。希望这个回答能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SongpingWang

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值