机器学习 —— 支持向量机 SVM(Linear SVC)
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】《支持向量机之计算最大间隔超平面》
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)