机器学习与深度学习入门(三)

2017-02-24  本文已影响0人  RicardoZiTseng

第三篇就应用代码进行实战了,加油 \o^o/

首先装载数据,并将数据分别存入X与y中,并将数据可视化:

data=load('ex1data1.txt');
X = data(:,1); y=data(:,2);
figure;
plot(X,y,'rx','MarkerSize',10);

然后对X进行预处理,使其第一列的值都为1

m=size(X,1);
X=[ones(m,1) X];

初始化参数值:

theta=zeros(2,1);

假设我们需要对数据集训练1500次,学习速率设为0.01:

iterations=1500;
alpha=0.01;

编写梯度下降算法:

function [theta,J_history] = gradientDescent(X,y,theta,alpha,iterations)
m=size(X,1);
J_history = zeros(iterations,1);
  for i =1:iterations:
    temp1 = theta(1)-(alpha/m)*sum((X*theta-y).*X(:,1));
    temp2 = theta(2)-(alpha/m)*sum((X*theta-y).*X(:,2));
    theta(1) = temp1;
    theta(2) = temp2;
    J_history(i) = computeCost(X,y,theta);
  end
end

当然我们还需要编写cost function的代码:

function J = computeCost(X,y,theta)
  m = size(X,1);
  J = (X*theta-y)'*(X*theta-y)/(2*m);
end

ok,我们完成上述代码之后,开始对训练集应用梯度下降算法进行训练:

theta = gradientDescent(X,y,theta,alpha,iterations);

我们将计算出来的曲线拟合在图表上:

hold on;
plot(X(:,2),X*theta,'-');

正规化方程
之前提到,如果样本数据值过大的话我们需要对他们进行一些预处理,使他们的值变小,以方便应用梯度下降算法,这里我直接采用正规化方程,来计算他们的拟合曲线。

载入数据

data=load('ex1data2.txt');
X = data(:,1:2);
y = data(:,3);
m = size(X,1);
X = [ones(m,1) X];

编写正规化方程的代码:

theta = pinv(X'*X)*X'*y;

计算一下此时的代价函数值:

 J = (X*theta-y)'*(X*theta-y)/(2*m);

此时其代价值应该在10的负3次方数量级左右。

最后
下一篇教程将开始考虑逻辑回归的问题,公式可能更加复杂,加油~

上一篇 下一篇

猜你喜欢

热点阅读