06. 支持向量机

算法思路

支持向量机算法跟感知机类似,都是找到一个超平面将数据分割开来。
但是,我们知道,加入数据线性可分的情况下,一般分隔数据的超平面是无线个,那么哪一个超平面是最好的呢?
感知机算法对这个不做要求,而支持向量机要求寻找的超平面距离数据点尽可能的远,这就是支持向量机的主要思想。
那如果现在如果数据不是线性可分呢?
这里有两个策略:其一,我们可以允许支持向量机存在噪声点;其二,我们将空间扩展到高维,使其线性可分,这个便成为核函数。

模型定义

输入: X = { x ( 1 ) , x ( 2 ) , … , x ( K ) } X=\{x^{(1)}, x^{(2)}, \dots, x^{(K)}\} X={ x(1),x(2),,x(K)}, y = { y ( 1 ) , y ( 2 ) , … , y ( K ) } y=\{y^{(1)}, y^{(2)}, \dots, y^{(K)}\} y={ y(1),y(2),,y(K)}。其中, x ( i ) x^{(i)} x(i)代表数据的第 i i i个样本, x j x_j xj代表数据的第 j j j个维度, x ( i ) ∈ R D x^{(i)}\in \mathbf{R}^D x(i)RD y ( i ) ∈ { − 1 , 1 } y^{(i)}\in\{-1,1\} y(i){ 1,1};
模型: y ^ = s i g n ( w T x + b ) \hat y=sign(w^Tx+b) y^=sign(wTx+b)

模型推导

硬间隔

