梯度下降算法用于如上图的函数:在图上取一个点,向四周寻找最快的下山方向,并迈出一步,重复执行上述步骤,就可以找到代价函数的最小值(上图仅用于解释梯度下降算法,线性回归的代价函数永远是一个凸函数,只会存在一个全局最优解,不会像上图一样出现局部最优解和全局最优解)
在这里:=
是赋值符号,=
是两边等价的意思
如上图,θ0和θ1需要同步更新来实现梯度下降,α是学习率,α越大,相当于下山的步子越大,下山就越快
如上图,θ1从右侧较大时开始逐渐向左侧递减,α是常数不改变,代价函数的导数项(这个导数项其实是偏导数)会随着代价函数逐渐降低而变小(因为斜率变小了),在到达最小值时,导数会变为0
上图左侧纵坐标为计算得出的代价函数的值,横坐标为进行梯度下降算法的次数,次数增加后,代价函数会越来越接近最小值,逐渐收敛
取学习率时,通常是每隔大约三倍取,如 0.001 , 0.003 , 0.01 , 0.03.0.1 , 0.3 , 1 0.001,0.003,0.01,0.03.0.1,0.3,1 0.001,0.003,0.01,0.03.0.1,0.3,1
(最小二乘法)
θ = ( X T X ) − 1 X T y θ=(X^TX)^{-1}X^Ty θ=(XTX)−1XTy
之前的线性表示的代价函数为:
J ( θ ) = 1 m ∑ i = 1 m 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 J(θ)=\frac{1}{m}\sum_{i=1}^m\frac{1}{2}(h_θ(x^{(i)})-y^{(i)})^2 J(θ)=m1i=1∑m21(hθ(x(i))−y(i))2
将 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 \frac{1}{2}(h_θ(x^{(i)})-y^{(i)})^2 21(hθ(x(i))−y(i))2表示为 C o s t ( h θ ( x ( i ) ) , y ( i ) ) Cost(h_θ(x^{(i)}),y^{(i)}) Cost(hθ(x(i)),y(i))
去掉 ( i ) (i) (i)之后简写为
J ( θ ) = 1 2 m ∑ i = 1 m C o s t ( h θ ( x ) , y ) J(θ)=\frac{1}{2m}\sum_{i=1}^mCost(h_θ(x),y) J(θ)=2m1i=1∑mCost(hθ(x),y)
由于 y = 0 y=0 y=0 or 1 1 1恒成立( y = 0 y=0 y=0 or 1 1 1 always),所以可以将 C o s t ( h θ ( x ) , y ) Cost(h_θ(x),y) Cost(hθ(x),y)简化为一个式子
C o s t ( h θ ( x ) , y ) = − y l o g ( h θ ( x ) ) − ( 1 − y ) l o g ( 1 − h θ ( x ) ) Cost(h_θ(x),y)=-ylog(h_θ(x))-(1-y)log(1-h_θ(x)) Cost(hθ(x),y)=−ylog(hθ(x))−(1−y)log(1−hθ(x))
最后得出的用于逻辑回归的代价函数为:
J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) J(θ)=\frac{1}{m}\sum_{i=1}^mCost(h_θ(x^{(i)}),y^{(i)}) J(θ)=m1i=1∑mCost(hθ(x(i)),y(i))
J ( θ ) = − 1 m [ ∑ i = 1 m y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] J(θ)=-\frac{1}{m}\left[\sum_{i=1}^my^{(i)}log(h_θ(x^{(i)}))+(1-y^{(i)})log(1-h_θ(x^{(i)}))\right] J(θ)=−m1[i=1∑my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
在梯度下降中不断循环(for j=1,2,…,n)的式子为:
θ j : = θ j − α ∂ ∂ θ j J ( θ ) θ_j:=θ_j-α\frac{\partial}{\partial θ_j}J(θ) θj:=θj−α∂θj∂J(θ)
θ j : = θ j − α ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) θ_j:=θ_j-α\sum_{i=1}^m(h_θ(x^{(i)})-y^{(i)})x_j^{(i)} θj:=θj−αi=1∑m(hθ(x(i))−y(i))xj(i)
加上惩罚项后的假定函数变为:
J ( θ ) = 1 2 m [ ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) + 1000 θ 3 2 + 1000 θ 3 2 ] J(θ)=\frac{1}{2m} \left[ \sum_{i=1}^mCost(h_θ(x^{(i)}),y^{(i)})+1000θ_3^2+1000θ_3^2 \right] J(θ)=2m1[i=1∑mCost(hθ(x(i)),y(i))+1000θ32+1000θ32]
由于我们一般不知道哪一项会导致过拟合,所以在代价函数中加入正则化项
加入后的代价函数为:
J ( θ ) = 1 2 m [ ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) + λ ∑ j = 1 n θ j 2 ] J(θ)=\frac{1}{2m} \left[ \sum_{i=1}^mCost(h_θ(x^{(i)}),y^{(i)})+λ\sum_{j=1}^{n}θ_j^2 \right] J(θ)=2m1[i=1∑mCost(hθ(x(i)),y(i))+λj=1∑nθj2]
λ λ λ为正则化参数,一般不对 θ 0 θ_0 θ0增加惩罚项,所以 j j j从 1 1 1开始
正则化后逻辑回归的代价函数改为:
J ( θ ) = − 1 m [ ∑ i = 1 m y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J(θ)=-\frac{1}{m}\left[\sum_{i=1}^my^{(i)}log(h_θ(x^{(i)}))+(1-y^{(i)})log(1-h_θ(x^{(i)}))\right]+\frac{λ}{2m}\sum_{j=1}^{n}θ_j^2 J(θ)=−m1[i=1∑my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2
正则化后的梯度下降循环项如上图
对于一幅图像来说,如果取出每个像素点的灰度值或其他特征表示方法来作为一个数据样本的话,数据集将会非常庞大,如果运用之前的回归算法来计算,将会产生非常大的计算成本
上图为计算 x 1 x_1 x1 XNOR x 2 x_2 x2的神经网络
第一层到第二层先计算 x 1 x_1 x1 AND x 2 x_2 x2得到 a 1 ( 2 ) a_1^{(2)} a1(2),计算(NOT x 1 x_1 x1) AND (NOT x 2 x_2 x2)得到 a 2 ( 2 ) a_2^{(2)} a2(2)
再以 a 1 ( 2 ) a_1^{(2)} a1(2)和 a 2 ( 2 ) a_2^{(2)} a2(2)为 x 1 x_1 x1和 x 2 x_2 x2计算 x 1 x_1 x1 OR x 2 x_2 x2得出的结果即为 x 1 x_1 x1 XNOR x 2 x_2 x2
这里有四种输出:pedestrian、car、motorcycle、truck
所以共有四个输出单元
输出的 y ( i ) y^{(i)} y(i)为一个4维矩阵,可能是:
[ 1 0 0 0 ] 或 [ 0 1 0 0 ] 或 [ 0 0 1 0 ] 或 [ 0 0 0 1 ] 中 的 其 中 一 个 \begin{bmatrix} 1\\ 0\\ 0\\ 0\\ \end{bmatrix}或 \begin{bmatrix} 0\\ 1\\ 0\\ 0\\ \end{bmatrix}或 \begin{bmatrix} 0\\ 0\\ 1\\ 0\\ \end{bmatrix}或 \begin{bmatrix} 0\\ 0\\ 0\\ 1\\ \end{bmatrix}中的其中一个 ⎣⎢⎢⎡1000⎦⎥⎥⎤或⎣⎢⎢⎡0100⎦⎥⎥⎤或⎣⎢⎢⎡0010⎦⎥⎥⎤或⎣⎢⎢⎡0001⎦⎥⎥⎤中的其中一个
分别表示pedestrian或car或motorcycle或truck
应用于神经网络的代价函数为:
J ( Θ ) = − 1 m [ ∑ i = 1 m ∑ k = 1 K y ( i ) l o g ( h Θ ( x ( i ) ) ) k + ( 1 − y k ( i ) ) l o g ( 1 − ( h Θ ( x ( i ) ) ) k ) ] + λ 2 m ∑ l = 1 L − 1 ∑ i = 1 s l ∑ j = 1 s l + 1 ( Θ j i ( l ) ) 2 J(\Theta)=-\frac{1}{m}\left[\sum_{i=1}^m\sum_{k=1}^Ky^{(i)}log(h_\Theta(x^{(i)}))_k+(1-y_k^{(i)})log(1-(h_\Theta(x^{(i)}))_k)\right] +\frac{λ}{2m}\sum_{l=1}^{L-1}\sum_{i=1}^{s_l}\sum_{j=1}^{s_{l+1}}(\Theta_{ji}^{(l)})^2 J(Θ)=−m1[i=1∑mk=1∑Ky(i)log(hΘ(x(i)))k+(1−yk(i))log(1−(hΘ(x(i)))k)]+2mλl=1∑L−1i=1∑slj=1∑sl+1(Θji(l))2
点乘结果是一个数,叉乘结果是一个向量
要估计代价函数 J ( Θ ) J(\Theta) J(Θ)上点 ( θ , J ( Θ ) ) (\theta,J(\Theta)) (θ,J(Θ))处的导数值,可以运用 d d θ J ( θ ) ≈ J ( θ + ε ) − J ( θ − ε ) 2 ε ( ε = 1 0 − 4 为 宜 ) \frac{\mathrm{d} }{\mathrm{d} \theta}J(\theta)\approx\frac{J(\theta+\varepsilon)-J(\theta-\varepsilon)}{2\varepsilon}(\varepsilon=10^{-4}为宜) dθdJ(θ)≈2εJ(θ+ε)−J(θ−ε)(ε=10−4为宜)求得导数
扩展到向量中,如上图
将估计得到的偏导数值与反向传播得到的偏导数值比较,如果两个值非常近,就可以验证计算是正确的
一旦确定反向传播算法计算出的值是正确的,就应该关掉梯度检验算法
如果在程序开始时令 Θ \Theta Θ中所有元素均为0,会导致多个神经元计算相同的特征,导致冗余,这成为对称权重问题
所以在初始化时要令 Θ i j ( l ) \Theta^{(l)}_{ij} Θij(l)等于 [ − ϵ , ϵ ] [-\epsilon,\epsilon] [−ϵ,ϵ]中的一个随机值
训练一个神经网络:
1.随机一个初始权重
2.执行前向传播算法,得到对所有 x ( i ) x^{(i)} x(i)的 h Θ ( x ( i ) ) h_\Theta(x^{(i)}) hΘ(x(i))
3.计算代价函数 J ( Θ ) J(\Theta) J(Θ)
4.执行反向传播算法,计算 ∂ ∂ Θ j k ( l ) J ( Θ ) \frac{\partial}{\partial\Theta_{jk}^{(l)}}J(\Theta) ∂Θjk(l)∂J(Θ)
(get a ( l ) a^{(l)} a(l) and δ ( l ) \delta^{(l)} δ(l) for l = 2 , . . . , L l=2,...,L l=2,...,L)
5.通过梯度检验算法得到估计的 J ( Θ ) J(\Theta) J(Θ)的偏导数值,将估计得到的偏导数值与反向传播得到的偏导数值比较,如果两个值非常近,就可以验证反向传播算法的计算结果是正确的;验证完后,关闭梯段检验算法(disable gradient checking code)
6.运用梯度下降算法或其他更高级的优化方法,结合反向传播计算结果,得到使 J ( Θ ) J(\Theta) J(Θ)最小时的参数 Θ \Theta Θ的值
随机选择数据集中的70%作为训练集,30%作为测试集,将数据集分为两个部分
逻辑分类中有另一种形式的测试度量,称作错误分类或0/1错误分类,计算过程如上图
随机选择数据集中的60%作为训练集(Training Set),20%作为交叉验证集(验证集,Cross Validation Set,cv),20%作为测试集(Test Set),将数据集分为三个部分
上图,计算训练误差、验证误差和测试误差
用 d d d来表示假定函数的多项式的最高次幂
上图坐标系 y y y轴为误差, x x x轴为 d d d(多项式最高次幂)的大小
以上图为例,
如上图是高偏差/欠拟合的情形
此时增加数据集数量对于误差的缩小没有明显帮助
如上图是高方差/过拟合的情形
此时交叉验证集的曲线和训练集的曲线中间相差较大,所以增加数据集数量对于减小误差是有帮助的
偏斜类问题:一个数据集中的一类数据样本比另外一类的样本少的多(比如1占样本的0.5%,而0占样本的99.5%)
在偏斜类问题中(比如患癌症占样本的0.5%,而不患癌症占样本的99.5%),假设一个算法达到了99.5%的预测准确率,这时已经只有0.5%的误差,但是如果始终预测不患癌症也有99.5%的准确率,误差也只有0.5%,这时需要用到不同的误差度量值
其中一种叫做查准率和召回率(precision recall)
本来在超过50%概率时预测为1(即患癌),在低于50%时预测为0(即不患癌)
现在如果要在超过70%患癌可能性时才预测为患癌的话,会得到一个高查准率但低召回率的模型
如果要在超过30%患癌可能性时就预测患癌,会得到一个高召回率但低查准率的模型
通过计算查准率和召回率的平均值不能直接评估一个算法的好坏
通过 F 值 ( F 1 值 ) = 2 P R P + R F值(F_1值)=2\frac{PR}{P+R} F值(F1值)=2P+RPR能更好地评估一个算法的好坏(P为查准率,R为召回率)
在有一个非常庞大的训练集的前提下,即使有很多的参数(训练集数量>>参数数量),也能很好地拟合数据集,不会产生过拟合现象
在逻辑回归中,代价函数为:
J ( θ ) = − 1 m [ ∑ i = 1 m y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J(θ)=-\frac{1}{m}\left[\sum_{i=1}^my^{(i)}log(h_θ(x^{(i)}))+(1-y^{(i)})log(1-h_θ(x^{(i)}))\right]+\frac{λ}{2m}\sum_{j=1}^{n}θ_j^2 J(θ)=−m1[i=1∑my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2
要支持向量机,先将上式里的负号放到求和里面去,然后把 1 m \frac{1}{m} m1去掉( 1 m \frac{1}{m} m1是一个常数,虽然去掉它会改变代价函数的值,但是仍然能求得一样的最小值对应的 θ \theta θ),之后得到的代价函数为:
J ( θ ) = ∑ i = 1 m [ y ( i ) ( − l o g ( h θ ( x ( i ) ) ) ) + ( 1 − y ( i ) ) ( − l o g ( 1 − h θ ( x ( i ) ) ) ) ] + λ 2 ∑ j = 1 n θ j 2 J(θ)=\sum_{i=1}^m\left[y^{(i)}\left (-log(h_θ(x^{(i)}))\right )+(1-y^{(i)})\left(-log(1-h_θ(x^{(i)}))\right)\right]+\frac{λ}{2}\sum_{j=1}^{n}θ_j^2 J(θ)=i=1∑m[y(i)(−log(hθ(x(i))))+(1−y(i))(−log(1−hθ(x(i))))]+2λj=1∑nθj2
把上式中的 ( − l o g ( h θ ( x ( i ) ) ) ) \left (-log(h_θ(x^{(i)}))\right ) (−log(hθ(x(i))))替换为 C o s t 1 ( θ T x ( i ) ) Cost_1(\theta^Tx^{(i)}) Cost1(θTx(i)),把 ( − l o g ( 1 − h θ ( x ( i ) ) ) ) \left(-log(1-h_θ(x^{(i)}))\right) (−log(1−hθ(x(i))))替换为 C o s t 0 ( θ T x ( i ) ) Cost_0(\theta^Tx^{(i)}) Cost0(θTx(i)),得到代价函数:
J ( θ ) = ∑ i = 1 m [ y ( i ) C o s t 1 ( θ T x ( i ) ) + ( 1 − y ( i ) ) C o s t 0 ( θ T x ( i ) ) ] + λ 2 ∑ j = 1 n θ j 2 J(θ)=\sum_{i=1}^m\left[y^{(i)}Cost_1(\theta^Tx^{(i)})+(1-y^{(i)})Cost_0(\theta^Tx^{(i)})\right]+\frac{λ}{2}\sum_{j=1}^{n}θ_j^2 J(θ)=i=1∑m[y(i)Cost1(θTx(i))+(1−y(i))Cost0(θTx(i))]+2λj=1∑nθj2
在支持向量机中,不再使用正则化参数 λ \lambda λ,改为使用参数 C C C,更改后的支持向量机的代价函数为:
J ( θ ) = C ∑ i = 1 m [ y ( i ) C o s t 1 ( θ T x ( i ) ) + ( 1 − y ( i ) ) C o s t 0 ( θ T x ( i ) ) ] + 1 2 ∑ j = 1 n θ j 2 J(θ)=C\sum_{i=1}^m\left[y^{(i)}Cost_1(\theta^Tx^{(i)})+(1-y^{(i)})Cost_0(\theta^Tx^{(i)})\right]+\frac{1}{2}\sum_{j=1}^{n}θ_j^2 J(θ)=Ci=1∑m[y(i)Cost1(θTx(i))+(1−y(i))Cost0(θTx(i))]+21j=1∑nθj2
支持向量机又被称为大间距分类器
更改支持向量机中的判断边界,让 θ T x ( i ) ≥ 1 \theta^Tx^{(i)}\ge1 θTx(i)≥1时才输出1, θ T x ( i ) ≤ − 1 \theta^Tx^{(i)}\le-1 θTx(i)≤−1时才输出0,这样两个结果之间就有一个安全间距
使用一般的逻辑回归算法可能会生成上图中粉色和绿色的直线来分割两类样本,而使用支持向量机会生成图中黑色的直线,图中两条蓝线中间的区域称为间距,支持向量机会尽可能的将两种样本以最大的间距分隔开,可以看出,支持向量机后可以有更好地鲁棒性
如上图,先假设没有左侧的那一个负样本,用一个很大的 C C C可以生成上图中黑色直线,但如果有左侧的那一个负样本,由于 C C C很大,支持向量机为保证两类样本间有最大的间距,会生成上图中粉色的直线,但如果 C C C没有那么大,则即使有左侧的那一个负样本,依然会生成黑色直线
如图的样本,如果假定函数 ≥ 0 \ge0 ≥0,就预测 y = 1 y=1 y=1,其他情况预测 y = 0 y=0 y=0,
在上图中的假定函数中,设 f 1 = x 1 , f 2 = x 2 , f 3 = x 1 x 2 , f 4 = x 1 2 , . . . f_1=x_1,f_2=x_2,f_3=x_1x_2,f_4=x_1^2,... f1=x1,f2=x2,f3=x1x2,f4=x12,...
假定函数变为 h θ ( x ) = θ 0 + θ 1 f 1 + θ 2 f 2 + . . . h_\theta(x)=\theta_0+\theta_1 f_1+\theta_2 f_2+... hθ(x)=θ0+θ1f1+θ2f2+...
以上方法与下文方法无关,与核函数无关
然而,除了对原有的特征进行组合以外,有没有更好的方法来构造1, 2, 3?我们可以利用核函数来计算出新的特征。
在坐标系中取3个样本标记矩阵 l ( 1 ) 、 l ( 2 ) 、 l ( 3 ) l^{(1)}、l^{(2)}、l^{(3)} l(1)、l(2)、l(3)
x x x是一个给定的训练实例,假设有两个特征值,那么 x = [ x 1 , x 2 ] x=[x_1,x_2] x=[x1,x2]
令
f 1 = s i m i l a r i t y ( x , l ( 1 ) ) = e x p ( − ∥ x − l ( 1 ) ∥ 2 2 σ 2 ) f_1=similarity\left(x,l^{(1)}\right)=exp\left(-\frac{\Vert x-l^{(1)} \Vert ^2}{2\sigma^2}\right) f1=similarity(x,l(1))=exp(−2σ2∥x−l(1)∥2)
f 2 = s i m i l a r i t y ( x , l ( 2 ) ) = e x p ( − ∥ x − l ( 2 ) ∥ 2 2 σ 2 ) f_2=similarity\left(x,l^{(2)}\right)=exp\left(-\frac{\Vert x-l^{(2)} \Vert^2 }{2\sigma^2}\right) f2=similarity(x,l(2))=exp(−2σ2∥x−l(2)∥2)
f 3 = . . . . . . f_3=...... f3=......
. . . . . . ...... ......
核函数运算时可化为:
f 1 = s i m i l a r i t y ( x , l ( 1 ) ) = e x p ( − ∥ x − l ( 1 ) ∥ 2 2 σ 2 ) = e x p ( − ∑ j = 1 n ( x j − l j ( 1 ) ) 2 2 σ 2 ) f_1=similarity\left(x,l^{(1)}\right)=exp\left(-\frac{\Vert x-l^{(1)} \Vert ^2}{2\sigma^2}\right)=exp\left(-\frac{\sum_{j=1}^n(x_j-l_j^{(1)} )^2}{2\sigma^2}\right) f1=similarity(x,l(1))=exp(−2σ2∥x−l(1)∥2)=exp(−2σ2∑j=1n(xj−lj(1))2)
如果 x x x非常接近标记 l ( 1 ) l^{(1)} l(1),那么 f 1 ≈ e x p ( − 0 2 2 σ 2 ) ≈ 1 f_1\approx exp(-\frac{0^2}{2\sigma^2})\approx1 f1≈exp(−2σ202)≈1
如果 x x x远离标记 l ( 1 ) l^{(1)} l(1),那么 f 1 ≈ e x p ( − ( l a r g e n u m b e r ) 2 2 σ 2 ) ≈ 0 f_1\approx exp(-\frac{(large\ number)^2}{2\sigma^2})\approx0 f1≈exp(−2σ2(large number)2)≈0
上图,如果 σ 2 \sigma^2 σ2变大,那么 f i f_i fi的下降速度会变慢(斜率降低)
如上图,取一点 x x x,已经通过支持向量机计算得出 θ 0 、 θ 1 、 . . . \theta_0、\theta_1、... θ0、θ1、...的值如上图,然后可以按照核函数计算出 f 0 、 f 1 、 . . . f_0、f_1、... f0、f1、...的值如上图,将 θ \theta θ和 f f f的值代入假定函数得到 0.5 ≥ 0 0.5\ge0 0.5≥0,所以预测 y = 1 y=1 y=1
如上图,再取另外的点 x x x,假设:最后得到靠近 l ( 1 ) 和 l ( 2 ) l^{(1)}和l^{(2)} l(1)和l(2)的点会预测为1,而远离 l ( 1 ) 和 l ( 2 ) l^{(1)}和l^{(2)} l(1)和l(2)的点会预测为0,那么最后可以拟合出一条如图中红色的曲线,曲线内预测为1,曲线外预测为0
如何选择地标?
我们通常是根据训练集的数量选择地标的数量,即如果训练集中有个实例,则我们选
取个地标,并且令:(1) = (1), (2) = (2), . . . . . , () = ()。这样做的好处在于:现在我们
得到的新特征是建立在原有特征与训练集中所有其他特征之间距离的基础之上的,即:
由
f 1 ( i ) = s i m i l a r i t y ( x ( i ) , l ( 1 ) ) f_1^{(i)}=similarity\left(x^{(i)},l^{(1)}\right) f1(i)=similarity(x(i),l(1))
f 2 ( i ) = s i m i l a r i t y ( x ( i ) , l ( 2 ) ) f_2^{(i)}=similarity\left(x^{(i)},l^{(2)}\right) f2(i)=similarity(x(i),l(2))
. . . ... ...
f m ( i ) = s i m i l a r i t y ( x ( i ) , l ( m ) ) f_m^{(i)}=similarity\left(x^{(i)},l^{(m)}\right) fm(i)=similarity(x(i),l(m))
将 f f f写为特征向量形式得到
f ( i ) = [ f 0 ( i ) = 1 f 1 ( i ) f 2 ( i ) . . . f m ( i ) ] f^{(i)}= \begin{bmatrix} f_0^{(i)}=1\\ f_1^{(i)}\\ f_2^{(i)}\\ ...\\ f_m^{(i)} \end{bmatrix} f(i)=⎣⎢⎢⎢⎢⎢⎡f0(i)=1f1(i)f2(i)...fm(i)⎦⎥⎥⎥⎥⎥⎤
f ( i ) f^{(i)} f(i)是一个 m + 1 m+1 m+1维矩阵,因为除了 m m m个样本外,还加入了一个偏置项 f 0 ( i ) = 1 f_0^{(i)}=1 f0(i)=1
矩阵 f ( i ) f^{(i)} f(i)的含义是(第 i i i个样本里的所有特征)与(从1到m的每一个样本里的所有特征)进行核函数运算,一共m个运算结果排列在矩阵里,再加上第0个的 f 0 ( i ) = 1 f_0^{(i)}=1 f0(i)=1
用 f ( i ) f^{(i)} f(i)替换带 x x x项,得到代价函数为:
C ∑ i = 1 m [ y ( i ) C o s t 1 ( θ T f ( i ) ) + ( 1 − y ( i ) ) C o s t 0 ( θ T f ( i ) ) ] + 1 2 ∑ j = 1 n = m θ j 2 C\sum_{i=1}^m\left[y^{(i)}Cost_1(\theta^Tf^{(i)})+(1-y^{(i)})Cost_0(\theta^Tf^{(i)})\right]+\frac{1}{2}\sum_{j=1}^{n=m}θ_j^2 Ci=1∑m[y(i)Cost1(θTf(i))+(1−y(i))Cost0(θTf(i))]+21j=1∑n=mθj2
正则化项在具体实施中,求和部分可写为 ∑ j = 1 n = m θ j 2 = θ T θ \sum_{j=1}^{n=m}θ_j^2=\theta^T\theta ∑j=1n=mθj2=θTθ,并且在计算时用 θ T M θ \theta^TM\theta θTMθ代替 θ T θ \theta^T\theta θTθ,矩阵 M M M是根据我们选择的核函数而不同的一个矩阵,这样做可以提高计算效率,修改后的代价函数为:
C ∑ i = 1 m [ y ( i ) C o s t 1 ( θ T f ( i ) ) + ( 1 − y ( i ) ) C o s t 0 ( θ T f ( i ) ) ] + 1 2 θ T M θ C\sum_{i=1}^m\left[y^{(i)}Cost_1(\theta^Tf^{(i)})+(1-y^{(i)})Cost_0(\theta^Tf^{(i)})\right]+\frac{1}{2}\theta^TM\theta Ci=1∑m[y(i)Cost1(θTf(i))+(1−y(i))Cost0(θTf(i))]+21θTMθ
理论上讲,我们也可以在逻辑回归中使用核函数,但是上面使用 来简化计算的方法不适用于逻辑回归,因此计算将非常耗费时间。
在此,我们不介绍最小化支持向量机的代价函数的方法,你可以使用现有的软件包(如
liblinear,libsvm 等)。在使用这些软件包最小化我们的代价函数之前,我们通常需要编写核
函数,并且如果我们使用高斯核函数,那么在使用之前进行特征缩放是非常必要的。
另外,支持向量机也可以不使用核函数,不使用核函数又称为线性核函数(linear kernel),
当我们不采用非常复杂的函数,或者我们的训练集特征非常多而实例非常少的时候,可以采
用这种不带核函数的支持向量机。
下面是支持向量机的两个参数和的影响:
= 1/
较大时,相当于较小,可能会导致过拟合,高方差;
较小时,相当于较大,可能会导致低拟合,高偏差;
较大时,可能会导致低方差,高偏差;
较小时,可能会导致低偏差,高方差。
来自https://www.cnblogs.com/sl0309/p/10499278.html
使用非线性核函数时,需要将特征值归一化
核函数需要满足默塞尔定理Mercer’s theorem
无监督学习的数据集是一堆不带标签的数据,他们没有 y y y的值,只有 x x x的值
K均值算法的第一步(簇分配):确定两个聚类中心(图中蓝色叉和红色叉),遍历每一个样本(图中绿点),判断离哪个聚类中心更近,将样本分为两个簇,分完之后如下图
K均值算法的第二步(移动聚类中心):计算每一簇中所有点的均值,并将聚类中心移动到该均值处,移动后如下图
然后再重复第一步判断每一个样本离哪个聚类中心近,并改变他的颜色(分类),改变后再重复第二步。
这样不断重复,得到最终结果
这样就可以说K均值已经聚合了
输入一个 K K K表示想要将数据分为几类,输入不带标签的训练集
设训练集是一个n维向量(按照惯例不考虑 x 0 = 1 x_0=1 x0=1这一项)
如上图
用 K K K表示想要将数据分为 K K K类
用 μ k \mu_k μk表示第 k k k个聚类中心的位置(他是一个向量/矩阵),随机初始化获得
用 c ( i ) c^{(i)} c(i)表示样本中第 i i i个点距离最近的那个聚类中心的下标,即第 i i i个样本距离第 c ( i ) c^{(i)} c(i)个聚类中心最近,即第 i i i个样本属于第 c ( i ) c^{(i)} c(i)个聚类中心,求法如上图中蓝色笔迹
求完上述值后,计算每一个聚类中心包含的点的均值,赋值给对应的 μ k \mu_k μk,此时已经得到新的聚类中心的位置
如果有一个没有点的聚类中心,一般直接移除,这样最后会得到K-1类;但如果确实是需要分为K类,那么就将那个没有点的聚类中心重新随机初始化
如上图,有时K均值算法也运用于不能很明显的分类的数据集,如收集了很多人的身高、体重作为数据集,可以看出这些数据基本是连续的,要将其分为S、M、L三类,用聚类算法,也能分为三类。聚类算法也可用于市场的分割
μ c ( i ) \mu_{c^{(i)}} μc(i)表示第 i i i个样本所属聚类中心的位置
K均值聚类算法的代价函数(优化目标函数)为
J ( c ( 1 ) , . . . , c ( m ) , μ 1 , . . . , μ K ) = 1 m ∑ i = 1 m ∥ x ( i ) − μ c ( i ) ∥ 2 J(c^{(1)},...,c^{(m)},\mu_1,...,\mu_K)=\frac{1}{m}\sum_{i=1}^m\Vert x^{(i)}-\mu_{c^{(i)}}\Vert^2 J(c(1),...,c(m),μ1,...,μK)=m1i=1∑m∥x(i)−μc(i)∥2
表示的是每一个样本的位置与它所属的聚类中心位置作差,取范数,再平方,所有共m个样本加起来再求平均数
这个代价函数有时也称为失真代价函数(the distortion cost function)或K均值算法的失真
或者另外一种方法,根据下游目的来手动选择聚类数量
如上图,将数据从二维压缩为一维,以表示同一个物体的长度为例, x 1 x_1 x1为用厘米表示, x 2 x_2 x2为用英尺表示,由于四舍五入产生的误差,坐标系中的样本坐标没有完全练成一条直线,对其进行线性拟合,得到一条直线,让这些点投影在另一条坐标轴 z z z上,这样,可以用一个一维的数字 z ( i ) z^{(i)} z(i)来表示原来的一个二维向量 x ( i ) x^{(i)} x(i)
如上图,将数据从三维压缩为二维,(在实际应用中可能是将10000维的数据压缩为1000维),空间中所有的点几乎都在一个平面的周围,将所有的点投射到这个平面上,用 z 1 z_1 z1和 z 2 z_2 z2来表示平面的两个坐标轴,这样就把一个三维空间压缩为二维平面,原来的数据用一个二维向量 z ( i ) z^{(i)} z(i)即可表示, z ( i ) z^{(i)} z(i)中有两个特征 z 1 ( i ) z_1^{(i)} z1(i)和 z 2 ( i ) z_2^{(i)} z2(i)
降维后的数据可以提高学习算法的运算效率并且节省磁盘存储空间
一般取k=2 or k=3来可视化数据集
有这样的一个数据集,这个数据集含有二维实数空间内的样本,假设我想对数据进行降维,从二维降到一维,也就是说,我需要找到 一条直线,将数据投影到这条直线上
上图中红线是一个不错的选择,因为每个点投影到直线上的距离(蓝线)都很短
所以,PCA就是寻找一个低维的东西(在这个例子中是一条直线),让数据投射在上面时的距离的平和最小,这个距离被称为投影误差
在使用PCA钱,需要先进行均值归一化和特征规范化,使得特征 x 1 x_1 x1和 x 2 x_2 x2均值为0,数值在可比较的范围之内
由二维到一维时,找到一个向量即可,三维到二维时,需要找到2个向量组成一个平面,更高维时,需要找到k个向量,让样本投影到这k个向量展开的线性子空间上
上图解释了PCA与线性回归的不同:
首先进行数据预处理,进行均值标准化,可能要进行特征缩放
均值标准化:
之前进行了这样的运算: z = U r e d u c e T x z=U_{reduce}^Tx z=UreduceTx
其中 z z z是新得到的一维向量, x x x是原来的二维向量, U r e d u c e T U_{reduce}^T UreduceT是通过svd算法得出的
现在要恢复二维,进行这样的运算: x a p p o x = U r e d u e e z x_{appox }=U_{ reduee } z xappox=Uredueez
上图中分子的式子称为平均平方映射误差,分母称为数据的总变差(它的意思是 “平均来看 我的训练样本 距离零向量多远? 平均来看 我的训练样本距离原点多远?),分数计算的结果为降维后的新数据与原数据的差距有多大
比如假设结果 ≤ 0.01 \le0.01 ≤0.01,则可以说有1%的差异,这个数字比较典型的取值为0.01、0.05、0.10甚至也可能是0.15
上图左侧是计算合适的k值的方法,这里假设与原数据有小于等于1%的误差
可以直接调用svd算法,其中输出的 S S S矩阵是一个对角阵
用公式 1 − ∑ i = 1 k s i i ∑ i = 1 n s i i ⩽ 0.01 1-\frac{\sum_{i=1}^{k} s_{i i}}{\sum_{i=1}^{n} s_{i i}} \leqslant 0.01 1−∑i=1nsii∑i=1ksii⩽0.01,直接判断这个公式是否成立即可,找到让这个公式成立的k的值就是合适的k的取值,或者用 ∑ i = 1 k s i i ∑ i = 1 n s i i ⩾ 0.99 \frac{\sum_{i=1}^{k} s_{i i}}{\sum_{i=1}^{n} s_{ii}} \geqslant 0.99 ∑i=1nsii∑i=1ksii⩾0.99来判断也是一样的
以飞机发动机的异常检测为例, x 1 x_1 x1和 x 2 x_2 x2分别表示发动机的两个特征,先有一堆数据集表示正常的发动机(如上图红色叉),可以认为越靠近圆圈中间越正常,现在有一个新的发动机 x t e s t x_{test} xtest,将他放进坐标系中比较,越靠近中心表示 p ( x test ) p\left(x_{\text {test }}\right) p(xtest )越大,设定一个阈值 ε \varepsilon ε,如果 p ( x test ) ⩾ ε p\left(x_{\text {test }}\right) \geqslant \varepsilon p(xtest )⩾ε则表示该新发动机正常,如果 p ( x test ) < ε p\left(x_{\text {test }}\right) < \varepsilon p(xtest )<ε则表示发动机异常
异常检测常被用来进行用户的欺诈监测(检测异常的用户)
高斯分布曲线的公式:
p ( x ; μ , σ 2 ) = 1 2 π σ exp ( − ( x − μ ) 2 2 σ 2 ) p\left(x ; \mu, \sigma^{2}\right) =\frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{(x-\mu)^{2}}{2 \sigma^{2}}\right) p(x;μ,σ2)=2πσ1exp(−2σ2(x−μ)2)
如上图,现有一个无标签数据集,可以看出数据集在中间概率大,两侧概率小,假设满足正态分布,进行参数估计
假设数据集满足正态分布: x ( i ) ∼ N ( μ , σ 2 ) x^{(i)} \sim \mathcal{N}\left(\mu, \sigma^{2}\right) x(i)∼N(μ,σ2)
参数估计公式为:
μ = 1 m ∑ i = 1 m x ( i ) \mu=\frac{1}{m} \sum_{i=1}^{m} x^{(i)} μ=m1i=1∑mx(i)
σ 2 = 1 m ∑ i = 1 m ( x ( i ) − μ ) 2 \sigma^{2}=\frac{1}{m} \sum_{i=1}^{m}\left(x^{(i)}-\mu\right)^{2} σ2=m1i=1∑m(x(i)−μ)2
求方差的公式中 1 m \frac{1}{m} m1也可能是 1 m − 1 \frac{1}{m-1} m−11,在机器学习中,这两种公式差距不大
密度估计问题
p ( x ) p(x) p(x)表示特征 x x x出现的概率
假设所有特征均满足正态分布
给出概率
p ( x ) = p ( x 1 ; μ 1 , σ 1 2 ) p ( x 2 ; μ 2 , σ 2 2 ) p ( x 3 ; μ 3 , σ 3 2 ) ⋯ p ( x n ; μ n , σ n 2 ) = ∏ j = 1 n p ( x j ; μ j , σ j 2 ) \begin{array}{l} p(x)\\ =p\left(x_{1} ; \mu_{1}, \sigma_{1}^{2}\right) p\left(x_{2} ; \mu_{2}, \sigma_{2}^{2}\right) p\left(x_{3} ; \mu_{3}, \sigma_{3}^{2}\right) \cdots p\left(x_{n} ; \mu_{n}, \sigma_{n}^{2}\right) \\ =\prod_{j=1}^{n} p\left(x_{j} ; \mu_{j}, \sigma_{j}^{2}\right) \end{array} p(x)=p(x1;μ1,σ12)p(x2;μ2,σ22)p(x3;μ3,σ32)⋯p(xn;μn,σn2)=∏j=1np(xj;μj,σj2)
异常检测算法的流程如上图
假设有一个带标签的数据集,选取出正常的样本去掉标签作为训练集,得出异常检测算法,然后用交叉验证集(带标签)来验证,用测试集(带标签)来测试
上图是以发动机检测为例的训练集、交叉验证集和测试集的分法
由于数据集中的数据可能非常倾斜,所以可能需要计算F值来判断算法的效果,或者用F值来决定怎样的 ε \varepsilon ε是合适的
监督学习算法通常用于:
样本数量与某类情况出现概率没关系(即使一类情况出现概率为99%,另一类概率为1%),只要同时有大量的正样本和负样本,就能用监督学习算法,比如癌症预测
以服务器的异常为例,上图中绿色样本在两轴中的概率都不低,但很明显在左侧坐标系中他是一个异常样本,算法不能意识到左侧坐标系中的椭圆内的才是正常样本,而默认是以样本中心为圆心,按圆向外概率递减
所以要使用多元高斯分布↓
将这两个特征合起来考虑,一个n维向量 μ \mu μ和一个n×n的协方差矩阵 Σ \Sigma Σ作为多元高斯分布的参数,公式为:
p ( x ; μ , Σ ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 exp ( − 1 2 ( x − μ ) ⊤ Σ − 1 ( x − μ ) ) p(x ; \mu, \Sigma)= \frac{1}{(2 \pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}} \exp \left(-\frac{1}{2}(x-\mu)^{\top} \Sigma^{-1}(x-\mu)\right) p(x;μ,Σ)=(2π)2n∣Σ∣211exp(−21(x−μ)⊤Σ−1(x−μ))