机器学习intro

监督学习(Supervised Learning)

  • 已知数据集及其正确的输出结果, 得出输入和输出之间的关系
  • 一般分为回归(regression)和分类(classification)问题
  • 在回归问题中,一般预测的结果为连续的,也就是说函数是连续性函数
  • 在分类问题中,预测结果一般为离散性的,也就是说把输入变量分成有限的几个分类

单变量线性回归

假设函数(Hypothesis Function)

$$\hat{y}=h_\theta(x)=\theta_0+\theta_1x$$

找出一条最佳的线性方程,让数据集到这个方程的代价最小

代价方程(Cost Function)

$$J(\theta_0,\theta_1)={1\over2m}\sum_{i=1}^m(h_\theta(x_i)−y_i)^2$$

即为均方误差Mean squared error的二分之一, 取二分之一是为了方便梯度下降的计算

梯度下降(Gradient Descent)

用$\theta_0$和$\theta_1$分别作为x和y轴, $J(\theta_0,\theta_1)$作为z轴,
求满足$J(\theta_0,\theta_1)$最小值时的$\theta_0$和$\theta_1$

  1. 随机选取某个$\theta_0$和$\theta_1$
  2. 不断改进$\theta_0$和$\theta_1$的值,使$J(\theta_0,\theta_1)$不断减小,直到达到最小
    $$ \theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j} J(\theta_0, \theta_1)$$
    也就是说让代价方程$J(\theta_0,\theta_1)$分别取$\theta_0$和$\theta_1$的偏导数, 沿着偏导数的方向,以$\alpha$的速率减小
    $$
    \begin{aligned}
    \theta_0 & := \theta_0 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m}(h_\theta(x_{i}) - y_{i}) \newline
    \theta_1 & := \theta_1 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m}(h_\theta(x_{i}) - y_{i}) x_{i})
    \end{aligned}
    $$
  3. 梯度下降算法取的是局部最小值,而不是全局最小
  4. 当$\alpha$太大时,会错过极小值,并在极小值左右来回震荡的现象无法收敛,当太小时需要更多迭代步骤,也就是更长的时间来计算
    可以打印迭代次数和代价方程的关系曲线, 如果太慢,可以按3倍增加$\alpha$
  5. 每一步迭代需要所有的样本数据,但是适用于数据量大的场景

多变量线性回归

假设方程

$$
\begin{aligned}
&h_\theta(x) := \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_3 + \cdots + \theta_n x_n \newline
&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\newline
&x_0 := 1
\end{aligned}
$$

代价方程

$$J(\theta) = \dfrac {1}{2m} \displaystyle \sum_{i=1}^m \left (h_\theta (x^{(i)}) - y^{(i)} \right)^2$$

梯度下降

$$
\begin{aligned}
\theta_j & := \theta_j - \alpha \frac{1}{m} \sum\limits_{i=1}^{m}(h_\theta(x^{(i)}) - y^{(i)})\cdot x_j^{(i)}\newline
&\text{for j := 0..n}
\end{aligned}
$$

$$
\begin{aligned}
& \theta_0 := \theta_0 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_0^{(i)}\newline
& \theta_1 := \theta_1 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_1^{(i)} \newline
& \theta_2 := \theta_2 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_2^{(i)}\newline
& \cdots
\end{aligned}$$

梯度下降矩阵

$$ \large \theta := \theta - \alpha \nabla J(\theta) $$
$$\large \nabla J(\theta) = \begin{bmatrix} \frac{\partial J(\theta)}{\partial \theta_0} \newline \frac{\partial J(\theta)}{\partial \theta_1} \newline \vdots \newline \frac{\partial J(\theta)}{\partial \theta_n} \end{bmatrix} $$

$$
\frac{\partial J(\theta)}{\partial \theta_j} = \frac{1}{m} \sum\limits_{i=1}^{m} x_j^{(i)} \cdot \left(h_\theta(x^{(i)}) - y^{(i)} \right) $$

$$\frac{\partial J(\theta)}{\partial \theta_j} = \frac1m \vec{x_j}^{T} (X\theta - \vec{y})$$
$$\nabla J(\theta) = \frac 1m X^{T} (X\theta - \vec{y})$$
Finally, the matrix notation (vectorized) of the Gradient Descent rule is:
$$ \large \theta := \theta - \frac{\alpha}{m} X^{T} (X\theta - \vec{y}) $$

特征规范化 (feature scaling)

如果让不同特征的取值在相近的范围内, 这样梯度下降法就能更快地收敛

  1. 特征缩放(feature scaling)可以让输入值除以它的范围(最大减去最小)
  2. 均值归一化(mean normalization)可以用输入减去平均值,再除以范围

正规方程(normal equations)

正规方程可以避免梯度下降的迭代,直接计算出最优值:让代价函数$J(\theta)$对各个特征值的偏导数等于0
$$\nabla J(\theta) = \frac 1m X^{T} (X\theta - \vec{y}) = \large 0$$
$$X^TX\theta=X^TY$$
If matrix $X^TX$ is invertible, then
$$ \theta = (X^T X)^{-1}X^T y $$
但是当特征数量n很大时,$(X^T X)$是个三次方的复杂度,计算量很大,因此一般当n大于10000的时候,就使用梯度下降算法

多项式回归(Polynomial Regression)

比如对于面积-房价模型, 对已有的数据集可能用二次函数拟合可能会有更少的代价,但是二次函数拐点后会减小,因此用三次函数或者平方根函数来拟合可能更实际。
因为多次方函数可能范围差别很大,因此更要注意使用特征缩放

无监督学习(Unsupervised Learning)

在监督学习中,每个样本都有正确的输出结果;而无监督学习中,只有数据集,样本没有所谓的正确结果,需要你找出数据中蕴含的类型结构 比如聚类(Clustering)问题: 新闻的自动分类, 客户划分到细分市场,
*比如鸡尾酒宴问题Cocktail Party Algorithm: 从混杂的信息中,分离单一信息