一、SVM简介
1.总体框架
2.相关概念
线性可分:在二维空间上,两类点被一条直线完全分开叫做线性可分。
超平面:从二维空间扩展到多维空间时,将两两类样本完全正确的划分开来的线(上述线性可分的直线)就变成了超平面(wx+b=0)。以最大间隔把两类样本分开的超平面称之为最大间隔超平面(这样做是为了使该超平面更具鲁棒性(稳定))。
- 两类样本分别被分割在超平面的两侧
- 两侧距离超平面最近的样本点到超平面的距离被最大化了。
支持向量:是一些离散的点,通常为样本中距离超平面最近的一些点。
3.背景
支持向量机(Support Vector Machine,SVM)是一个非常优雅的算法,具有非常完善的数学理论,常用于数据分类,也可以用于数据的回归预测中,由于其其优美的理论保证和利用核函数对于线性不可分问题的处理技巧,在上世纪90年代左右,SVM曾红极一时。
二、实战
1.步骤
- 库函数导入
- 构建数据集并进行模型训练
- 模型参数查看
- 模型预测
- 模型可视化
2.源码(部分)
## 基础函数库
import numpy as np
## 导入画图库
import matplotlib.pyplot as plt
import seaborn as sns
## 导入逻辑回归模型函数
from sklearn import svm
##Demo演示LogisticRegression分类
## 构造数据集
x_fearures = np.array([[-1, -2], [-2, -1], [-3, -2], [1, 3], [2, 1], [3, 2]])
y_label = np.array([0, 0, 0, 1, 1, 1])
## 调用SVC模型 (支持向量机分类)
svc = svm.SVC(kernel='linear')
## 用SVM模型拟合构造的数据集
svc = svc.fit(x_fearures, y_label)
## 查看其对应模型的w
print('the weight of Logistic Regression:',svc.coef_)
## 查看其对应模型的w0
print('the intercept(w0) of Logistic Regression:',svc.intercept_)
## 模型预测
y_train_pred = svc.predict(x_fearures)
print('The predction result:',y_train_pred)
# 最佳函数
x_range = np.linspace(-3, 3)
w = svc.coef_[0]
a = -w[0] / w[1]
y_3 = a*x_range - (svc.intercept_[0]) / w[1]
# 可视化决策边界
plt.figure()
plt.scatter(x_fearures[:,0],x_fearures[:,1], c=y_label, s=50, cmap='viridis')
plt.plot(x_range, y_3, '-c')
plt.show()
3.运行结果
参考资料:支持向量机SVM详细介绍
学习链接:天池