支持向量机(support vector machines, SVM)是一种二分类模型,
感知机 (perceptron):感知机是神经网络(深度学习)的起源算法,感知机是二分类的线性模型,其输入是实例的特征向量,输出的是事例的类别,分别是+和-,属于判别模型。假设训练数据集是线性可分的,感知机学习的目标是求得一个能够将训练数据集正实例点和负实例点完全正确分开的分离超平面。如果是非线性可分的数据,则最后无法获得超平面,什么是线性可分,二维就是直线可分,三维就是面可分,四维就是。。。超平面,就是这样。
假设超平面为 ,那么样本点p到超平面(一般比当下空间仅仅少一维)的距离如下:
分子是普通的带入,分母是什么东西?就是
感知机就是训练这些,直到分出一部分都是负的,另外部分都是正的,整体就可以了(刚好为0说明在直线上。)
损失函数的优化目标,就是期望使误分类的所有样本,到超平面的距离之和最小。也就是所有误分类点的距离的绝对值之和,公式就不写了。
因为感知机学习算法最终的终止条件是所有的输入都被正确分类,即不存在误分类的点。则此时损失函数为0(也就是误差里没有点可用了,空了). 因此忽略也不会对感知机学习算法的执行过程产生任何影响。反而还能简化运算,提高算法执行效率。
因为只有误分类的M集合里面的样本才能参与损失函数的优化,因此取误差点距离和最小时的,也就是
就是求的,容忍它的这种难受的写法。
但究竟实际怎么做呢?就是拿出一个点来,判断是不是误分类点,如果是,执行如下公式更新:
什么意思呢?为学习率,为正负1,并不是很明白,数学上的问题,基本上这样算就会越来越靠近中间了。
还有一个对偶算法,感觉运算是非常的简单
在向量维数(特征数)过高时,计算内积非常耗时,应选择对偶形式算法加速。
在向量个数(样本数)过多时,每次计算累计和就没有必要,应选择原始算法。
如果线性不可分,它会在一定区间内打转,不保证很高的精确度。可以采取软间隔算法,这是进一步的优化。
支持向量机SVM就是感知机。更确切一点的说,感知机追求完全的划分,而向量机追求最明显的划分(大间隔)(即便有些划分错了)
还有核函数,非线性SVM(从更高维来识别这个维度的非线性)。