注意:
刚开始学习这个内容时请不要纠结于使用到底用哪一个编程语言的问题,不论你是否擅长于C++、JAVA、Python或者C#等等。如果有条件(有钱)的话用Matlab,没钱的童鞋可以和我一样选择Octave、R语言这类免费开源的专业的数值计算语言。
这个系列中提到的算法,假如用JAVA(使用数值计算的包)实现的话需要100行代码,那么用Matlab或者Octave可能只需要1行,没错就是一行!!!这个建议目的是让我们把大部分的精力花在对算法的理解上,而不是花在码代码上。
安装Octave请参考:http://www.gnu.org/software/octave/
Octave文档:https://www.gnu.org/software/octave/doc/interpreter/
建议有条件的童鞋去Coursera上学习,不仅免费还精心准备了很多联系帮助理解,以下是链接(看视频需要翻墙):
https://www.coursera.org/learn/machine-learning/
相关概念及符号定义
写成向量形势:
梯度下降在多元线性回归(Multivariate Linear Regression)中的应用
梯度下降算法的形势与前一章所说的没有多大的区别,我们所要做的仅是直接拿来不做任何修改的使用。
重复如下动作至收敛:{
前文提到过另一种更加概括的方式:
特征缩放
当涉及到多个特征变量的时候,各个特征变量的变化范围不尽相同,比如
可以通过将所有特征变量的取值范围缩放到同样的级数,从而加快整体的收敛速度。实现这个目的有两种技术(方法),分别是特征缩放(Feature Scaling)以及均值归一化(Mean Normalization)。
为了说明更加简练,约定:
特征缩放
公式:
经特征缩放后,所有的特征变量的取值范围都在区间
均值归一化
公式:
经特征缩放后,所有的特征变量的取值范围都在区间
调试:
J(θ⃗ )
与
α
的关系
以迭代次数(No. of Iteration)为
当
当
总之,当
另一种方法:Normal Equation
找了半天没找到统一的标准的翻译用“正规方程”也不是很确定,后文中就暂且用“NE”表示。
NE法相对于梯度下降算法来说,其优点是不需要确定
梯度下降算法与NE法的对比如下表:
梯度下降算法 | Normal Equation |
---|---|
需要确定
|
不需要确定
|
需要多次迭代 | 不迭代 |
|
|
|
|
计算向量
公式推导及注意:
前文已经提过,为了方便计算,我们令
x(i)0=1 ,所以矩阵X 的大小应为m×(n+1) 。Xθ⃗ =y⃗ ,参考“相关概念及符号定义”部分。等式两边同乘
XT :
XTXθ⃗ =XTy⃗ 若
XTX 可逆,则等式两边同乘(XTX)−1 :
θ⃗ =(XTX)−1XTy⃗
重要!!!尤其要注意,只有当