机器学习算法入门梳理——支持向量机的分类预测详解

基于支持向量机的分类预测

机器学习算法详解,day3 打卡!

1. 相关的概念

线性可分:在二维空间上,两类点被一条直线完全分开叫做线性可分。
超平面:从二维空间扩展到多维空间时,将两两类样本完全正确的划分开来的线(上述线性可分的直线)就变成了超平面(wx+b=0)。以最大间隔把两类样本分开的超平面称之为最大间隔超平面(这样做是为了使该超平面更具鲁棒性(稳定))。

  1. 两类样本分别被分割在超平面的两侧
  2. 两侧距离超平面最近的样本点到超平面的距离被最大化了。

支持向量:是一些离散的点,通常为样本中距离超平面最近的一些点。

2. 背景

支持向量机(Support Vector Machine,SVM)是一个非常优雅的算法,具有非常完善的数学理论,常用于数据分类,也可以用于数据的回归预测中,由于其其优美的理论保证和利用核函数对于线性不可分问题的处理技巧,在上世纪90年代左右,SVM曾红极一时。

3. 源码实现

3.1. 步骤

  1. 库函数导入
  2. 构建数据集并进行模型训练
  3. 模型参数查看
  4. 模型预测
  5. 模型可视化

3.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()

机器学习算法入门梳理——支持向量机的分类预测详解_第1张图片

4. 优缺点

优点

  1. 有严格的数学理论支持,可解释性强,不依靠统计方法,从而简化了通常的分类和回归问题;
  2. 能找出对任务至关重要的关键样本(即:支持向量);
  3. 采用核技巧之后,可以处理非线性分类/回归任务;
  4. 最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。

缺点

  1. 训练时间长。当采用 SMO 算法时,由于每次都需要挑选一对参数,因此时间复杂度为 [公式] ,其中 N 为训练样本的数量;
  2. 当采用核技巧时,如果需要存储核矩阵,则空间复杂度为 [公式] ;
  3. 模型预测时,预测时间与支持向量的个数成正比。当支持向量的数量较大时,预测计算复杂度较高。

因此支持向量机目前只适合小批量样本的任务,无法适应百万甚至上亿样本的任务。

参考资料
1、知乎:【机器学习】支持向量机 SVM(非常详细)

你可能感兴趣的:(机器学习算法入门,机器学习,支持向量机,python,人工智能)