SVM(支持向量机)算法及python代码实现

SVM(support vector machines):

        支持向量机是一种二分类模型,将实例的特征向量映射为空间的一些点。

算法目的

        画线“最好地”区分这两类点

SVM(支持向量机)算法及python代码实现_第1张图片

                         其中红线最好的区分了这两类,而蓝色其次,绿色无法区分这两类。

画线的原则

        SVM 将会寻找可以区分两个类别并且能使间隔(margin)最大的划分超平面。比较好的划分超平面,样本局部扰动时对它的影响最小、产生的分类结果最鲁棒、对未见示例的泛化能力最强。

SVM(支持向量机)算法及python代码实现_第2张图片

 间隔(margin):

        对于任意一个超平面,其两侧数据点都距离它有一个最小距离,这两个最小距离的和就是间隔。对于上图来说,第一种超平面的划分方式导致其间隔较小,而第二种明显增大。

支持向量:

        虚线上的点(它到超平面的距离相同)

超平面表达及求解:

SVM(支持向量机)算法及python代码实现_第3张图片

 超平面: w^{T}X+b=0

  • w={w1​;w2​;...;wd​} 是一个法向量,决定了超平面的方向, d 是特征值的个数

        针对上图来说,此时特征值为x1,x2两个 即w = {w1;w2}

  • X为训练样本
  • b为位移项,决定了超平面与原点之间的距离

我们使用python的sklearn库来学习SVM的应用问题

# sklearn 库中导入 svm 模块
from sklearn import svm

# 定义三个点和标签
X = [[2, 0], [1, 1], [2,3]]
#分类 0为第一类 1为第二类
y = [0, 0, 1]
# 定义分类器,clf 意为 classifier,是分类器的传统命名
clf = svm.SVC(kernel = 'linear')  # .SVC()就是 SVM 的方程,参数 kernel 为线性核函数
# 训练分类器
clf.fit(X, y)  # 调用分类器的 fit 函数建立模型(即计算出划分超平面,且所有相关属性都保存在了分类器 cls 里)
# 打印分类器 clf 的一系列参数
print(clf)
# 支持向量
print(clf.support_vectors_)
# 属于支持向量的点的 index
print(clf.support_)
# 在每一个类中有多少个点属于支持向量
print(clf.n_support_)
# 预测一个新的点
print(clf.predict([[2,0]]))

结果说明:

SVC(kernel='linear')
#支持向量
[[1. 1.]
 [2. 3.]]
#属于支持向量的点的索引
[1 2]
#每一类中有多少个点属于支持向量
[1 1]
#对新的点进行预测 结果显示属于0类
[0]

参考:

机器学习算法(一)SVM_不吃饭就会放大招的博客-CSDN博客_机器学习svm

               未完待续

你可能感兴趣的:(python,算法)