1. 支持向量机的原理

提示:这里可以添加技术概要

原理:

Support Vector Machine,支持向量机,其含义是通过支持向量运算的分类器。其中“机”的意思是机器,可以理解为分类器。 那么什么是支持向量呢?在求解的过程中,会发现只根据部分数据就可以确定分类器,这些数据称为支持向量。 见下图,在一个二维环境中,其中点R,S,G点和其它靠近中间黑线的点可以看作为支持向量,它们可以决定分类器,也就是黑线的具体参数。
在这里插入图片描述

线性分类:

在训练数据中,每个数据都有n个的属性和一个二类类别标志,我们可以认为这些数据在一个n维空间里。我们的目标是找到一个n-1维的超平面(hyperplane),这个超平面可以将数据分成两部分,每部分数据都属于同一个类别。 其实这样的超平面有很多,我们要找到一个最佳的。因此,增加一个约束条件:这个超平面到每边最近数据点的距离是最大的。也成为最大间隔超平面(maximum-margin hyperplane)。这个分类器也成为最大间隔分类器(maximum-margin classifier)。 支持向量机是一个二类分类器。

非线性分类:

SVM的一个优势是支持非线性分类。它结合使用拉格朗日乘子法和KKT条件,以及核函数可以产生非线性分类器。

2. 程序示例

提示:这里可以添加技术整体架构

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

style.use("ggplot")

if __name__ == '__main__':
    print('SVM with linear kernel')
    from sklearn.datasets import make_blobs
    X__, Y_ = make_blobs(n_samples=40, n_features=2, centers=2)  # 随机生成有2个中心的数据集
    plt.scatter(X__[:, 0], X__[:, 1], c=Y_)
    svc = svm.SVC(kernel='linear', C=1.0)
    svc.fit(X__, Y_)
    w = svc.coef_[0]  # n维向量的系数, x1, x2, ... xn 这里指x和y
    k = -w[0] / w[1]  # 是斜率

    # 绘制超平面
    x = np.linspace(X__[:, 0].min(), X__[:, 0].max(), 20)
    y = k * x - svc.intercept_[0] / w[1]  # 根据线性方程求解b, w[0] * x + w[1] * y + b = 0
    plt.plot(x, y, 'k-', label="Linear SVC")

    # 画出约束边界
    vec_k = svc.support_vectors_[:, 1] - k*svc.support_vectors_[:, 0]
    for vk in vec_k:
        vec_y = k*x + vk
        plt.plot(x, vec_y, color='blue', ls='--')

    # 获取支持向量
    print("vectors: ", svc.support_vectors_)
    plt.scatter(svc.support_vectors_[:, 0], svc.support_vectors_[:, 1], color='r', alpha=0.3, s=200)
    plt.legend()
    plt.show()

其中的主要公式:w1 * x1 + w2 * x2 + b = 0 # x2 作为y轴,x1作为x轴
变换得: x2 = -(w1 * x1 + b) / w2

3. 技术名词解释

提示:这里可以添加技术名词解释

  • svc.coef_为向量机模型系数,
  • w为待求的超平面斜率
  • svc.support_vectors_为支持向量
  • make_blobs为聚类数据生成器
    参数含义:
    n_samples是待生成的样本的总数。
    n_features是每个样本的特征数。
    centers表示类别数。
    cluster_std表示每个类别的方差,例如我们希望生成2类数据,其中一类比另一类具有更大的方差,可以将cluster_std设置为[1.0,3.0]

小结

提示:这里可以添加总结
在这里插入图片描述

引用:

【1】《机器学习 —— 支持向量机SVM(Support Vector Machine)》
【2】《支持向量机之计算最大间隔超平面》

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