支持向量机

喵先生的进阶之路

支持向量机(SVM)是一种将按监督学习的方式对数据进行二元分类的线性分类器。其决策边界是对学习样本求解的最大超平面。

SVM基本型式

支持向量机的基本思想就是,在样本空间中找到一个线性可分的直线或是超平面(n维欧式空间中其余维度等于1的线性子空间,即必须是n-1维度,是二维空间中直线、三维空间中平面的延伸),将不同类别的样本分开。

在数学上,认为在样本空间中,对不同类别的样本进行分开的直线或是超平面的方程为:

image.png

例如下图,实线将'+''-'进行分类:

image.png

对于样本空间中的任意一点超平面的距离为:

image.png

支持向量机的基本型式就是找到满足条件的、且具有最大间距的划分超平面

SVM的核函数

之前讨论的是原始样本线性可分的情况,但是实际情况是,一些任务的原始样本并不一定存在一种能正确分为两类的超平面。

然而对于这种非线性的情况,SVM考虑使用将原始样本映射到更高维的空间,然后在高维空间中构造出最优超平面,从而解决原始线性空间不可分的问题。

如下图,左边在二维平面上并不能进行线性分类,但是将映射到右边的三维空间上,求解出一个分离超平面:

image.png

数学上的表示为:
image.png

拟合线性回归

使用svm方式,就是拟合的直线使得其SVM的最大间距能够尽可能多的包含已知点,且我们认为被包含的已知点的损失为0。

使用Tensorflow进行编程的主要步骤主要分为四步:

1.生成训练数据

对于训练数据,通过模拟生成:

image.png

2.定义训练模型

SVM模型中,我们选择间距最小的损失函数:

curry_y = x * a + b
epsilon = tf.constant([0.25])   # 创建常量,表示间距为0.25
loss = tf.reduce_sum(tf.maximum(0, tf.subtract(tf.abs(tf.subtract(curr_y, y)), epsilon)))

其中,reduce_sum()为求和函数;
maximum(x, y, name=None)为计算元素x,y中的最大值;
subtract(x, y, name=None)计算x-y;
abs(x)计算x的绝对值。

3.数据训练

4.运行总结

随着训练的进行,拟合的值与目标不断接近:

image.png

将拟定的间距宽度值调小,再次进行训练。可以看到,将间距调小后,拟合直线的误差更小。

image.png

image.png

拟合逻辑回归

对于拟合线性回归,我们需要找到一条直线来表示样本的大致分布;而对于逻辑回归,同样是需要找到一条直线,但目的是将样本点进行分类

SVM算法的提出,主要是为了解决‘是’‘否’这样的二值分类的问题。

进行拟合逻辑回归主要需要以下几步:

1.准备样本数据
2.定义训练模型
3.训练样本数据
4.选择优化器

在SVM模型中,选取的损失函数为:

classification_term = tf.reduce_mean(tf.maximum(0., tf.subtract(1., tf.multiply(y, y_))))
cross_entropy = tf.add(classification_term, tf.multiply(alpha, 12_norm))
阅读 529

朴世超
个人学习总结与项目实战问题记录
336 声望
19 粉丝
0 条评论
你知道吗?

336 声望
19 粉丝
宣传栏