机器学习最具有理论计算的部分,有点难
the Support Vector Machine (SVM)
监督学习算法
也称大间距分类器,因其设置了一个安全区域
在某些情况下比逻辑回归更适合构造非线性复杂分类器

优化目标: 最小化假设函数,一样是找到最优的θ

决策边界以最大的间距与训练集分开

C过大 对异常点敏感 会导致训练集与边界线之间的间距变小。

向量内积的性质
其中 P 是 投影,有符号的实数
|| u|| 向量u的欧几里长度 就是 我们所说的“向量长度”

运用于代价函数的计算
θ的方向与决策边界90°正交
θ_0代表决策边界与Y轴的截距

为什么支持向量机会找到最大间距呢?
如图它会使得P最大,从而min||θ||,P就是训练集在θ上面的投影,
在这样的过程中便找到了最大间距~

核函数
利用核函数K根据特征 X 和标记点 l 定义新的特征量 f
本质上 f是X与l的相似度

高斯核函数

核函数与标记点共同定义复杂非线性决策边界
越大 特征量x从标记点l离开时变化速度越大

同样不需要正则化θ_0
θT M θ 更多的是为了计算效率,稍微改变了正则化的结果

参数的选择
C过大 相当于逻辑回归中 λ过小,不正则化 ,易出现过拟合;反之易出现欠拟合。
σ^2 过大 f变化过于平滑,易出现欠拟合;反之f变化剧烈易出现过拟合。

实现步骤
n表示特征量的数量,m表示训练集的数量
可以在n X多 ,m少的情况 不要核函数,得到一条线性决策边界
可以在m X多 ,n少的情况 选择高斯核函数,得到一条复杂非线性决策边界

在进行高斯核函数前不用特征归一化


多类别分类
类似于 逻辑回归中的“一对多” ,选择概率最大的 z

tips:
逻辑回归与不带核函数的支持向量机十分类似,效果略有不同。
神经网络适合大部分问题,但速度可能被限制

编程作业
gaussianKernel.m
1 | function sim = gaussianKernel(x1, x2, sigma) |
dataset3Params.m
1 | function [C, sigma] = dataset3Params(X, y, Xval, yval) |
processEmail.m
1 | function word_indices = processEmail(email_contents) |
emailFeatures.m
1 | function x = emailFeatures(word_indices) |