首页 > 代码库 > Andrew Ng Machine Learning 专题【Linear Regression】
Andrew Ng Machine Learning 专题【Linear Regression】
此文是斯坦福大学,机器学习界 superstar — Andrew Ng 所开设的 Coursera 课程:Machine Learning 的课程笔记。
力求简洁,仅代表本人观点,不足之处希望大家探讨。
课程网址:https://www.coursera.org/learn/machine-learning/home/welcome
Week 3: Logistic Regression & Regularization 笔记:http://blog.csdn.net/ironyoung/article/details/47398843
Week 2:Linear Regression with Multiple Variables
- Multivariate Linear Regression
- Week 1 讨论仅一个特征,即仅有一个未知量
x <script id="MathJax-Element-1" type="math/tex">x</script>影响了目标y <script id="MathJax-Element-2" type="math/tex">y</script>的取值。假设如今有非常多特征?如今我们有
x 1 ,x 2 ...x n <script id="MathJax-Element-3" type="math/tex">x_{1},x_{2}...x_{n}</script>影响了目标y <script id="MathJax-Element-4" type="math/tex">y</script>的取值。 - 此时须要区分的是变量标记规则:
x i <script id="MathJax-Element-5" type="math/tex">x_{i}</script>表示的是第i <script id="MathJax-Element-6" type="math/tex">i</script>个特征x (i) <script id="MathJax-Element-7" type="math/tex">x^{(i)}</script>表示的是第i <script id="MathJax-Element-8" type="math/tex">i</script>个样本,一个样本是由多个特征组成的列向量- 比如:
x (2) =[x (2) 1 ,x (2) 2 ,x (2) 3 ,...,x (2) n ] T <script id="MathJax-Element-9" type="math/tex">x^{(2)}=[x_{1}^{(2)}, x_{2}^{(2)}, x_{3}^{(2)}, ..., x_{n}^{(2)}]^{T}</script> - 综上,我们有
h θ (x)=θ 0 +θ 1 ?x 1 +θ 2 ?x 2 +...+θ n ?x n <script id="MathJax-Element-10" type="math/tex">h_{\theta}(x)={\theta_0} + {\theta_1}*x_{1} + {\theta_2}*x_{2} +...+ {\theta_n}*x_{n}</script>。能够视为。每一个样本都多出一个特征:x 0 =1 <script id="MathJax-Element-11" type="math/tex">x_{0} = 1</script>,这样表示有利于之后的矩阵表示
- Week 1 讨论仅一个特征,即仅有一个未知量
多变量梯度下降法:
样本一共同拥有m个
cost function:J(θ 0 ,θ 1 )=12m ∑ i=1 m (h θ (x (i) )?y (i) ) 2 <script id="MathJax-Element-12" type="math/tex">J({\theta _0},{\theta _1}) = \frac{1}{2m}\sum\limits_{i = 1}^m {{{({h_\theta }({x^{(i)}}) - {y^{(i)}})}^2}} </script>
update:θ j :=θ j ?α1m ∑ i=1 m ((h θ (x (i) )?y (i) )?x (i) j ) <script id="MathJax-Element-13" type="math/tex">{\theta _j}: = {\theta _j} - \alpha \frac{1}{{m}}\sum\limits_{i = 1}^m ({{{({h_\theta }({x^{(i)}}) - {y^{(i)}})}}}*x_j^{(i)}) </script>Feature Scaling(特征缩放)
- 非常easy。就是将每种特征的数据范围限定在同一个数量级。比如
x 1 ∈[0,2000],x 2 ∈[1,5] <script id="MathJax-Element-14" type="math/tex">x_{1}\in[0,2000],x_{2}\in[1,5]</script>,这样会导致迭代次数过多。这时候,假设我们找到一种mapping方式,使得两者属于同一个数量级的范围内,能够有效减少迭代次数 - 注意:无法减少单次的迭代时间。可是却能有效地减少迭代次数
- 事实上方法非常多,这有一种:
x=x?mean(x)max(x)?min(x) <script id="MathJax-Element-15" type="math/tex">x=\frac{x-mean(x)}{max(x)-min(x)}</script>。当中,mean(x) <script id="MathJax-Element-16" type="math/tex">mean(x)</script>表示向量每一个元素的平均值。max(x) <script id="MathJax-Element-17" type="math/tex">max(x)</script>表示向量中最大元素,min(x) <script id="MathJax-Element-18" type="math/tex">min(x)</script>表示向量中最小元素
- 非常easy。就是将每种特征的数据范围限定在同一个数量级。比如
- Learning Rate
- learning rate 是机器学习中的一个不稳定因素,怎样推断选取的 learning rate 是合适的?我们能够看看下面这幅图:
- 假设以迭代次数为横坐标,cost function 结果为纵坐标。绘制的图像是递减的,说明 learning rate 选择的是恰当的。假设碰到下图所显示的三种情况。那就仅仅有一条路:减小 learning rate
- 可是 learning rate 太小相同会导致一个问题:学习过慢。所以,仅仅能靠试:0.001。0.003,0.01,0.03,0.1,0.3……
- learning rate 是机器学习中的一个不稳定因素,怎样推断选取的 learning rate 是合适的?我们能够看看下面这幅图:
- Polynomial Regression(多项式回归。不同于多变量线性回归)
- 有时候。我们须要自己创造一些“特征”,来拟合一些非线性分布情况
- 比如:
h θ (x)=θ 0 +θ 1 ?x 2 +θ 2 ?x √ <script id="MathJax-Element-19" type="math/tex">h_{\theta}(x)={\theta_0} + {\theta_1}*x^2 + {\theta_2}*\sqrt{x}</script>,看上去仅仅有一个特征x <script id="MathJax-Element-20" type="math/tex">x</script>,但我们全然能够理解为x 2 <script id="MathJax-Element-21" type="math/tex">x^2</script>和x √ <script id="MathJax-Element-22" type="math/tex">\sqrt{x}</script>都是单独的新特征 - 以后的课程会详细讲述怎样选择这些特征
- Normal Equation
- 梯度下降法能够用于寻找函数(cost function)的最小值。想一想,初高中的时候我们使用的是什么方法?最小值点的导数为零,然后解方程
- 将导数置为零这样的方法即 Normal Equation。if
θ∈R n+1 ,??θ i J(θ)= set 0 <script id="MathJax-Element-23" type="math/tex">\theta\in\mathbf{R}^{n+1}。\frac{\partial }{{\partial {\theta _i}}}J({\theta})\overset{\text{set}}{=}0\quad</script>for everyi <script id="MathJax-Element-24" type="math/tex">i</script>. - 上文提过,添加一个全1分量
x 0 <script id="MathJax-Element-25" type="math/tex">x_{0}</script>后得到x=[x 0 ,x 1 ,x 2 ,x 3 ,...,x n ] T <script id="MathJax-Element-26" type="math/tex">x=[x_{0}, x_{1}, x_{2}, x_{3}, ..., x_{n}]^{T}</script> - 能够得到:
xθ=y?x T xθ=x T y?θ=(x T x) ?1 x T y <script id="MathJax-Element-27" type="math/tex">x\theta = y \Rrightarrow x^{T}x\theta = x^{T}y \Rrightarrow \theta = (x^{T}x)^{-1}x^{T}y</script> - matlab编程十分简单:
theta=pinv(X ′ ?X)?X ′ ?y; <script id="MathJax-Element-28" type="math/tex">theta = pinv(X‘* X) * X‘ * y;</script> - Normal Equation 有下面优缺点:
- 不须要 learning rate,也就不须要选择。
- 不须要迭代,不须要考虑收敛的问题;
- 当特征非常多的时候。由于涉及求逆操作,会非常慢(注:方阵才有逆矩阵)
- Octave Tutorial
这一部分十分简单。事实上就是MATLAB的用法。建议不论是否刚開始学习的人都去看看,会有收获。
谈到一个问题:假设现有的样本数,小于每一个样本全部的特征数怎么办?去除多余的特征(PCA?)。特征过多,也可能会导致矩阵不可逆的情况(不甚理解)。
下面记录一些认为挺有趣的命令:
- ~=:不等于号
- xor(0, 1):异或操作
- rand(m, n):0~1之间的大小为m*n的随机数矩阵;randn:产生均值为0,方差为1的符合正态分布的随机数(有负数)
- length(A):返回A中行、列中更大值
- A(:):将矩阵A变为列向量形式。不论A是向量还是矩阵
- sum(A,1):每列求和得到一个行向量;sum(A,2):每行求和得到一个列向量
- pinv:伪求逆;inv:求逆
- imagesc(A):帅爆!依据矩阵中每一个值绘制各种颜色的方块
- A.^2 ~= A^2,后者是两个矩阵相乘
- Submitting Programming Assignments
事实上看看视频即可了。主要要注意,submit() 时输入的Token,不是Coursera 的password,而是作业的password,在这里:
编程作业答案:https://github.com/cnauroth/machine-learning-class
Andrew Ng Machine Learning 专题【Linear Regression】