本节学习链接http://ufldl.stanford.edu/tutorial/supervised/LogisticRegression/
逻辑回归,顾名思义,就是只能判断逻辑问题的一种算法,具体来说,就是只能在结果中给出‘0’或者‘1’。所以本质上来说,这是解决分类问题的算法。
具体来说,逻辑回归的步骤和线性回归很像,下面给出假设函数
hθ(x)
:
P(y=1|x)P(y=0|x)=hθ(x)=11+exp(−θ⊤x)≡σ(θ⊤x),=1−P(y=1|x)=1−hθ(x).
可以看到,这里的 hθ(x) 表示的是一种概率,通过判断概率大小来判定结果应该取‘1’或‘0’。
相应的,代价函数 J(θ) 也变成了下面的形式:
J(θ)=−∑i(y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))).
梯度函数和它的向量形式如下:
∂J(θ)∂θj=∑ix(i)j(hθ(x(i))−y(i)).
∇θJ(θ)=∑ix(i)(hθ(x(i))−y(i))
这部分的编程作业是识别 MNIST dataset中的手写体0和1,任务和上次一样,自己写代价函数和梯度函数,优化算法已经给出。
h = 1./(1+(exp(-(X'*theta))));
%h = sigmoid(X'*theta);
f=-y*log2(h)+(1-y)*log2(1-h);
g=X*(h-y');
注释中的sigmoid函数是资料中已经写好的函数,不是MATLAB自带函数,具体作用和上面未注释的式子是一个意思,这部分的代码都是用矩阵运算完成的,所以下一课的矢量化编程不打算写了,以前没有经常使用MATLAB的同学,或是只用来画图的同学(就是我/(ㄒoㄒ)/~~),对于矢量化可以在纸上画一画矩阵理解一下,MATLAB的工作区里也可以看到参数的矩阵的相应形式,相比用for循环,矩阵运算在MATLAB中确实很快。