笔记

机器学习笔记

或许哪天就忘了呢?

C01day
2021-09-01

# 线性回归的代价函数

J(θ)=12mi=1m(hθ(x(i))y(i))2J(\theta)=\frac{1}{2m}\sum_{i=1}^m\left(h_\theta(x^{(i)})-y^{(i)}\right)^2

INFO

代价函数J(θ)J(\theta)是关于θ1,θ2,...,θn\theta_1,\theta_2,...,\theta_n的函数

hθ(x)=θTx=θ0x0+θ1x1++θnxnh_\theta(x)=\theta^Tx=\theta_0x_0+\theta_1x_1+\cdots+\theta_nx_n

x(i)x^{(i)}表示第ii个样本

# 梯度下降

通过梯度下降,找到J(θ)J(\theta)的局部最优解

repeatuntilconvergence:repeat\;until\;convergence:

θj:=θjαθjJ(θ)\theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta)

INFO

α:\alpha:学习率

注意所有的θ\theta是同时更新的

# Logistic 回归

hθ(x)=g(θTx)g(z)=11+ez}hθ(x)=11+eθTx\left. \begin{array}{lr} h_\theta(x)=g(\theta^Tx) \\ g(z)=\frac{1}{1+e^{-z}} \end{array} \right\} \Rightarrow h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}}

# Logistic 回归的代价函数

J(θ)=1mi=1mCost(hθ(x),y)J(\theta)=\frac{1}{m}\sum_{i=1}^{m}Cost(h_\theta(x),y)

