首页 > 学院 > 开发设计 > 正文

机器学习第二章复习(2)

2019-11-06 08:46:36
字体:
来源:转载
供稿:网友

本文用于复习《Machine Learning》第二章部分内容

内容来自于Andrew Ng的机器学习课程,主要是为了回忆起来方便

第二章后面主要讲解了标准方程也就是Normal Equation和octave的一些应用


Normal Equation 在之前的章节中我们用循环的方式不断寻找Jθ的最低点,来满足代价函数尽可能小,即是说预测值h和真实值y尽可能接近。对于每一个θj(j=0…n),来说都有一个关于它的一元二次方程,也就是说我们针对θj求导,就可以得到使J达到最小值的θj的值。 J(θ)=12m∑i=1m(hθ(x(i))−y(i))2

∂∂θjJ(θ)=...=0( for every j )

假设我们得到4个案例,案例一面积500平米,房间数5,楼层1,房屋年龄40,价格2000万,案例二至四也是同样五个特征,得到如下矩阵。

X=⎛⎝⎜⎜⎜⎜111150010020060523113110405106⎞⎠⎟⎟⎟⎟ y=⎛⎝⎜⎜⎜⎜2000500900300⎞⎠⎟⎟⎟⎟

x0即是第一列都是1,这是常数项x1即是第二列是房屋面积x2即是第三列是房间数x3即是第四列是房屋楼层x4即是第五列是房屋年龄y即是房屋价格

说了这么多,那么Normal Equation到底是什么呢?试想,我们一个特征就要求一次导,100个特征难道要循环求导么?这样计算开销会不会太大了,这里Normal Equation是一个矩阵公式,一次性求完导数,它的推导主要与数学有关,这里就不细究了。 我们的目标就是求使J达到最小值的θj的值,公式如下 θ=(XTX)−1XTy 在程序(octave/matlab)当中该公式表示如下

pinv(X'*X)*X'*yGradient Descent Normal Equation需要选择合适的α 不用α 需要多次循环迭代 不用循环迭代当特征很多的时候很好用 需要计算pinv(X'*X) 特征如果很多会很慢

特别注意:如果矩阵不能取反,则可能有多余特征,或者实例过少特征过多

Octave 关于Octave在网上应该有很多教程或是说它专门的Wiki,当然个人觉得做作业是很好地锻炼方法,这里就不介绍Octave有什么函数要怎么使用了,而且课堂要求也说不希望学生不经过思考就直接获得源码

这里只以课堂中出现的关于计算cost function的代码为例,其实matlab相关的代码量都不大,只要学会基本语法就可以自己编程了。

function J = computeCost(X, y, theta)m = length(y);J = 0;m = size(X,1);hypothesis = X * theta;squaresub = (hypothesis - y).^2;J = 1/(2*m)*sum(squaresub);
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表