机器学习(二)线性回归

分类: 机器学习

简述

线性回归,顾名思义,是用一条直线来拟合数据的分布情况。当然啦,前面说过回归方法用于解决连续性的问题,直线所拟合的也必然是一个连续函数。

下面从单特征变量入手,再推广到多特征变量,具体说明一下回归函数及其代价函数的定义和解释。

单特征变量

回归函数

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

代价函数

假设有m个训练数据样本,则为

$$ J(\theta_0, \theta_1) = \dfrac {1}{2m} \displaystyle \sum _{i=1}^m \left ( \hat{y}_{i}- y_{i} \right)^2 = \dfrac {1}{2m} \displaystyle \sum _{i=1}^m \left (h_\theta (x_{i}) - y_{i} \right)^2 $$

很明显,就是某一自变量情况下,算出回归函数与实际值的距离平方的和,然后取平均值的一半。也就是方差的一半。

之所以要取一半,是为后面求解参数$\theta$更加方便(涉及求导,后面的2和这个1/2正好相消)。

多特征变量

为了便于表示多特征变量时的各个参数和特征变量,引入以下标记:

$$ \begin{align*} x_j^{(i)} &= \text{特征 } j \text{ 的值(在 }i^{th}\text{ 个训练数据中)} \newline x^{(i)}& = \text{一条数据中所有特征的值组成的列向量(在 }i^{th}\text{ 个训练数据中)} \newline m &= \text{训练数据样本大小(个数)} \newline n &= \left| x^{(i)} \right| ; \text{(特征数量)} \end{align*} $$

回归函数

$$h_\theta (x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_3 + \cdots + \theta_n x_n$$

矩阵形式为

$$ \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*} $$

代价函数

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

乍一看和单特征变量的形式几乎一样,但请回顾之前引入的标记,这里的$x^{(i)}$是一个列向量,可不只是一个数。

向量化形式为

$$ J(\theta) = \dfrac {1}{2m} (X\theta - \vec{y})^{T} (X\theta - \vec{y}) $$

其中$\vec{y}$是由所有的y值组成的向量。

Octave/MATLAB 代码实现

function J = computeCost(X, y, theta)
	m = length(y); 
	T = (X * theta - y);
	J = 1 / (2 * m) * T' * T;
end

总结

回归函数就是用于拟合训练数据样本的,训练得出的函数。显然训练的目的就是获得各个参数$\theta_i$,达到最佳拟合。而代价函数则是判断拟合好坏的标准。

因此,目的就很简单了:

通过一定的算法,借助训练样本,获取到各个参数,得到回归函数,并使其代价函数最小。

那么,是什么算法呢?不要急,下一篇就有了!