机器学习笔记——支持向量机

支持向量机

  • 参数模型
  • 对分布需要假设(这也是与非参数模型的区别之一)
  • 间隔最大化,形式转化为凸二次规划问题

最大化间隔

间隔最大化是意思:对训练集有着充分大的确信度来分类训练数据,最难以分的点也有足够大的信度将其分开
间隔最大化的分离超平面的的求解怎么求呢?
最终的方法如下
1.线性可分的支持向量机的优化目标
其实就是找得到分离的的超平面
在这里插入图片描述
求得参数w和b的值就可以了
注意,最大间隔分离超平面是唯一的间隔叫硬间隔
1.1支持向量
对于一个样本,要么对应的参数a为0,要么与超平面的间隔为γ,将这些与超平面距离最小的向量x称为支持向量
也就是训练点到分离超平面距离最近的样本点就是支持向量

2. 线性支持向量机的目标函数
线性可分的问题对不可分不适用,因此需要将硬间隔改为软间隔机器学习笔记——支持向量机_第1张图片 这里的a是待求解的参数,梯度参数量是和规模m相关,数据的规模增大时,参数量也增多。 机器学习笔记——支持向量机_第2张图片
线性支持向量机包括了线性可分支持向量机

序列最小优化算法(SMO)

我们只需要用支持向量来进行分类,这样子减少了复杂度和时间消耗,但是优势不明显,因为参数a的求解需要的时间也很大,所以用到了序列最小优化算法来解决这个问题。
思想:同时优化所有的参数比较困难,因此选择部分参数来优化,选择两个固定其他的,然后再选两个固定其他的一直循环,直到更新参数的变化小于某个值就可以终止,或者固定迭代次数。

线性可分的代码实例

采用的linear.csv数据

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from tqdm import tqdm, trange

data = np.loadtxt('./data/linear.csv', delimiter=',')
print('数据集大小:', len(data))
x = data[:, :2]
y = data[:, 2]

# 数据集可视化
plt.figure()
plt.scatter(x[y == -1, 0], x[y == -1, 1], color='red', label='y=-1')
plt.scatter(x[y == 1, 0], x[y == 1, 1], color='blue', marker='x', label='y=1')
plt.xlabel(r'$x_1$')
plt.ylabel(r'$x_2$')
plt.legend()
plt.show()
#%%
def SMO(x, y, ker, C, max_iter):
    '''
    SMO算法
    x,y:样本的值和类别
    ker:核函数,与线性回归中核函数的含义相同
    C:惩罚系数
    max_iter:最大迭代次数
    '''
    # 初始化参数
    m = x.shape[0]
    alpha = np.

你可能感兴趣的:(机器学习,笔记,支持向量机)