乐趣区

关于tensorflow:支持向量机

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

SVM 根本型式

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

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

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

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

反对向量机的 根本型式 就是找到满足条件的、且具备最大间距的 划分超平面

SVM 的核函数

之前探讨的是原始样本 线性可分 的状况,然而理论状况是,一些工作的原始样本并不一定存在一种能正确分为两类的超平面。

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

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

数学上的示意为:

拟合线性回归

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

应用 Tensorflow 进行编程的次要步骤次要分为四步:

1. 生成训练数据

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

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. 运行总结

随着训练的进行,拟合的值与指标一直靠近:

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

拟合逻辑回归

对于拟合线性回归,咱们须要找到 一条直线 来示意样本的大抵散布;而对于逻辑回归,同样是须要找到一条直线,但目标是将样本点进行 分类

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))
退出移动版