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

第三篇就应用代码进行实战了,加油 \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次方数量级左右。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容