https://www.coursera.org/learn/machine-learning/home/week/2
Multivariate Linear Regression
上周学的是单个参数的Linear Regression, 模型中只有一个变量x。Multivariate Linear Regression是,
$h_\theta (x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_3 + \cdots + \theta_n x_n$具体描述:
$\begin{align*}x_j^{(i)} &= \text{value of feature } j \text{ in the }i^{th}\text{ training example} \newline x^{(i)}& = \text{the input (features) of the }i^{th}\text{ training example} \newline m &= \text{the number of training examples} \newline n &= \text{the number of features} \end{align*}$适用Matrix表示就变成,
$\begin{align*}h_\theta(x) =\begin{bmatrix}\theta_0 \hspace{2em} \theta_1 \hspace{2em} ... \hspace{2em} \theta_n\end{bmatrix}\begin{bmatrix}x_0 \newline x_1 \newline \vdots \newline x_n\end{bmatrix}= \theta^T x\end{align*}$其中,
$x_{0}^{(i)} =1 \text{ for } (i\in { 1,\dots, m } )$Gradient Descent for Multiple Variables
对于多参数的Linear Regression模型,求最优参数的算法相应就叫做,Gradient Descent for Multiple Variables。 运用前面的知识,其表示就写为:
$\begin{align*}& \text{repeat until convergence:} \; \lbrace \newline \; & \theta_j := \theta_j - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_j^{(i)} \; & \text{for j := 0...n}\newline \rbrace\end{align*}$Gradient Descent in Practice I - Feature Scaling
一种方式是把模型中的训练数据的范围调整成放大或者缩小为同样大小。这样算法的复杂度好控制。
−1 ≤ x(i) ≤ 1
or
−0.5 ≤ x(i) ≤ 0.5
方法叫做feature scaling 或者 mean normalization:
$x_i := \dfrac{x_i - \mu_i}{s_i}$ $\μ_i$ is the average of all the values for feature (i) and \s_i is the range of values (max - min), or s_i is the standard deviation.Gradient Descent in Practice II - Learning Rate
如何选择最合适的learning rate参数?
Debugging gradient descent: 跑若干遍,如果J(θ)反而变大,那么说明这个参数太大了(步子太大,miss了最优点)
Automatic convergence test:实际情况下,选定两次运行J(θ)比较结果,如果差距小于比如0.001,则说明是在收敛.但是具体情况具体分析。
α is sufficiently small, then J(θ) will decrease on every iteration.
Features and Polynomial Regression
Feature在ML里面指的是我们拿到的数据参数。比如房子的宽度算是一个feature。
有时候,为了fitin 模型,我们可以把参数二合一,比如不用长宽,而是用相乘得到的面积作为一个模型的feature。
Polynomial Regression
这是非liner regression。例如:
- quadratic function
- cubic function
- square root function
需要建立的概念是以上每种模型的大致图形应当符合我们收集的数据。有算法帮助我们选择模型。
使用这些模型的时候feature scaling非常重要,因为平方或者多次方运算后的结果会很大或者很小。
Normal Equation
非常重要的一种直接公式求$\theta$的算法。适用于多参数的liner regression模型。
跟Gradient Descent相比各有利弊。
优点: 不用选择learning rate(靠经验和debug),不用多次interate求最优,直接算出来。
缺点: 计算复杂度随feature n的值飙升,$n^3$ 而Gradient Descent的计算复杂度是 $kn^2$。
一般来说feature个数大于10,000时候需要考虑用Gradient Descent算法求$\theta$。
Normal Equation的隐藏bug
有时候有些数据用这个inv算inverse的时候算法会报错,避免这个问题,在octave中使用 ‘pinv’ 而不是’inv.’
1) 如果feature有重复(比如一个feature的平方尺一个feature是平方米)。
2) 如果m ≤ n,也就是说模型尺寸大于训练数据集。
Octave Tutorial
- Octave定义一个function可以返回多个值 (定义返回值是matrix)
- Octave可以实现通用的function,比如在视频中的例子是简单实现了liner regression的cost function。 这样我们给x和y的maxtrix就可以得到cost function的值。
** Matrix运算符里面.* 代表对于每一行跟后面的乘