核心思想就是数据点距离决策边界尽可能的大,即:
{ max ⁡ w , b min ⁡ i y ( i ) ( w T x ( i ) + b ) ∥ w ∥ s . t .   y ( i ) ( w T x ( i ) + b ) ≥ 0 \begin{cases} \max_{w,b} \min_i \frac{y^{(i)}(w^Tx^{(i)}+b)}{\left\|w\right\|}\\ s.t.\ y^{(i)}(w^Tx^{(i)}+b) \ge 0 \end{cases} { maxw,bminiwy(i)(wTx(i)+b)s.t. y(i)(wTx(i)+b)0
其中,限制条件是分类正确的情况,毕竟我们的模型要求正确分类。
由于我们关心的是 w , b w,b w,b的方向,所以我们可以令 min ⁡ i y ( i ) ( w T x ( i ) + b ) = 1 \min_i y^{(i)}(w^Tx^{(i)}+b)=1 miniy(i)(wTx(i)+b)=1,所以原式子化简为:
{ max ⁡ w , b 1 ∥ w ∥ → min ⁡ w , b 1 2 w T w s . t .   y ( i ) ( w T x ( i ) + b ) ≥ 1 \begin{cases} \max_{w,b}\frac{1}{\left\|w\right\|} \to\min_{w,b}\frac{1}{2}w^Tw\\ s.t.\ y^{(i)}(w^Tx^{(i)}+b) \ge 1 \end{cases} { maxw,bw1minw,b21wTws.t. y(i)(wTx(i)+b)1
上式中的 1 2 \frac12 21常数,以及 ∥ w ∥ 2 = w T w \left\|w\right\|^2=w^Tw w2=wTw均不影响结果。
采用拉格朗日乘子法,构造式子如下:
{ min ⁡ w , b max ⁡ λ L ( w , b , λ ) = 1 2 w T w + ∑ i = 1 K λ i ( 1 − y ( i ) ( w T x ( i ) + b ) ) s . t . λ i ≥ 0 \begin{cases} \min_{w,b}\max_\lambda L(w,b,\lambda) = \frac12 w^Tw+\sum_{i=1}^K \lambda_i(1-y^{(i)}(w^Tx^{(i)}+b))\\ s.t. \lambda_i \ge 0 \end{cases} { minw,bmaxλL(w,b,λ)=21wTw+i=1Kλi(1y(i)(wTx(i)+b))s.t.λi0
由于上式满足强队偶关系1 ,所以对原式求对偶得:
{ max ⁡ λ min ⁡ w , b L ( w , b , λ ) = 1 2 w T w + ∑ i = 1 K λ i ( 1 − y ( i ) ( w T x ( i ) + b ) ) s . t . λ i ≥ 0 \begin{cases} \max_\lambda\min_{w,b} L(w,b,\lambda) = \frac12 w^Tw+\sum_{i=1}^K \lambda_i(1-y^{(i)}(w^Tx^{(i)}+b))\\ s.t. \lambda_i \ge 0 \end{cases} { maxλminw,bL(w,b,λ)=21wTw+i=1Kλi(1y(i)(wTx(i)+b))s.t.λi0
先行求解 min ⁡ w , b L ( w , b , λ ) = 1 2 w T w + ∑ i = 1 K λ i ( 1 − y ( i ) ( w T x ( i ) + b ) ) \min_{w,b} L(w,b,\lambda) = \frac12 w^Tw+\sum_{i=1}^K \lambda_i(1-y^{(i)}(w^Tx^{(i)}+b)) minw,bL(w,b,λ)=21wTw+i=1Kλi(1y(i)(wTx(i)+b)),我们对其做偏导得:
{ ∂ L ( w , b , λ ) ∂ w = w − ∑ i = 1 K λ i y ( i ) x ( i ) ∂ L ( w , b , λ ) ∂ b = − ∑ i = 1 K λ i y ( i ) \begin{cases} \frac{\partial L(w,b,\lambda)}{\partial w}=w-\sum_{i=1}^K\lambda_iy^{(i)}x^{(i)}\\ \frac{\partial L(w,b,\lambda)}{\partial b}=-\sum_{i=1}^K\lambda_iy^{(i)} \end{cases} { wL(w,b,λ)=wi=1Kλiy(i)x(i)bL(w,b,λ)=i=1Kλiy(i)
令其为0,得到 w = ∑ i = 1 K λ i y ( i ) x ( i ) , ∑ i = 1 K λ i y ( i ) = 0 w=\sum_{i=1}^K\lambda_iy^{(i)}x^{(i)},\sum_{i=1}^K\lambda_iy^{(i)}=0 w=i=1Kλiy(i)x(i),i=1Kλiy(i)=0。用其化简 L ( w , b , λ ) L(w,b,\lambda) L(w,b,λ)为:
L ( w , b , λ ) = 1 2 w T w + ∑ i = 1 K λ i ( 1 − y ( i ) ( w T x ( i ) + b ) ) = 1 2 ∑ i = 1 K λ i y ( i ) x ( i ) T ∑ j = 1 K λ j y ( j ) x ( j ) + ∑ i = 1 K

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
净值 | 3-10 | 16550.33 | | 11 | 负债和所有者权益总计 | 3-10 | 25000 | 损益表: | | 项目 | 年份 | 金额(万元好的,我可以为你介绍支持向量机(Support Vector Machine,简称 SVM)。 SVM 是一种) | | -- | ------------ | ---- | ---------- | | 1 | 营业收入 | 3 | 2196二分类模型,其基本思想是找到一个超平面(在二维空间中为一条直线.8 | | 2 | 营业收入 | 4 | 2702.4 | | 3 | 营业收入 | 5-9 | 3380.3 | | 4 | 营业成),将数据集分为两类,并使得超平面到两类样本的最近距离(即间隔)本 | 3 | 14416.5 | | 5 | 营业成本 | 4 |最大。最近距离的样本点被称为支持向量,它们决定了超平面的位置 17734.5 | | 6 | 营业成本 | 5-9 | 22233.75 | | 7 | 营业税金及附加 | 3 | 33.06 | | 8 。 SVM 的优点是对于高维数据集和小样本集有较好的分类效果,并且具有 | 营业税金及附加 | 4 | 40.83 | | 9 | 营业税金及较好的泛化性能。但是,SVM 的训练时间较长,对于大规模数据集不太附加 | 5-9 | 51.12 | | 10 | 折旧与摊销 | 3-适用。 在 Python 中,可以使用 scikit-learn 库来实现 SVM。下面是一个简单的例子: 10 | 3736.25 | | 11 | 其他营业收支 | 3-10 | 0 | ```python from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import| 12 | 净利润 | 3 | -11677.21 | | 13 | 净利润 | accuracy_score # 加载数据集 iris = datasets.load_iris() X = iris.data[:, :2] y = iris.target 4 | -14447.43 | | 14 | 净利润 | 5-9 | -18117# 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y,.12 | | 15 | 净利润 | 10 | -25000 | 现金流量表: | test_size=0.2, random_state=42) # 构建 SVM 模型 svm = SVC(kernel='linear', C=1 | 项目 | 年份 | 金额(万元) | | -- | ------------------ | ---- | ---------- | | 1 .0) # 训练模型 svm.fit(X_train, y_train) # 预测测试集 y_pred = svm.predict(X | 经营活动现金流入 | 3 | 2196.8 | | 2 | 经营活动现金流入 | 4 | 2702.4 | | 3 | 经营活动现_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print('Accuracy:', accuracy) ``` 在这个例子中,我们使用 iris 数据集,将前两个特征作为输入变量。我们将数据集划分金流入 | 5-9 | 3380.3 | | 4 | 经营活动现金流出 | 3 | -14416.5 | | 5 | 经营活动现金流出 为训练集和测试集,并构建一个线性 SVM 模型来进行分类。最后,我们计算模型在 | 4 | -17734.5 | | 6 | 经营活动现金流出 | 5测试集上的准确率。 当然,SVM 还有很多其他的参数和技巧,比如核函数、-9 | -22233.75 | | 7 | 经营活动净现金流量 | 3 软间隔、多分类等,需要根据具体应用进行调整和选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值