吴恩达Coursera机器学习作业分析二(ex 1-2)

在上次进行了画图之后,这次重点讲一下梯度下降,这个在后面的作业中会反复用到

2.2 梯度下降
梯度下降的目的是得到一个线性回归的估计参数

进行计算之前我们再来回顾一下梯度下降。其实在这里你并不用了解梯度下降的具体原理,现在我们只需要明确梯度下降是一种寻找让代价函数最小的方式。

2.2.1 更新等式
梯度函数是根据代价函数计算出来的,因此我们需要回顾一下代价函数:

这里

线性回归,顾名思义就是通过线性函数来,我们的目标就是通过调整直线的斜率和截距,让误差函数最小,误差函数中的就是估计值减去实际值再平方,为什么平方?是因为如果不平方的话如果估计值小于理论值这个误差就是负数,直接加会减少误差。

我们用梯度下降来逐渐修改值,确定值其实只需要两组数据就够了,因为两点就能确定一条直线。

现在给出梯度下降中的值更新式子:

警告:需要注意的是所有必须同步更新!!!

%% =================== Part 3: Cost and Gradient descent ===================

X = [ones(m, 1), data(:,1)]; % Add a column of ones to x
theta = zeros(2, 1); % initialize fitting parameters 这里定义了两行一列的theta向量,当然都是0

% Some gradient descent settings 梯度下降的设置
iterations = 1500;  %迭代次数 也就是我们要计算1500次参数
alpha = 0.01;       %计算步长,可以看做是一次下降多少的调整

这部分是对梯度下降进行了初始化

首先对数据x增加了一列全1的数字,为什么?因为我们可以看出实际上我们有两个,一个是没有跟数据进行计算的,这样的话我们需要对数据进行补齐,方便我们后面的矩阵运算。

这里回顾一下步长设置对下降的影响:

1)步长越大下降越快

2)步长过大会导致梯度下降震荡无法收敛,可以理解为在最低点之外荡秋千,始终无法收敛

fprintf('\nTesting the cost function ...\n')
% compute and display initial cost
J = computeCost(X, y, theta);
fprintf('With theta = [0 ; 0]\nCost computed = %f\n', J);
fprintf('Expected cost value (approx) 32.07\n');
这里开始就要计算代价函数了,这里给出了预计的一个代价函数值,可以跟你自己计算出来的对比,看是否正确,

这里theta都是0哦

function J = computeCost(X, y, theta)
%COMPUTECOST Compute cost for linear regression
%   J = COMPUTECOST(X, y, theta) computes the cost of using theta as the
%   parameter for linear regression to fit the data points in X and y

% Initialize some useful values
m = length(y); % number of training examples

% You need to return the following variables correctly 
J = 0;

% ====================== YOUR CODE HERE ======================
% Instructions: Compute the cost of a particular choice of theta
%               You should set J to the cost.

J=sum((X*theta-y).^2)/(2*m);

% =========================================================================

end
这里贴出我自己的计算代价函数的值,这里我直接用了矩阵的方式,没有采用循环,事实上矩阵方式往往更简洁,但是需要你时时刻刻把握矩阵的维度

在接下来的作业中最重要的事说三遍! 

维度 维度 维度!

我们从维度来对这个计算进行分析,首先我们最后得到是一个数字,也就是1x1。

X是我们的数据,有m组,显然通过我们补1后,现在的数据矩阵是mx2,然后我们再看里面的平方,是点乘,即每个元素,因为这时我们计算出来的是一个mx2矩阵乘2x1矩阵=mx1的向量,这个正好可以减去mx1的y向量,因为我们m数据自然有m个已经存在的y值,这样一分析维度对应,意义对应,我们的计算肯定是没问题的,最后这个sum是可以把所有元素相加的神奇函数。

Testing the cost function ...
With theta = [0 ; 0]
Cost computed = 32.072734
Expected cost value (approx) 32.07
输出结果可以看到,没有问题,非常正确
--------------------- 

原文:https://blog.csdn.net/cactusff/article/details/79953733 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值