Machine Learning | Coursea week3,4,5

逻辑回归

逻辑回归算法实际上就是一种分类算法。只是“回归”这两个字可能会使人产生困惑。

分类

最简单的分类问题是y有两种取值0和1,其中0表示负向类,1表示正向类。我们希望算法输出值永远在0到1之间。

假设表示

我们希望找到某个假设函数,它的性质是预测值在0到1之间。

引入逻辑回归模型,该模型的输出值在0到1之间。逻辑回归模型的假设是: hθ(x)=g(θ^T X),其中g为sigmoid函数,g(z)=1/(1+e^(-z) ), ,函数图象如下如:

用 θ^T X替换z,hθ(x)=1/(1+e^(-θ^T X) )就得到了假设函数: 。

决策边界

当 θ^T X 为0时, hθ(x)的值取0.5;

当θ^T X 大于0时,随着 θ^T X的增大, hθ(x)的值逐渐增大,且接近于1,预测值y为1;

当θ^T X 小于0时,随着 θ^T X的减小,hθ(x) 的值逐渐减小,且接近于0,预测值y为0。

假设我们有一个模型:hθ(x)=g(θ^T X)=〖g([-3;1;1]〗^T [1;x1;x2])=g(-3+x1+x2) ,很显然当样本位于直线x1+x2=3的下方时y的取值为0;反之,y的取值为1。

代价函数

我们用最小化代价函数来拟合逻辑回归模型的参数theta。这既是优化代价函数的过程,又是优化目标函数的过程,同时也是拟合最优theta的过程。

我们通常使用梯度下降算法优化代价函数,这就需要不断的求偏导数。我们找到了一个非常巧妙的cost函数:

整理得


将其带入代价函数J可得代价函数为:

然后我们通过梯度下降算法一步步更新theta就可以最小化代价函数了。

theta的更新如下图:

注意:梯度下降算法之前进行特征值缩放是有必要的;所有的theta要同时更新;这里的参数更新和线性回归的参数更新在形式上一样,但真正的意义却不相同。

逻辑回归的高级优化算法

除了梯度下降算法,我们有时也会选择一些收敛速度更快,内部算法更复杂,不需要人工设置学习率的优化代价函数的算法。如:共轭梯度(congugate gradient),局部优化法,和有限局部内存优化法

下面给给出一个较简单的例子,以便更好的了解如何使用这些库里面的算法。

1、定义代价函数,该函数返回值为J和梯度

2、>>options=optimset('GradObj','on','MaxIter',100);%定义一个options变量,这里可以存放你想要的数据结构。GradObj和on表示设置梯度的目标参数为打开;MaxIter和100表示迭代次数为100

>>initialTheta=zeros(2,1);

>>initialTheta=zeros(2,1);%初始化参数为[0;0]

>>[optTheta,functionVal,exitFlag]=fminunc(@costfunction,initialTheta,options)%调用fminunc函数,其中@...表示指针指向costfunction函数,initialTheta为costfunction的参数;等号前面的为返回值,若exitFlag为1,则表示收敛。

如果变量有n个特征值,那么其costfunction可写成下图的形式:

多分类问题:一对多

下图为三个分类器示例:

假设有n个类别的分类,我们可以将其转换成n个二元分类问题,并训练这n个逻辑回归分类器。训练好的n个分类器的假设函数分别为 h_θ^1 (x),h_θ^2 (x),…h_θ^i (x),…h_θ^n (x),然后输入需要预测类别的新样本x,取概率最大的类别(可信度最高的类别),即让 ,最大的i对应的类别。

过拟合问题

如下图,在线性模型中如果用多项式函数拟合预测值,那么多项式的最高非零项次数越高,对测试样本拟合的效果可能会越好,但是它在新样本中表现很可能会越差。

在分类问题中,同样会遇到我们称之为过拟合的问题。如下图:

我们通常会采取以下方式处理分类的过拟合问题:

1、丢弃一些对预测结果影响较小的特征,这个过程可以人工选择,也可以用模型选择的算法,如(PCA)。

2、正则化:保留所有变量,但是减小参数的大小。

正则化

正则化代价函数

我们可以对次数较高的项设置一点惩罚,如“+1000 ”,这样在theta更新后 的值最终会变得更小(接近于0)。下面为修改后的代价函数的示例:

如上图,显然,我们希望 和 的只能够小一些,这样他们对预测结果的影响就会很小。

如果我们有很多特征并且不知道对哪些特征的惩罚,我们可以对所有特征惩罚,这样就得到一个简单的防止过拟合的假设:

其中,兰布达又称为正则化参数。

正则化线性回归

加入正则化参数后,参数theta的更新也被替换为如下形式:

我们仍可以使用正规方程来直接求解theta,方法如下所示:(完全不知道为什么???)

正则化逻辑回归

正则化逻辑回归的代价函数后,和线性回归的代价函数非常相似。但他们的意义不同,这里的 hθ(x)=1/(1+e^(-θ^T X)),并且这里的 cost(hθ(x),y)=-(ylog(y)  +(1-y)  log⁡(1-y)  )。

