机器学习8:支持向量机(SVM)

支持向量机(support vector machines)

优点:泛化错误率低,计算开销不大,结果易解释
缺点: 对参数调节和核函数的选择敏感,原始分类器不加修改仅适用于处理二分类问题。
适用数据类型: 数值型和标称型数据。

是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化,最终转化为一个凸二次规划问题来求解。

由简至繁的模型包括:

当训练样本线性可分时,通过硬间隔最大化,学习一个线性可分支持向量机;

当训练样本近似线性可分时,通过软间隔最大化,学习一个线性支持向量机;

当训练样本线性不可分时,通过核技巧和软间隔最大化,学习一个非线性支持向量机

支持向量,距离最大化:

距离分类超平面最近的点(支持向量),点到超平面距离越大,分类更优;
在这里插入图片描述

误差最小化

度量模型,一种是看误分类多少点(分类误差),一种是看间隔多宽(边际误差),

margin最大化,误差越小

边际误差计算

首先, W = ( w 1 , w 2 ) , x = ( x 1 , x 2 ) , 并 且 W x = w 1 x 1 + w 2 x 2 W = (w_1, w_2),x = (x_1,x_2), 并且 Wx = w_1x_1 + w_2x_2 W=(w1,w2),x=(x1,x2),Wx=w1x1+w2x2

请注意,在这里我们有三条线,方程如下:(这里取“+/-1”,是基于计算方便考虑, 相对逻辑回归的0/1)

Wx+b=1

Wx+b=0

Wx+b=-1

该向量与方程为 Wx=1的线条相交于蓝点。假设该点的坐标为 (p,q)。那么我们可以得到下面两个结果:

w 1 p + w 2 q = 1 w_1p + w_2q = 1 w1p+w2q=1(由于该点位于这条线上),并且

由于该点位于向量 W = ( w 1 , w 2 ) W = (w_1, w_2) W=(w1,w2)上(p,q) 是 ( w 1 , w 2 ) (w_1, w_2) (w1,w2)的倍数。

我们可以这样求解这个方程:对于某个 k 值而言,有 ( p , q ) = k ( w 1 , w 2 ) (p,q) = k(w_1, w_2) (p,q)=k(w1,w2)

那么我们的第一个方程将被转换为 k ( w 1 2 + w 2 2 ) = 1 k(w_1^2 + w_2^2) = 1 k(w12+w22)=1

因此, k = 1 w 1 2 + w 2 2 = 1 ∣ W ∣ 2 k = \frac{1}{w_1^2+w_2^2} = \frac{1}{|W|^2} k=w12+w221=W21。这也就是说,蓝点表示向量 W ∣ W ∣ 2 \frac{W}{|W|^2} W2W
如图所示。

在这里插入图片描述

最后,最终距离是这连续两条平行线之间的距离之和。由于每两条线之间的距离为 1 ∣ W ∣ , 那 么 总 距 离 为 2 ∣ W ∣ 。 \frac{1}{|W|} ,那么总距离为 \frac{2}{|W|} 。 W1W2

误差函数

误差函数是分类误差和边际误差的总和,通过梯度下降法,最小化误差函数,

在这里插入图片描述

C参数

当数据不是100%线性可分时,有必要引入参数C;

常数C控制“最大化间隔”和“保证大部分点的函数间隔小于1.0的”的权重,根据不同的应用场景,有时需要更高的准确性,有时需要更好的泛化能力,这种灵活性,通过C参数来提供。
在这里插入图片描述

如果C较大,更关注数据的正确分类,而不是寻找更合适的间隔;

如果C较小,那大部分误差就是边际误差,此时更注重合适的间隔,而不是数据准确性;

注意: 当 C 值对一组特定数据太大时,你可能根本无法收敛,因为总会有些分类错误的点不能被成功分离。

我们看到了支持向量机的三种不同实现方法:

最大间隔分类器

线性不可分类型的分类

核方法

核方法

最后,我们学习核方法,它使支持向量机真正强大。支持向量机中的核方法,使我们能在线性不可分情况下分离数据。

具体来说,你看到了两种类型的核:

多项式

径向基函数 (rbf)

多项式核

在这里插入图片描述

径向基函数 (rbf)

当前最流行的核是 rbf(径向基函数)。rbf 核使你有可能对在任何空间都难以分离的点进行分类。

一维

[

二维

也就是说对于原有数据集,添加一个维度,就可以分离任何空间;

这是一种观察点间紧密程度的基于密度的方法。 这里引入另一个超参数 gamma。

当 gamma 取较大值时,其结果类似于C有较大值,即你的算法将尝试正确分类所有的点。于此相对,

当 gamma 较小时, 你的算法将尝试以更泛化方式进行分类,这样会增加分类错误,但会提高泛化能力

在这里插入图片描述

sklearn中的支持向量机

# Import statements 
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
import pandas as pd
import numpy as np
# Read the data.
data = np.asarray(pd.read_csv('data.csv', header=None))
# Assign the features to the variable X, and the labels to the variable y. 
X = data[:,0:2]
y = data[:,2]
#加载模型
# TODO: Create the model and assign it to the variable model.
# Find the right parameters for this model to achieve 100% accuracy on the dataset.
model = SVC(kernel='rbf', gamma=30)

# TODO: Fit the model.
model.fit(X,y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
    decision_function_shape='ovr', degree=3, gamma=30, kernel='rbf',
    max_iter=-1, probability=False, random_state=None, shrinking=True,
    tol=0.001, verbose=False)
# TODO: Make predictions. Store them in the variable y_pred.
y_pred = model.predict(X)

# TODO: Calculate the accuracy and assign it to the variable acc.
acc = accuracy_score(y, y_pred)
print(acc)
1.0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值