机器学习练习二主要与逻辑回归相关。
一. 首先时数据可视化,照着手册做就好。
二. 实现激活函数
逻辑回归主要用于分类,分类结果一般就是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拿来做实验确实强大。