机器学习-支持向量机

一、关于SVM

支持向量机是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM还包括核技巧,这使它成为实质上的非线性分类器。SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。

SVM(支持向量机)的基本思想是在特征空间中找到一个超平面,可以将不同类别的样本分开,并且使得该超平面与最近的样本之间的间隔最大化,包括以下几点:
1. 最大间隔分类:SVM试图找到一个超平面,使得它与每个类别的样本之间的间隔都尽可能大。这样的超平面可以更好地分辨不同类别的样本,并且具有更好的泛化能力
2. 支持向量:SVM中,与超平面最近的样本点被称为支持向量。这些支持向量决定了超平面的位置和方向,并且在SVM的训练过程中起着重要的作用
3. 核技巧:当数据不是线性可分时,SVM使用核函数将数据映射到一个高维的特征空间中,使得数据在新的空间中更容易分离。这种技术被称为"核技巧",它使得SVM可以处理非线性可分的数据
4. 正则化:SVM使用正则化来避免过拟合,通过对目标函数引入正则化项,可以使得模型更加健壮和稳定

二、核函数

SVM核函数的作用在于将原始的数据映射到高维的特征空间中,从而使得数据变得更容易分离。核函数允许SVM在低维空间中进行计算,而将数据映射到高维空间中进行更好的分离。这种技术被称作"核技巧",它使得SVM可以处理非线性可分的数据,例如分隔曲线不是线性的数据。一些常见的核函数包括线性核函数、多项式核函数、高斯径向基核函数等,它们可以根据不同的数据特点来选择,以提高SVM在处理各种类型的数据时的性能。通过使用核函数,SVM可以更灵活地处理各种非线性数据,并且具有很强的泛化能力。

三、软间隔化

如果遇到了不能够完全线性可分的样本,我们可以使用软间隔化,允许个别样本点出现在间隔带里面。

同时还需要使得不满足约束的样本数尽可能地少

四、SVM的实现

以下是实现SVM的示例代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm

# 生成一些线性可分的示例数据
np.random.seed(0)
X = np.r_[np.random.randn(20, 2) - [2, 2], np.random.randn(20, 2) + [2, 2]]
Y = [0] * 20 + [1] * 20

# 训练SVM模型
clf = svm.SVC(kernel='linear')
clf.fit(X, Y)

# 获取支持向量
support_vectors = clf.support_vectors_

# 绘制示例数据和决策边界
plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired, edgecolors='k')
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()

# 生成网格数据
xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 50), np.linspace(ylim[0], ylim[1], 50))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])

# 绘制决策边界,边界和支持向量
Z = Z.reshape(xx.shape)
plt.contour(xx, yy, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])
plt.scatter(support_vectors[:, 0], support_vectors[:, 1], s=100, facecolors='none', edgecolors='k')
plt.show()

效果如图所示:

五、总结

SVM(支持向量机)适用于以下问题:
1. 二分类问题:SVM最初是设计用于二分类问题的,尤其在训练样本数量相对较少的情况下效果显著。

2. 具有复杂特征空间的数据:SVM能够处理高维甚至无限维的特征空间,适合处理复杂的实际数据。

3. 非线性数据:通过使用核函数,SVM可以处理非线性可分的数据,因此适用于多种类型的数据。

SVM的优点:

1. 在高维空间有效:SVM能够有效地处理高维空间,因此适用于解决相当复杂的问题。

2. 仅使用支持向量进行决策:SVM的决策函数仅依赖于支持向量,因此对数据规模较为小的情况下,具有较低的内存消耗。

3. 通过核函数处理非线性问题:SVM使用核函数处理非线性问题时非常有效。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值