根据Andrew Ng在斯坦福的《机器学习》视频做笔记,已经通过李航《统计学习方法》获得的知识不赘述,仅列出提纲。
1 支持向量机(Support Vector Machine)
从逻辑回归一点一点修改来得到本质上的支持向量机
优化目标
\[
min_{\theta}C\sum_{i=1}^m[y^{(i)}cost_1(\theta^Tx^{(i)})+(1-y^{(i)}cost_0(\theta^Tx^{(i)}))]+\frac{1}{2}\sum_{i=1}^n\theta_j^2
\]
由此可以得到具体的\(\theta\)
假设函数
\[
h_\theta(x)=\left\{
\begin{aligned}
1 && if \ \theta^Tx \ge 0 \\
0 && otherwise \\
\end{aligned}
\right.
\]
大间距
更准确地,如果\(y=1\),我们希望\(\theta^Tx \ge 1\);反之,如果\(y=0\),我们希望\(\theta^Tx \le -1\)。
最小化问题转变为
\[
min\frac{1}{2}\sum_{j=1}^n\theta_j^2 \ s.t\left\{
\begin{aligned}
\theta^Tx \ge 1 && if \ y^{(i)}=1 \\
\theta^Tx \le -1 && if \ y^{(i)}=0 \\
\end{aligned}
\right.
\]
根据向量内积,问题变为
\[
min\frac{1}{2}\sum_{j=1}^n\theta_j^2=\frac{1}{2}||\theta||^2 \ s.t\left\{
\begin{aligned}
p^{(i)}||\theta|| \ge 1 && if \ y^{(i)}=1 \\
p^{(i)}||\theta|| \le -1 && if \ y^{(i)}=0 \\
\end{aligned}
\right.
\]
其中\(p^{(i)}\)是\(x^{(i)}\)在\(\theta\)上的投影。
\(\theta\)和决策边界是正交的。(\(\theta^Tx=0,x\)是决策边界上的点)
核函数(相似度函数)\(k(x,l^{(i)})\)
高斯核函数\(exp(-\frac{||x-l^{(i)}||^2}{2\delta^2})\)
在预测时,我们采用的特征不是训练样本本身的特征,而是通过标记点和核函数计算出的新特征\(f1,f2,f3\)。
选取标记点
直接将训练样本作为标记点,\(l^{(1)},\cdots,l^{(m)}\)
\[
\left\{
\begin{aligned}
y^{(i)}=1 && if \ \theta^Tf \ge 0 \\
y^{(i)}=0 && otherwise\\
\end{aligned}
\right.
\]
优化目标
\[
min_{\theta}C\sum_{i=1}^m[y^{(i)}cost_1(\theta^Tf^{(i)})+(1-y^{(i)}cost_0(\theta^Tf^{(i)}))]+\frac{1}{2}\sum_{i=1}^m\theta_j^2
\]
由此可以得到具体的\(\theta\)
参数
\(C\):大,则高方差;低,则高偏差
\(\delta^2\):大,则\(f_i\)平滑,高偏差;低,则\(f_i\)不平滑,高方差
使用SVM
使用软件包:liblinear,libsvm,……
确定参数C:
确定核函数:
线性核函数No kernel(linear kernel):比如n很大,但是m很小,此时不使用内核参数
高斯核函数Gaussian kernel:确定\(\delta^2\);比如n很小,但是m很大(使用前记得特征缩放)
多项式核函数(Polynomial Kernel):\((x^Tl+constant)^{degree}\)
字符串核函数(String kernel)
卡方核函数( chi-square kernel)
直方图交集核函数(histogram intersection kernel)
默塞尔算法
多类
- SVM包
- one vs. all
逻辑回归 vs. SVMs
- n>m,使用逻辑回归,或者线性核函数的SVM(训练集数据量不够支持我们训练一个复杂的非线性模型)
- n小,m中等大小,使用高斯核函数的SVM
- n小,m大,首先增加特征数量,然后使用逻辑回归,或者线性核函数的SVM(训练集数据量不太大,SVM速度会很慢)