Andrew Ng的机器学习入门课程已经全部看完了,笔记也写了一些,这里总结所有所学的内容,说实话,现在完全忘记了开始所学的内容了。
什么是机器学习
Arthur Samuel。他定义机器学习为,在进行特定编程的情况下给予计算学习能力的领域。
Tom Mitchell。他定义的的机器学习是,一个程序被认为能从经验E中学习,解决任务T,达到性能度量值P,当且仅当,有了经验E后,经过P评判,程序再处理T时的性能有所提升。
周志华。他再机器学习一书中的意思是,让机器从数据中学习,进而得到一个更加符合现实规律的模型,通过对模型的使用使得机器比以往表现的更好,这就是机器学习。
我的愚见。机器学习就是在已有的数据中发现规律再寻找符合这个规律的数据。
监督学习
回归(房价预测),分类(肿瘤预测),给出特征值与其对应的结果。
无监督学习
聚类(新闻、邮件的分类),只根据特征值寻找其中的规律。
线性回归
模型表示
m:训练集中实例的数量
x:特征值/输入变量
y:目标值/输出变量
(x,y):训练集中的实例
第i个实例:(xi,yi)
h:学习算法中的解决方案或函数,也称为假设(hypothesis)
线性回归代价函数
预测函数hθ(x)是关于x的函数,而代价函数是一个关于(θ0,θ1)的函数
J(θ0,θ1)=12m∑mi=1(hθ(xi)−yi)2 优化目标:minimizeJ(θ0,θ1)梯度下降
梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数J(θ0,θ1)的最小值。 梯度下降背后的思想是:开始时我们随机选择一个参数组合(θ0,θ1,......,θn),计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到一个局部最小值,因为我们没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否是全局最小值,选择不同的初始参数组合,可能回找到不同的局部最小值。线性回归问题运用梯度下降法,关键在于求出代价函数的导数,即:
∂∂θjJ(θ0,θ1)=∂∂θj12mm∑i=1(hθ(x(i))−y(i))2
j=0 时:∂∂θ0J(θ0,θ1)=1m∑i=1m(hθ(x(i))−y(i))
j=1 时:∂∂θ1J(θ0,θ1)=1m∑i=1m((hθ(x(i))−y(i))⋅x(i))
则算法写成:
Repeat {
θ0:=θ0−a1mm∑i=1(hθ(x(i))−y(i))
θ1:=θ1−a1mm∑i=1((hθ(x(i))−y(i))⋅x(i))
}
特征缩放
尝试将所有特征的尺度都尽量缩放到-1到1之间, 最简单的方法是令:xn=xn−μnsn,其中 μn是平均值,sn是标准差。学习速率
梯度下降算法的每次迭代受到学习率的影响,如果学习率a过小,则达到收敛所需的迭代次数会非常高;如果学习率a过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。
通常可以考虑尝试些学习率:
α=0.01,0.03,0.1,0.3,1,3,10
正规方程
正规方程是通过求解下面的方程来找出使得代价函数最小的参数的:∂∂θjJ(θj)=0 。 假设我们的训练集特征矩阵为 X(包含了 x0=1)并且我们的训练集结果为向量 y,则利用正规方程解出向量 θ=(XTX)−1XTy 。
梯度下降与正规方程的比较
梯度下降 | 正规方程 |
---|---|
需要选择学习速率 | 不需要 |
需要多次迭代 | 需要计算(XTX)−1XT如果特征数量n较大则运算代价大,因为矩阵逆的计算时间复杂读为O(n3),通常来说n小于一万时还可以接受 |
适用于各种类型的模型 | 只适用于线性模型,不适合逻辑回归等其他模型 |
总结一下,只要特征变量的数目并不大,标准方程是一个很好的计算参数θ的替代方法。具体地说,只要特征变量数量小于一万,通常使用标准方程法,而不使用梯度下降法。
逻辑回归
逻辑回归(Logistic Regression)一般用在分类问题中。
假设函数
hθ(x)=g(θTX) g(z)=11+e−zX代表特征向量,g代表逻辑函数(Logistic function),常用的逻辑函数为S形函数(Sigmoid function)
判定边界
在逻辑回归中,我们预测:
当hθ(x)>=0.5时,预测 y=1。
当hθ(x)<0.5时,预测 y=0。
根据 S 形函数图像,我们知道当
z=0 时 g(z)=0.5
z>0 时 g(z)>0.5
z<0 时 g(z)<0.5
又 z=θTx,即:
θTx>=0 时,预测 y=1.
θTx<0 时,预测 y=0
接下来看价函数
逻辑回归代价函数
逻辑回归的代价函数为:
J(θ)=1mm∑i=1Cost(hθ(x(i)),y(i)).

这样构建的Cost(hθ(x),y)函数的特点是:当实际的 y=1 且hθ(x)也为 1 时误差为 0,当 y=1 但hθ(x)不为1时误差随着hθ(x)变小而变大;当实际的 y=0 且hθ(x)也为 0 时代价为 0,当y=0 但hθ(x)不为 0时误差随着 hθ(x)的变大而变大。 将构建的 Cost(hθ(x),y)简化如下: Cost(hθ(x),y)=−y×log(hθ(x))−(1−y)×log(1−hθ(x)) 带入代价函数得到:
J(θ)=1mm∑i=1[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))].
即:
J(θ)=−1mm∑i=1[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))].
在得到这样一个代价函数以后,我们便可以用梯度下降算法来求得能使代价函数最小的参数了。算法为:
Repeat { θj:=θj−α∂∂θjJ(θ) (simultaneously update all ) }
求导后得到:
Repeat { θj:=θj−α1mm∑i=1(hθ(x(i))−y(i))x(i)j (simultaneously update all ) }高级优化
共轭梯度法 BFGS (变尺度法)
L-BFGS (限制变尺度法)
线性搜索(line search)
正则化
正则化可以改善或者减少过拟合问题。
...+λ2mn∑j=1θ2j神经网络
当特征他多时,需要神经网络。
标记方法
训练样本数:m
输入信号:x
输出信号:y
神经网络层数:L
每层的neuron个数:S1 - SL
神经网络的分类
二类分类:SL=0,y=0or1
K类分类:SL=k,yi=1(k>2)
代价函数
hθ(x)∈RK反向传播
向前传播的算法是:
反向传播的算法就是先正向传播计算出每一层的激活单元,然后利用训练集的结果与神经网络预测的结果求出最后一层的误差,然后利用该误差运用反向传播计算出直至第二层的所有误差。
在求出了Δ(l)ij之后,我们便可以计算代价函数的偏导数了,计算方法如下: D(l)ij:=1mΔ(l)ij+λΘ(l)ij if;j≠0 D(l)ij:=1mΔ(l)ij if;j=0神经网络的总结
网络结构:第一件要做的事是选择网络结构,即决定选择多少层以及决定每层分别有多少个单元。
第一层的单元数即我们训练集的特征数量。
最后一层的单元数是我们训练集的结果的类的数量。
如果隐藏层数大于1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。
我们真正要决定的是隐藏层的层数和每个中间层的单元数。
训练神经网络:
参数的随机初始化
利用正向传播方法计算所有的hθ(x)
编写计算代价函数 J 的代码
利用反向传播方法计算所有偏导数
利用数值检验方法检验这些偏导数
使用优化算法来最小化代价函数