吴恩达机器学习练习二


机器学习练习二主要与逻辑回归相关。

一. 首先时数据可视化,照着手册做就好。

二. 实现激活函数

逻辑回归主要用于分类,分类结果一般就是0或者1,因此与线性回归的区别就是,针对

需要应用一个激活函数,让他的取值范围落在[0,1]之间

Octave代码实现很简单,就是:

g=1./(1+exp(-z));  %Z可以是向量、矩阵

三. 实现代价函数与梯度计算

 

gz=sigmoid(X*theta);% calc g(z)

J1=y'*log(gz);       %calc J cost function first part ,changeto vector calc

J0=(1-y)'*log(1-gz);%calc J cost function second part, change to vector calc

J=-(J1+J0)/m;

grad=(gz-y)'*X./m;   %calc gradient ,vector calc

grad=grad';

四. theta参数的学习

课程提供了一个比较高效的函数fminunc,用于求解最小化代价函数J(theta)时的参数theta,只要提供我们的代价函数的计算方式,以及梯度公式就好。与线性回归我们自己实现的梯度算法学习算法相比,效率较高。

五. 预测函数的实现

其实就是用学到的theta去计算新的样本X所对应的Y值。

h_theta=sigmoid(X*theta);

p=(h_theta>=0.5);

六. 正则化

代价函数及梯度计算

主要是为了防止过拟合吧。

gz=sigmoid(X*theta);% calc g(z)

J1=y'*log(gz);       %calc J cost function first part ,changeto vector calc

J0=(1-y)'*log(1-gz);%calc J cost function second part, change to vector calc

theta_reg=theta(2:n);

reg=theta_reg'*theta_reg;

J=-(J1+J0)/m+lambda*reg/(2*m);

grad(1)=(gz-y)'*X(:,1)./m;   %calc gradient ,vector calc

grad(2:n)=((gz-y)'*X(:,[2:n])./m)'+lambda/m.*theta(2:n);

不得不说octave拿来做实验确实强大。


猜你喜欢

转载自blog.csdn.net/weixin_38712697/article/details/80551718