Cost(hθ(x),y)={log(hθ(x))y=1log(1hθ(x))y=0Cost(h_\theta(x),y)= \left\{ \begin{array}{lr} -\log(h_\theta(x)) \quad y=1 \\ -\log(1-h_\theta(x)) \quad y=0 \end{array} \right.

P(y=1x;θ)P(y=1|x;\theta)表示给定x,θx,\thetay=1y=1的概率

假设预测y=1y=1的概率hθ(x)=1h_\theta(x)=1,而yy的真实值是11,那选用第一个代价函数,此时CostCost00;如果yy的真实值是00,那选用第二个代价函数,此时CostCost\infty

CostCost合并简化:

J(θ)=1m[i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]J(\theta)=-\frac{1}{m}\left[\sum_{i=1}^my^{(i)}\log h_\theta(x^{(i)})+(1-y^{(i)})\log(1-h_\theta(x^{(i)}))\right]

# 多元分类

对于每个ClassiClass\;i,将其转化为二分类问题,用上述LogisticLogistic回归的代价函数J(θ)J(\theta),结合梯度下降,训练各自的分类器hθ(i)(x)h_\theta^{(i)}(x),用来预测y=iy=i时的概率

hθ(i)(x)=P(y=ix;θ)(i=1,2,3)h_\theta^{(i)}(x)=P(y=i|x;\theta) \quad (i=1,2,3\dots)

对于一个新的输入xx,找到最大的hθ(i)(x)h_\theta^{(i)}(x)即可,此时的ii便是预测的类。

INFO

不同的hθ(i)(x)h_\theta^{(i)}(x)有不同的参数θ\theta

# 正则化代价函数

正则化线性回归的代价函数:

J(θ)=12m[i=1m(hθ(x(i))y(i))2+λj=1nθj2Ragularization]J(\theta)=\frac{1}{2m}\left[\;\sum_{i=1}^m\left(h_\theta(x^{(i)})-y^{(i)}\right)^2+\underbrace{\lambda\sum_{j=1}^n\theta_j^2}_{Ragularization}\;\right]

INFO

m:m:训练集样本容量

n:n:参数个数

正则化项是为了使参数θ\theta尽量地小,保证假设模型相对简单,避免过拟合

正则化逻辑回归的代价函数和上述类似,加一个正则化项λ2mj=1nθj2\frac{\lambda}{2m}\sum_{j=1}^n\theta_j^2

# 神经网络

Θij(k):\Theta_{ij}^{(k)}:右上角的(k)(k)表示神经网络第kk层与第k+1k+1层之间的参数(或者说权重),右下角的ijij表示aik+1a_i^{k+1}iixjx_jjj

# 多元分类

图中是一个四分类问题,训练集(x(i),y(i))(x^{(i)},y^{(i)}),其中x(i)x^{(i)}表示图片的特征,y(i)y^{(i)}是一个四维的标签,我们想要让hΘ(x(i))y(i)h_\Theta(x^{(i)})\approx y^{(i)}

# 代价函数

和逻辑回归的代价函数类似,逻辑回归的代价函数J(θ)J(\theta)(经过正则化)是

J(θ)=1m[i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]+λ2mj=1nθj2J(\theta)=-\frac{1}{m}\left[\sum_{i=1}^my^{(i)}\log h_\theta(x^{(i)})+(1-y^{(i)})\log(1-h_\theta(x^{(i)}))\right]+\frac{\lambda}{2m}\sum_{j=1}^n\theta_j^2

神经网络的代价函数J(Θ)J(\Theta)

J(θ)=1m[i=1mk=1Kyk(i)log(hΘ(x(i)))k+(1yk(i))log(1(hΘ(x(i)))k)]+λ2ml=1L1i=1slj=1sl+1(Θji(l))2J(\theta)=-\frac{1}{m}\left[\sum_{i=1}^m\sum_{k=1}^Ky_k^{(i)}\log (h_\Theta(x^{(i)}))_k+(1-y_k^{(i)})\log(1-(h_\Theta(x^{(i)}))_k)\right]+\frac{\lambda}{2m}\sum_{l=1}^{L-1}\sum_{i=1}^{s_l}\sum_{j=1}^{s_{l+1}}(\Theta_{ji}^{(l)})^2

INFO

L:L:神经网络层数

sl:s_l:ll层的神经元个数(不包括偏置单元)

KK代表输出层的单元数,等价于sLs_L

hΘ(x)h_\Theta(x)是一个KK维向量,(hΘ(x))i(h_\Theta(x))_i表示输出向量的第ii个值

# 反向传播

一开始让Δij(l)=0\Delta_{ij}^{(l)}=0,用来计算Θij(l)J(Θ)\frac{\partial}{\partial\Theta_{ij}^{(l)}}J(\Theta)

遍历训练集的每个样本(x(i),y(i))(x^{(i)},y^{(i)})

首先让输入层的激活函数a(1)=x(i)a^{(1)}=x^{(i)}

运用正向传播算法

z(l+1)=Θ(l)a(l)a(l+1)=g(z(l+1))z^{(l+1)}=\Theta^{(l)}a^{(l)} \\ a^{(l+1)}=g(z^{(l+1)})

计算之后每层的激活函数a(l)(l=2,3,,L)a^{(l)}\;(l=2,3,\dots,L)

然后用样本的标签(或者说真值)y(i)y^{(i)},计算输出值的误差项δ(L)=a(L)y(i)\delta^{(L)}=a^{(L)}-y^{(i)}

运用反向传播算法

δ(l)=(Θ(l))Tδ(l+1).g(z(l))a(l).(1a(l))\delta^{(l)}=(\Theta^{(l)})^T\delta^{(l+1)}.\ast \underbrace{g'(z^{(l)})}_{a^{(l)}.\ast(1-a^{(l)})}

计算δ(l)(l=L1,L2,,2)\delta^{(l)}\;(l=L-1,L-2,\dots,2),注意没有δ(1)\delta^{(1)},因为不需要对输入层考虑误差项

最后让Δij(l):=Δij(l)+aj(l)δi(l+1)\Delta_{ij}^{(l)}:=\Delta_{ij}^{(l)}+a_j^{(l)}\delta_i^{(l+1)},或者写成向量形式Δ(l):=Δ(l)+δ(l+1)(a(l))T\Delta^{(l)}:=\Delta^{(l)}+\delta^{(l+1)}(a^{(l)})^T

由此计算出

Dij(l):={1mΔij(l)+λΘij(l)ifj01mΔij(l)ifj=0D_{ij}^{(l)}:= \left\{ \begin{array}{lr} \frac{1}{m}\Delta_{ij}^{(l)}+\lambda\Theta_{ij}^{(l)} \quad if \; j \neq 0 \\ \frac{1}{m}\Delta_{ij}^{(l)} \quad if \; j = 0 \end{array} \right.

而我们所需要的偏导Θij(l)J(Θ)=Dij(l)\frac{\partial}{\partial\Theta_{ij}^{(l)}}J(\Theta)=D_{ij}^{(l)}

得到了神经网络的代价函数关于每个参数Θij(l)\Theta_{ij}^{(l)}的偏导项后,就可以使用梯度下降或者其他高级优化算法了。

INFO

..\ast表示点乘,为矩阵的对应位置相乘

# 梯度检测

反向传播算法可能会出现错误,因此需要用梯度检测来检验偏导,看是否近似

J(,Θij(l)+ϵ,)J(,Θij(l)ϵ,)2ϵΘij(l)J(Θ)=Dij(l)\frac{J(\dots,\Theta_{ij}^{(l)}+\epsilon,\dots)-J(\dots,\Theta_{ij}^{(l)}-\epsilon,\dots)}{2\epsilon}\approx\frac{\partial}{\partial\Theta_{ij}^{(l)}}J(\Theta)=D_{ij}^{(l)}

INFO

由于计算量非常大,因此在训练分类器之前,需要关掉梯度检测

# 随机初始化

如果将所有参数都初始化为0,会造成所有单元都相等的现象。为了避免这种情况,需要对参数进行随机初始化

initializeeachΘij(l)toarandomvaluein[ϵ,+ϵ]initialize \; each \; \Theta_{ij}^{(l)} to \; a \; random \; value \; in \; [-\epsilon,+\epsilon]

# 训练集、验证集、测试集

先使用测试集对不同的假设模型ii得到参数θ(i)\theta^{(i)}

minθ(i)Jtrain(θ(i))\min_{\theta^{(i)}} J_{train}(\theta^{(i)})

再用验证集选择出交叉验证误差最小的模型ii

miniJcv(θ(i))\min_i J_{cv}(\theta^{(i)})

然后用测试集计算泛化误差

Jtest(θ(i))J_{test}(\theta^{(i)})

# 偏差和方差

# 模型多项式次数dd与偏差、方差

如果训练集误差Jtrain(θ)J_{train}(\theta)高,验证集误差Jcv(θ)J_{cv}(\theta)也高(图中左侧红框),则是一个偏差问题(bias)(bias)

如果训练集误差Jtrain(θ)J_{train}(\theta)低,但验证集误差Jcv(θ)J_{cv}(\theta)高(图中右侧红框),则是一个方差问题(variance)(variance)

# 正则化参数λ\lambda与偏差、方差

INFO

图中,J(θ)J(\theta)包括正则化项,而Jtrain(θ),Jcv(θ)J_{train}(\theta),J_{cv}(\theta)不包括

通过取不同的λ\lambda值,让J(θ)J(\theta)最小

minθJ(θ)\min_{\theta} J(\theta)

得到对应的参数θ\theta,计算在参数θ\thetaJtrain(θ),Jcv(θ)J_{train}(\theta),J_{cv}(\theta)的变化

λ\lambda越小,惩罚程度越小,正则化项可以忽略,可能会出现过拟合现象(正则化是为了防止过拟合现象),即对训练集的拟合效果非常好,此时Jtrain(θ)J_{train}(\theta)很小;λ\lambda越大,惩罚程度越大,可能连训练集都不能很好地拟合,此时Jtrain(θ)J_{train}(\theta)很大。

同理,在λ\lambda很小时,可能会出现过拟合现象,对应高方差问题(variance)(variance),因此Jcv(θ)J_{cv}(\theta)较大;在λ\lambda很大时,可能会出现欠拟合现象,对应高偏差问题(bias)(bias),因此Jcv(θ)J_{cv}(\theta)也较大。而中间总会有某个λ\lambda值,此时的表现刚好合适。

INFO

过拟合对应高方差问题(variance)(variance)Jtrain(θ)J_{train}(\theta)较小,但Jcv(θ)J_{cv}(\theta)较大;

欠拟合对应高偏差问题(bias)(bias)Jtrain(θ)J_{train}(\theta)Jcv(θ)J_{cv}(\theta)都较大。

上述图像比较简单和理想化,真实数据可能更加凌乱且有很多噪声,但趋势总归是正确的

# 精确度和召回率

precision:precision:预测为1的数据中实际为1的比例

truepositivepredictedpositive=truepositivetruepositive+falsepositive\dfrac{true\;positive}{predicted\;positive}=\dfrac{true\;positive}{true\;positive+false\;positive}

recall:recall:实际为1的数据中真正被预测为1的比例

truepositiveactualpositive=truepositivetruepositive+falsenegative\dfrac{true\;positive}{actual\;positive}=\dfrac{true\;positive}{true\;positive+false\;negative}

# 精确度和召回率的权衡

通过改变thresholdthreshold,精确度和召回率会变化。具体来说,当thresholdthreshold增大时,会有更高的精确度(预测为1的数据中实际为1的比例更大)和更低的召回率(实际为1的数据不变,但由于更加保守,预测为1的数据变少了);当thresholdthreshold减小时,会有更低的精确度和更高的召回率。

两者不可兼得,可以使用Fscore\;F score\;来评估算法(当然,也有很多其他评估方式)

Fscore=2PRP+RF \; score=2\dfrac{PR}{P+R}

P:precisionR:recallP:precision \quad R:recall

# 支持向量机

# 代价函数

支持向量机的代价函数和逻辑回归的代价函数类似

J(θ)=minθCi=1m[y(i)cost1(θTx(i))+(1y(i))cost0(θTx(i))]+12i=1nθj2J(\theta)=\min_{\theta} 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_{i=1}^{n}\theta_j^2

其中,cost1,cost0cost_1,cost_0hθ(x)h_\theta(x)类似,前者是分段直线,后者是曲线(参考上图)

同时,去掉了参数1m\frac{1}{m},并从原来的A+λBA+\lambda B形式变为了CA+BCA+B形式

y=1y=1时,我们希望θTx\theta^Tx不仅仅是0\geq0,而是1\geq1,这样cost1cost_100AA项就为00,使代价函数尽量小,反之y=0y=0时希望θTx<1\theta^Tx<-1

当得到了使代价函数J(θ)J(\theta)最小的参数θ\theta后,带入交叉验证集/测试集的数据xx,就能得到支持向量机的输出hθ(x)h_\theta(x)

hθ(x)={1ifθTx00ifθTx<0h_\theta(x)= \left\{ \begin{array}{lr} 1 \quad if \quad \theta^T x \geq 0 \\ 0 \quad if \quad \theta^T x < 0 \end{array} \right.

# 非线性决策边界

Predicty=1ifPredict \; y=1 \; if

θ0+θ1f1+θ2f2+θ3f3+0\theta_0+\theta_1f_1+\theta_2f_2+\theta_3f_3+\dotsb\geq0

以高斯核函数为例,给定一个输入xx,得到

fi=k(x,l(i))=exp(xl(i)22σ2)f_i=k(x,l^{(i)})=exp\left(-\dfrac{\parallel x-l^{(i)} \parallel^2}{2\sigma^2}\right)

其中,l(i)l^{(i)}是标记点,等同于训练样本点(l(i)=x(i)l^{(i)}=x^{(i)});xx可以是训练集,交叉验证集,测试集等等。

如果xl(i),fi1;x\approx l^{(i)},f_i\approx 1; 如果xx距离l(i)l^{(i)}很远,则fi0f_i\approx 0,可以理解为相似度。

如图所示,靠近l(1),l(2)l^{(1)},l^{(2)}的点将会预测为11,远离则为00

# 核函数与SVMSVM

对于训练样本(x(i),y(i))(x^{(i)},y^{(i)}),可以得到mmfj(i)=k(x(i),l(j))f_{j}^{(i)}=k(x^{(i)},l^{(j)}),即

f(i)=[f1(i),f2(i),,fm(i)]Tf^{(i)}=\left[f_{1}^{(i)},f_{2}^{(i)},\dotsb,f_{m}^{(i)}\right]^T

mm为训练样本的大小,因为l(j)l^{(j)}标记点就是训练样本点,所以l(j)l^{(j)}标记点有mm个,f(i)f^{(i)}mm维向量。

x(i)x^{(i)}映射为f(i)f^{(i)}(描述第ii个训练样本的特征向量由x(i)x^{(i)}变成f(i)f^{(i)}),则θTx(i)\theta^Tx^{(i)}变为θTf(i)\theta^Tf^{(i)}

INFO

θTx(i)\theta^Tx^{(i)}θTf(i)\theta^Tf^{(i)}中的xxnn维)和ffmm维)的维度不一定相等,对应的θ\theta维度也不一样。其中,nn是特征的维度,mm是训练样本大小

同样,正则化项j=1nθj2\sum_{j=1}^n\theta_j^2中的nn等于θ\theta的维度,由于图中的f(i)f^{(i)}mm维向量,θ\theta则也为mm维向量,正则化项中的nn其实就等于mm

# 主成分分析PCAPCA

假如要将22维降成11维,则找出使得投影误差最小的向量uu,即点到投影后的点之间的距离。

要将nn维降成kk维,则找出使得投影误差最小的kk个向量u(1),u(2),,u(k)u^{(1)},u^{(2)},\dotsb,u^{(k)}

同时,主成分分析PCAPCA与线性回归不同,如上图所示,左边是线性回归,右边是PCAPCA,蓝色线段代表各自的误差,两者的误差并不相同。

# 主成分分析算法

将数据从nn维降到kk

  • 首先计算协方差矩阵SigmaSigma

Sigma=1mi=1n(x(i))(x(i))TSigma=\frac{1}{m}\sum_{i=1}^{n}(x^{(i)})(x^{(i)})^T

x(i)Rn×1,SigmaRn×nx^{(i)}\in\R^{n \times 1},Sigma\in\R^{n \times n}

  • 然后计算SigmaSigma的特征向量矩阵UU

U=[u(1)u(2)u(n)]Rn×nU= \begin{bmatrix} u^{(1)} & u^{(2)} & \dotsb & u^{(n)} \end{bmatrix} \in\R^{n \times n}

u(i)Rn×1u^{(i)}\in\R^{n \times 1}

  • 取前kk个向量组成UreduceU_{reduce}

Ureduce=[u(1)u(2)u(k)]Rn×kU_{reduce}= \begin{bmatrix} u^{(1)} & u^{(2)} & \dotsb & u^{(k)} \end{bmatrix} \in\R^{n \times k}

  • 对于一个样本x(i)Rn×1x^{(i)}\in\R^{n \times 1},降维后新的坐标z(i)Rk×1z^{(i)}\in\R^{k \times 1}

z(i)=[Ureduce]Tx(i)=[(u(1))T(u(2))T(u(k))T]x(i)=Rk×n×Rn×1Rk×1z^{(i)}=[U_{reduce}]^T x^{(i)}= \begin{bmatrix} (u^{(1)})^T \\ (u^{(2)})^T \\ \dotsb \\ (u^{(k)})^T \end{bmatrix} x^{(i)}= \R^{k \times n} \times \R^{n \times 1} \in\R^{k \times 1}

# 异常检测

# 原始模型

训练集为{x(1),x(2),,x(m)}\{x^{(1)},x^{(2)},\dotsb,x^{(m)}\},样本iinn个特征{x1(i),x2(i),,xn(i)}\{x^{(i)}_1,x^{(i)}_2,\dotsb,x^{(i)}_n \}

每一种特征xjx_j都满足正态分布,计算参数μ1,,μn,σ12,,σn2\mu_1,\dotsb,\mu_n,\sigma^2_1,\dotsb,\sigma^2_n

特征jj的平均值μj:\mu_j:

μj=1mi=1mxj(i)\mu_j=\frac{1}{m}\sum_{i=1}^{m}x^{(i)}_j

特征jj的方差σj2:\sigma^2_j:

σj2=1mi=1m(xj(i)μj)2\sigma^2_j=\frac{1}{m}\sum_{i=1}^{m}(x^{(i)}_j-\mu_j)^2

然后对于一个新的特征向量xx,计算p(x)p(x)概率

p(x)=j=1np(xj;μj,σj2)p(x)=\prod_{j=1}^{n}p(x_j;\mu_j,\sigma^2_j)

如果概率p(x)<ϵp(x)<\epsilon,则xx是不正常的样本

INFO

p(xj;μj,σj2):p(x_j;\mu_j,\sigma^2_j):参数为μj,σj2\mu_j,\sigma^2_j的正态分布在xjx_j位置的概率

# 多元高斯模型

不再将多个特征视作独立分开的高斯分布,而是将p(x)p(x)看作一个多元高斯分布,参数μRn\mu\in\R^{n},协方差矩阵ΣRn×n\Sigma\in\R^{n \times n}

# 协同过滤算法

以电影评分为例,电影ii的特征为x(i)x^{(i)},能够描述电影的特点;用户jj的参数为θ(j)\theta^{(j)}(θ(j))Tx(i)(\theta^{(j)})^T x^{(i)}表示用户jj对电影ii的预测评分。

给出xx,能通过代价函数预测θ\theta;反之,给出θ\theta,能通过代价函数预测xx

其中,r(i,j)=1r(i,j)=1表示用户jj评价了电影iiy(i,j)y^{(i,j)}表示用户jj对电影ii的实际评分。

协同过滤算法能同时最小化参数xxθ\theta,其代价函数为上图中前两个代价函数的组合。

首先将参数初始化为较小的随机值(和神经网络类似),通过梯度下降等方法将代价函数最小化,可以得到参数xxθ\theta。如果用户jj尚未评价电影ii,可以通过(θ(j))Tx(i)(\theta^{(j)})^T x^{(i)}计算出预测的评分。

# 梯度下降

# 批量梯度下降

Jtrain(θ)=12mi=1m(hθ(x(i))y(i))2J_{train}(\theta)=\frac{1}{2m}\sum_{i=1}^m\left(h_\theta(x^{(i)})-y^{(i)}\right)^2

θj:=θjα1mi=1m(hθ(x(i))y(i))xj(i)(j=0,,n)\theta_j:=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^{m}\left(h_\theta(x^{(i)})-y^{(i)}\right)x_j^{(i)} \; (j=0,\dots,n)

# 随机梯度下降

在批量梯度下降算法中,每次进行迭代都需要遍历所有的训练样本,并且整个流程会进行多次上述运算。在数据很多的时候计算量会非常大,需要运用到随机梯度下降。

随机梯度下降先打乱训练样本,然后依次遍历训练样本(x(i),y(i))\left(x^{(i)},y^{(i)}\right),进行迭代

θj:=θjα(hθ(x(i))y(i))xj(i)(j=0,,n)\theta_j:=\theta_j-\alpha\left(h_\theta(x^{(i)})-y^{(i)}\right)x_j^{(i)} \; (j=0,\dots,n)

这样,每遍历一个样本便进行了一次迭代,不需要频繁地遍历所有训练样本。

在上图中,红色是批量梯度下降的收敛过程,紫色是随机梯度下降的收敛过程。随机梯度下降的内层循环取决于训练集的大小,外层循环通常只需要进行1-10次。

# MiniBatchMini-Batch梯度下降

批量梯度下降一次性用所有训练样本进行迭代;

随机梯度下降一次只用一个训练样本进行迭代;

MiniBatchMini-Batch梯度下降则一次用bb个训练样本来迭代。

上次编辑于: 2023-10-18 14:34