Advertisement

吴恩达机器学习Octave代码实现(1)-Linear Regression(1)

阅读量:

Nice work!真的给了很大鼓励!先上图,后码字。

提前说明:本人使用Octave6.3.0版本进行编程。

1.作业提交过程

目标:利用 warmUpExercise.m 生成一个5x5的单位矩阵,并完成提交Coursera上的机器学习课程作业。

(1)在warmUpExercise.m的======= YOUR CODE HERE ======栏下编写代码并保存。

复制代码
    A = eye(5);

(2)完成对submit.m文件的操作以上传作业(旨在练习文件管理)。请在编辑器中选定该文件,请按住Shift键单击保存按钮后执行以下操作:首先将该file保存到工作目录,并打开它以便进一步处理

在Octave/Matlab环境中打开命令窗口后会自动提示用户输入登录邮箱及验证码。通过Coursera平台访问编程作业页面并定位到相应的位置(如上图所示)。单击'生成新的验证码'按钮,在Octave/Matlab中输入注册邮箱及获取到的有效验证码(注意:此验证码仅在半小时内有效)。

回车之后会提交所有的.m文件,如果运行正确会给“Nice work!”作为反馈。

恭喜,成功开始机器学习的第一步!

2. 单变量线性回归

2.1 单变量线性回归说明

以房价预测问题为基础探讨单变量线性回归模型,在这一框架下设定自变量x代表房屋面积(平方英尺表示为feet^2),而因变量y则表示房价(以千美元计算并用price($)标记)

(1)假设x与y满足线性关系,并设房价与房屋面积的关系满足方程

在本研究中,θ被定义为一个关键参数,在后续分析中将通过一系列运算确定其最优取值范围以便使假设函数h最佳地反映了变量x和y之间的关系

(2)定义为**代价函数(Cost function)**如下,在优化过程中通过调整参数θ使代价函数持续减少到最小值时,则可获得局部/全局最优解;最终确定参数θ的最优解。

(3)采用梯度下降算法(Gradient descent)具体而言,在每次迭代中通过更新参数θ使得目标函数J(θ)逐步降低至全局/局部极小点。所有参数需同步更新以确保优化过程的有效性。

2.2 单变量线性回归代价函数的编程实现

在computeCost.m里实现代价函数如下图所示。

代码如下:

复制代码
 H = X*theta;

    
 temp0 = H-y;
    
 temp1 = sum(temp0.^2);
    
 J = temp1/(2*m);

2.2.1涉及知识点:

(1).^2 的意义

temp0是一个n维列向量,.^2表示对temp0中的每个元素进行乘方运算

(2)矩阵/向量求和函数

求和函数sum():对行向量/列向量a中的元素求和,使用sum(a)

计算矩阵A中全部元素的总合可以通过调用函数sum\left(A\right:来实现;为了获得每一列的合计值,则应采用sum\left(A,\text{1}\right)的方式;而若需获取各行的具体总值,则应当运用sum\left(A,\text{2}\right)这一指令;仅当调用sum函数时,默认会对各列数据进行累加。

2.3 单变量线性回归梯度下降算法实现(gradientDescent.m)

在gradientDescent.m中的Function部分具体实施了梯度下降算法,在具体说明中指出j取值为0和1;此外,在ex1.m文件中已经对变量X进行了初始化操作:增加了并置于其第一列。

框架已全面搭建完成;在每一轮循环周期中进行操作;具体而言,在每次循环中进行以下操作:计算并更新J值;按照上述公式进行操作。

代码如下:

复制代码
     temp = (X*theta-y);

    
     theta(1) = theta(1) - alpha*(1/m)*sum(temp);
    
     theta(2) = theta(2) - alpha*(1/m)*sum(temp.*X(:,2));

2.3.1 涉及的知识点:

(1)矩阵乘,X是m×2维矩阵,theta是2×1维矩阵(列向量),用Xtheta才能得到m1列向量h(x)

(2)对向量所有数值求和,上节已写不赘述。

2.3.2 出现的问题:

(1)直接运行gradientDescent.m文件时,出现报错。

复制代码
 error: 'y' undefined near line 7, column 7

    
 error: called from

尝试运行该函数多次后仍遇到错误;无法确定具体原因;注意到在函数定义中未对变量y进行声明,在函数体内未对变量y进行声明;单独运行该函数文件时会抛出错误提示;但这种情况不会影响主程序文件(如ex1.m)调用该函数时的行为

写在后面 ,实践课堂上学习掌握的算法有助于加深对所学知识的理解。掌握与实现是两个不同的概念。每一次收到Nice work!都给我带来了很大的动力。我也期待看到你在学习过程中不断进步!

(注):作为机器学习初学者的第一篇文章,在写作过程中可能会存在一些问题或表述不够准确的情况,请大家能够给予宝贵意见和建议!

全部评论 (0)

还没有任何评论哟~