Logistic regression vs. SVM
1. 适应场景
- n = 特征数量 m = 训练集的数量
- if n > m 使用逻辑回归或线性核函数
- if n 小,同时 m 适中 使用高斯核函数
- if n 小,但 m 非常大 使用逻辑回归或线性核函数
- 神经网络算法可以很好的适应上述所有情况,但训练速度很慢。
原因:如果 n 过大,使用高斯核函数,运算量会很大,运行速度会很慢。
如果 n > m ,没有足够的数据来拟合复杂的非线性函数。
2. 代价函数对比
在SVM中,if y =1,θ^T*x 不仅仅大于等于 0(上述图片取 1 ) ,相当于构建一个安全距离
- 在SVM中,代价函数去掉了(1/m)
- 在SVM中,用参数 C 替换了参数 λ(形式相当于 1/λ),参数的作用主要是控制我们更关心针对哪一项的优化。
Large C:低偏差,高方差
Small C:高偏差,低方差
3. 假设函数对比
if θ^T*x >= 0 ,h(x) = 1
oherwise,h(x) = 0
与逻辑回归相比,不会输出概率
Large Margin(大间距)
1. 直观认识
在分离数据时,尽量用大的间距去分离
如果参数C非常大,会使得训练模型对异常点特别敏感,如上图,会因为左下角一个异样点导致分割线大不相同。
2. 数学解释
u^T * v = p * ||u|| (p为向量v在向量u上的投影)
即 θ^T * x = p * ||θ||
当间距很小时,x在θ上的投影 p 会相对较小,要是 p * ||θ|| >=1,此时θ就会变大,最终导致代价函数的第二项变大。
Kernels(核函数)
1. 选区标记点(landmarks)
在实际的模型训练中,将样本点当作标记点
2. 新的特征f(高斯核函数)
参数 δ^2 :控制 f 下降到0的速度;越大下降速度越慢
Large δ^2:高偏差,低方差
Small δ^2:低偏差,高方差
3. 代价函数
Σ(1,m):特征 f 是 m + 1 维向量(其中f(0)=1,m是训练集数量)
4. SVM
- 选择参数C
- 选择核函数(常用:线性核函数 / 高斯核函数)
如有有大小不一样的特征变量,在使用高斯函数之前,需将这些特征标量的大小按比例归一化(如:房子大小(1000);卧室数量(5))
5. Multi-class classification
- 已有许多SVM包建立了多元分类函数
- 使用 one-vs.-all方法,为每一类分别训练一个模型函数,最后选择最大的 θ^T*x作为最终分类