进一步整理可得参数theta的更新如下:

如果我们仍想使用高级的优化算法来求解参数,其步骤如下:

需要注意的是 没有必要正则化,并且梯度的下标是从1开始的。




神经网络

引言

非线性假设

神经网络能够有效的解决一些多项式线性回归难以解决的非线性问题

神经元和大脑

神经网络产生的原因是人们希望了解大脑的工作原理并尝试设计出模仿大脑的算法。

神经网络的计算量一般比较大,近年来计算机的运行速度变快为大规模的神经网络的应用提供了支持。

神经网络

模型表示

架构:表示不同神经元之间是如何连接的。

神经网络可以理解为多层逻辑回归的嵌套。神经网络中的theta参数有时会被称为weight权重。

通过上图可以看出,其中隐层和输出层神经元需要进行激活函数处理(需要激活函数处理的一般称之为“功能神经元”),而输入层神经元不需要。前一层神经元的输出作为相邻的后一层神经元的输入,这样逐层向前传导的方式被称为前馈神经网络。

为了将阈值与权重作统一化处理,我们给每个功能神经元增加一个值为1权重为-bias的输入。于是,输入X中增加一个x0,它的权重theta(0)为-bias。设第j层有sj个功能神经元,则j+1层的输入X是(sj)+1维向量。

如:X=〖[x0,x1,x2,x3]〗^T

写成向量的形式为:g(z)=1/(1+e^(-z) )

 y=hθ(x)=g(θ^((2) ) (g(θ^(1)  X)  add a_0^((1)) ))//(注意,当前一层的输出作为后一层的输入时,要给它的扩展一个“所谓的X0”元素。所以,上面的公式不是很严谨)。

其中theta上标1、2分别表示隐层3*4个和输出层的1*4个需要确定的参数theta构成的矩阵。

逻辑运算

用神经网络来计算逻辑运算。简单的与、或、非运算可以用两层的神经网络表示,而复杂的逻辑运算(如: ((x1 and x2) or(not x1 and not x2)))可以用与或非运算的组合形式表示。


当x0,x1,x2的权重分别为-30,20,20时表示与运算;

当x0,x1,x2的权重分别为-30,20,20时表示((not x1) and(not x2))运算;

当x0,x1,x2的权重分别为-30,20,20时表示或运算;

如上图,先分别做与运算和或非运算,再对二者的结果做或运算,就得到了XNOR运算。

多类分类

如上图所示,输入一些特征,然后通过多隐层的层层处理,如果用01表示是否符合某个类别,输出层共有n(类别的个数)个神经元,且只能有一个神经元为1,其他均为0。




Neural Networks: Learning

Cost Function

m表示是样本个数,x、y分别代表样本的输入输出,L表示神经网络的层数, 表示神经网络第i层中神经元的个数,Sl代表输出层神经元个数。

将神经网络的分类定义为两种情况:二类分类和多类分类。

二类分类:Sl=1,y=0 or y=1;

K类分类:Sl=K,  and others=0;

代价函数:根据逻辑回归的代价函数我们可类似的写出多类分类神经网络的代价函数,如下:

我们把预测值与真实值之间的误差定义为:对每个预测k与真实值的误差的累加和。公式的后半部分为归一化项,表示对每一层的所有theta(除了theta(0))的平方和。

Backpropagation Algorithm

正向传播是从输入层开始,前一层的输出作为后一层的输入,逐层向后传播,直至输出层。而反响传播正好与之相反,首先计算输出层的误差,然后在利用后一层的误差来计算前一层的误差,这样逐层向前计算误差,直至神经网络的第二层,因为输入层的输入是样本的X,所以不需要计算误差。

如上图的神经网络,根据向前传播算法,

下面讨论误差逆传播算法。

误差

代价函数的偏导数

当lanbuda=0时,有:

l表示当前计算的是第几层;j是当前层激活单元的下标;i表示下一层中误差单元的下标。

算法表示

如果我们需要归一化处理,并且不再是一个样本而是训练集。训练集可以用一个矩阵表示,整个训练集的误差单元也是矩阵,用 表示这个误差矩阵。第l层,第i个激活单元收到第j个参数影响而产生的误差。

算法表示为:

第一步:用正向传播方法计算每个激活单元,直至最后一层;

第二步:用误差逆传播法计算直至第二层的所有误差。

第三步:用误差和激活单元计算代价函数的偏导数。

代价函数的偏导数为:

提示:

代码实现

在matlab中,欲使用fminuc这样的优化算法求解theta,需要先将矩阵展开成向量,求出最优解后,再将向量重新转换成矩阵。

假设有三个权重矩阵,theta1,theta2,theta3,尺寸分别为10*11,10*11,和1*11;那么实现的代码如下:

第一行代码表示先将三个theta矩阵,展开成一个列向量。

第三行代码表示将列向量的1-110的元素转换成10X11的矩阵,并赋值给theta1。

Backpropagation Intuition

前向传播算法

反向传播算法

代码实现:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值