Processing math: 100%

机器学习总结

Andrew Ng的机器学习入门课程已经全部看完了,笔记也写了一些,这里总结所有所学的内容,说实话,现在完全忘记了开始所学的内容了。

什么是机器学习

Arthur Samuel。他定义机器学习为,在进行特定编程的情况下给予计算学习能力的领域。

Tom Mitchell。他定义的的机器学习是,一个程序被认为能从经验E中学习,解决任务T,达到性能度量值P,当且仅当,有了经验E后,经过P评判,程序再处理T时的性能有所提升。

周志华。他再机器学习一书中的意思是,让机器从数据中学习,进而得到一个更加符合现实规律的模型,通过对模型的使用使得机器比以往表现的更好,这就是机器学习。

我的愚见。机器学习就是在已有的数据中发现规律再寻找符合这个规律的数据。

监督学习

回归(房价预测),分类(肿瘤预测),给出特征值与其对应的结果。

无监督学习

聚类(新闻、邮件的分类),只根据特征值寻找其中的规律。

线性回归

模型表示

m:训练集中实例的数量

x:特征值/输入变量

y:目标值/输出变量

(x,y):训练集中的实例
第i个实例:(xi,yi)
h:学习算法中的解决方案或函数,也称为假设(hypothesis)

hθ(x)=θ0+θ1x

线性回归代价函数

预测函数hθ(x)是关于x的函数,而代价函数是一个关于(θ0,θ1)的函数

J(θ0,θ1)=12mmi=1(hθ(xi)yi)2 优化目标:minimizeJ(θ0,θ1)

梯度下降

梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数J(θ0,θ1)的最小值。 梯度下降背后的思想是:开始时我们随机选择一个参数组合(θ0,θ1,......,θn),计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到一个局部最小值,因为我们没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否是全局最小值,选择不同的初始参数组合,可能回找到不同的局部最小值。

线性回归问题运用梯度下降法,关键在于求出代价函数的导数,即:
θjJ(θ0,θ1)=θj12mmi=1(hθ(x(i))y(i))2
j=0 时:θ0J(θ0,θ1)=1mi=1m(hθ(x(i))y(i))
j=1 时:θ1J(θ0,θ1)=1mi=1m((hθ(x(i))y(i))x(i))
则算法写成:

Repeat {
θ0:=θ0a1mmi=1(hθ(x(i))y(i))
θ1:=θ1a1mmi=1((hθ(x(i))y(i))x(i))
​ }

特征缩放

尝试将所有特征的尺度都尽量缩放到-1到1之间, 最简单的方法是令:xn=xnμnsn,其中 μn是平均值,sn是标准差。

学习速率

梯度下降算法的每次迭代受到学习率的影响,如果学习率a过小,则达到收敛所需的迭代次数会非常高;如果学习率a过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。

通常可以考虑尝试些学习率:
α=0.010.030.10.31310

正规方程

正规方程是通过求解下面的方程来找出使得代价函数最小的参数的:θjJ(θj)=0 。 假设我们的训练集特征矩阵为 X(包含了 x0=1)并且我们的训练集结果为向量 y,则利用正规方程解出向量 θ=(XTX)1XTy

梯度下降与正规方程的比较

梯度下降 正规方程
需要选择学习速率 不需要
需要多次迭代 需要计算(XTX)1XT如果特征数量n较大则运算代价大,因为矩阵逆的计算时间复杂读为O(n3),通常来说n小于一万时还可以接受
适用于各种类型的模型 只适用于线性模型,不适合逻辑回归等其他模型

总结一下,只要特征变量的数目并不大,标准方程是一个很好的计算参数θ的替代方法。具体地说,只要特征变量数量小于一万,通常使用标准方程法,而不使用梯度下降法。

逻辑回归

逻辑回归(Logistic Regression)一般用在分类问题中。

假设函数

hθ(x)=g(θTX) g(z)=11+ez

X代表特征向量,g代表逻辑函数(Logistic function),常用的逻辑函数为S形函数(Sigmoid function)

image

判定边界

在逻辑回归中,我们预测:

hθ(x)>=0.5时,预测 y=1

hθ(x)<0.5时,预测 y=0

根据 S 形函数图像,我们知道当

z=0g(z)=0.5

z>0g(z)>0.5

z<0g(z)<0.5

z=θTx,即:

θTx>=0 时,预测 y=1.

θTx<0 时,预测 y=0

接下来看价函数

逻辑回归代价函数

逻辑回归的代价函数为:
J(θ)=1mmi=1Cost(hθ(x(i)),y(i)).

hθ(x)Cost(hθ(x),y)之间的关系如下图所示:.

image

这样构建的Cost(hθ(x),y)函数的特点是:当实际的 y=1hθ(x)也为 1 时误差为 0,当 y=1hθ(x)不为1时误差随着hθ(x)变小而变大;当实际的 y=0hθ(x)也为 0 时代价为 0,当y=0hθ(x)不为 0时误差随着 hθ(x)的变大而变大。 将构建的 Cost(hθ(x),y)简化如下: Cost(hθ(x),y)=y×log(hθ(x))(1y)×log(1hθ(x)) 带入代价函数得到:

J(θ)=1mmi=1[y(i)log(hθ(x(i)))(1y(i))log(1hθ(x(i)))].

即:

J(θ)=1mmi=1[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))].

在得到这样一个代价函数以后,我们便可以用梯度下降算法来求得能使代价函数最小的参数了。算法为:

Repeat { θj:=θjαθjJ(θ) (simultaneously update all ) }

求导后得到:

Repeat { θj:=θjα1mmi=1(hθ(x(i))y(i))x(i)j (simultaneously update all ) }

高级优化

共轭梯度法 BFGS (变尺度法)

L-BFGS (限制变尺度法)

线性搜索(line search)

正则化

正则化可以改善或者减少过拟合问题。

...+λ2mnj=1θ2j

神经网络

当特征他多时,需要神经网络。

标记方法

训练样本数:m

输入信号:x

输出信号:y

神经网络层数:L

每层的neuron个数:S1 - SL

神经网络的分类

二类分类:SL=0,y=0or1

K类分类:SL=k,yi=1(k>2)

image

代价函数

hθ(x)RK
(hθ(x))i=ithoutput
J(Θ)=1m[mi=1kk=1yk(i)log(hΘ(x(i)))k+(1y(i)k)log(1(hΘ(x(i)))k)]+λ2mL1l=1sli=1sl+1j=1(Θ(l)ji)2

反向传播

向前传播的算法是:

image

image

反向传播的算法就是先正向传播计算出每一层的激活单元,然后利用训练集的结果与神经网络预测的结果求出最后一层的误差,然后利用该误差运用反向传播计算出直至第二层的所有误差。

在求出了Δ(l)ij之后,我们便可以计算代价函数的偏导数了,计算方法如下: D(l)ij:=1mΔ(l)ij+λΘ(l)ij if;j0 D(l)ij:=1mΔ(l)ij if;j=0

神经网络的总结

网络结构:第一件要做的事是选择网络结构,即决定选择多少层以及决定每层分别有多少个单元。

第一层的单元数即我们训练集的特征数量。

最后一层的单元数是我们训练集的结果的类的数量。

如果隐藏层数大于1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。

我们真正要决定的是隐藏层的层数和每个中间层的单元数。

训练神经网络:

参数的随机初始化

利用正向传播方法计算所有的hθ(x)

编写计算代价函数 J 的代码

利用反向传播方法计算所有偏导数

利用数值检验方法检验这些偏导数

使用优化算法来最小化代价函数

0%