面积价格5080w6085w7069w8090w90105w100108w110110w120115w
现在想根据这些已有的数据预测一下95平米的房子应该多少钱。
我们假设房屋价格是 y ,房屋面积是 x ,价格和房屋面积存在某种关系 w, 用数学的方式可以表示成

/(/hat{y}(w, x) = w x/)
其中 x 是房屋面积,/(/hat{y}/) 是房屋价格, w 是 x 的系数,你可以理解成房屋单价。 我们把这些数据放到坐标系中,横轴是房屋面积,纵轴是房屋价格。如下图:
这个函数放到坐标系中就是一条通过坐标原点的直线,取不同的x时,得到不同的直线,图中蓝色线。
用已有的数据点去找出一条适合的蓝色线,然后用这条线 /(/hat{y}(w, x) = w x/) 去预测未知面积的房屋价格。
但是,我们发现直线 /(/hat{y}(w, x) = w x/) 的 w 取何值,得到的直线都不能很好的拟合实际的价格走向, 用这样的直线预测的结果偏差很大。
根据我们高中的数学几何知识,我们可以给函数 /(/hat{y}(w, x) = w x/) 加一个截距,变成 /(/hat{y}(w, x) = w_0 + w_1 x/) 。 加了截距的函数就能更好的去拟合我们的价格走势。
现在我们已经找到这样一条直线 /(/hat{y}(w, x) = w_0 + w_1 x/) 可以很好的去预测未知面积的房屋价格了。
下一步就是我们如何根据已有的数据(x 和 y的值), 算出这个方程中 w0 和 w1 的值, 当我们算出来 w0 和 w1 后,我们就可以把未知的x点(房屋面积) 代入这个方程,然后预测出其价格(其实就是算出y值)。
根据我们的高中那点浅薄的数学知识,要想算 w0 和 w1 的值,我们会用已知的数据列一个方程组,然后求解方程组:
/(80 = w_0 + 50 w_1/)
/(85 = w_0 + 60 w_1/)
/(69 = w_0 + 70 w_1/)
/(90 = w_0 + 80 w_1/)
(这里省略n多行)
可是,我们发现这个方程组是无解的,因为不存在任何一条直线能穿过所有点的。
so,退而求其次,我们找一条尽量穿过多的点、在所有点中心通过、最大可能拟合现有数据点的趋势,就像上图中绿色的那条线。
可是我这高中毕业的完全不知道怎么求出这条直线啊? 没关系,我们用计算机帮我们找,计算机求解这条直线的过程就是 机器学习 , 当然计算机也不是天生就会的,其也是使用了一些高大上的数学方法去算的,这个后面我们再讲。
注解
什么是机器学习? 机器学习就是由一些计算机算法帮我找出预测方程的系数w的值,然后再利用这个方程去计算未知的数据特征(x值)所对应的结果(y值)。
注解
所谓的学习,就是利用现有数据(术语:训练数据)找出合适的 W ; 所谓的预测,就是用学习阶段得到的 W ,去计算未知数据(术语:预测数据)的对应的值。
好了,到这里,我们利用 计算机 帮我找出了这样一条直线(实际是 W 的值), 我们把未知面积x的值代入方程 /(/hat{y}(w, x) = w_0 + w_1 x/) 就得到了预测的值。
多维特征¶后来我们发现结果还是不太理想,因为影响房屋价格的不仅仅是面积,还可能有`房屋朝向` 、楼层 、小区地理位置 等等,很多其他的因素。 我们这个方程只考虑了一个因素(也就是只有一个特征),预测的并不准确,那我们怎么办呢?
注解
这里的x,数学上称作 因变量,数据上称作 特征,都是一回事。
上面我们是把 房屋面积 这个因素(特征) 看作坐标轴中的一个维度,当多个特征的时候, 我们增加坐标系的维度就可以了,每一个特征我们当作一个维度(轴)来处理,这样对于多维特征的数据,我们的方程就变成:
/[/hat{y}(w, x) = w_0 + w_1 x_1 + ... + w_p x_p/]
注解
回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。 如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。
Ok, 这个东东就是我们所说的线性模型!
!
!
接上文,我们知道了线性模型的方程,目标值y是输入变量x的线性组合,本文继续讲这个线性方程式如何求解的。
/(x = (x_1,...,x_p)/) 是因变量,也就是我们样本数据的特征;
/(w = (w_1,...,w_p)/) 是x的系数,也就是我们要通过训练得到的值;
/(/hat{y}/) 是样本的预测值。
/[/hat{y}(w, x) = w_0 + w_1 x_1 + ... + w_p x_p/]
上面公式中 /(w_0/) 从几何上讲就是我们所说的截距,但是在用线性代数求解时不是很方便,所以我们稍微变化一下。 我们把 /(w_0/) 看成是 /(w_0 x 1/) , 这个乘数 1 并不会影响方程本身的结果, 进一步我们把这个 1 也看做是样本数据的一个特征(维度)并标记为 /(x_0/) , 相当于我们人为地给样本数据增加了一维特征,并且所有样本的这维特征值都是常数 1 ,这样上述一边线性方程就可以改写成:
/[/hat{y}(w, x) = w_0 x_0 + w_1 x_1 + ... + w_p x_p/]
2.1.3. 目标函数 - 最小二乘法(Normal Equation | Ordinary Least Square,OLS)¶
我们的目标就是要根据已有的训练样本数据求出w的值,然后对于预测数据,通过上述函数去计算 /(/hat{y}/) 的值,也就是模型预估的值。
这其实就是一个求解不定方程组的问题,已知一些样本数据(知道x和y的值),如何求里面的未知参数(w),给出一个最优解。
我们知道对于这样的一个方程组基本是无法求解的。因此,需要退一步,将参数求解问题,转化为求最小误差问题,求出一个最接近的解,这就是一个松弛求解。
注解
数据点并没有真的落在一条直线上,所以不存在一条直线经过所有点。所以我们的问题转换为求解一条直线,使得每个数据点到这条直线的距离和最短。
假设对于预测样本数据,我们模型预测的值为 /(/hat{y}/) ,而样本的真实值是y, /(/hat{y} - y/) 就是我们模型预测产生的误差。
那么如果这个误差越小,就说名我们预测的值 /(/hat{y}/) 越接近真实值y,也就是说我们预测的越准确。 所以求解不定方程组的问题可以转换成一个最优化问题。
选择最佳拟合曲线的标准可以确定为:使总的拟合误差(即总残差)达到最小。有以下三个标准可以选择:
用“残差和最小”确定直线位置是一个途径。但很快发现计算“残差和”存在正负相互抵消的问题。/[/sum_{p=0}^{n}{( /hat{y}_p - y_p)}/]用“残差绝对值和最小”确定直线位置也是一个途径。但绝对值的计算比较麻烦。/[/sum_{p=0}^{n}{(| /hat{y}_p - y_p |)}/]
/(/hat{y}/) 和 y 分别看成一个向量,要表示两者的差异,我们可以用两个向量的距离表示,用我们熟知的欧式距离表示为:
/[/sqrt{/sum_{p=0}^{n}{( /hat{y}_p - y_p)}^2}/]
由于计算 根号 比较麻烦,我们加个平方以抵消根号操作 /({(/sqrt{/sum_{p=0}^{n}{( /hat{y}_p - y_p)}^2})}^2/)
欧式距离个计算公式其实就是线性代数中范数,我们用L-2范数表述上述欧式距离,简化公式:
/[{|| /hat{y} - y||_2}^2/]
注解
什么是范数?
可以简单理解成范数就是一个向量的 长度 。一个向量X的各阶范数为:
1-范数: /(||x||_1 := /sum_{i=0}^{n}{|x_i|}/)
2-范数: /(||x||_2 :=(/sum_{i=0}^{n}{|x_i|^2})^{1/2}/) 亦可写成 /(||x||_2 :=/sqrt{/sum_{i=0}^{n}{|x_i|^2}}/)
p-范数: /(||x||_2 :=(/sum_{i=0}^{n}{|x_i|^p})^{1/p}/)
范数介绍 :浅谈L0,L1,L2范数及其应用
由于 /(/hat{y}=w_0 + w_1 x_1 + ... + w_p x_p = wx/) ,上述公式我们改成:
/[{|| x w - y||_2}^2/]
我们的最终目的是 求得当预测值损失最小时W的值 ,所以最终我们的公式为:
/[/underset{w}{min/,} {|| x w - y||_2}^2/]
我们把这个函数称为 损失函数(cost function| loss function | error function) 。
对于该模型 /(/hat{y}(w, x)/) 的所有样本的损失平均值成为“经验风险”(empirical risk)或”经验损失”(empirical loss)。
/[/underset{w}{min/,} { /frac{1}{2p} }{|| x w - y||_2}^2/]
注解
公式中加入 /(/frac{1}{p}/) 代表求平均值,再加入 /(/frac{1}{2}/) 主要是为了后续求解的时候抵消掉2次幂偏导数系数2, 公式整体乘以 /(/frac{1}{2}/) 对其求极值问题无影响。 习惯上一般会去掉目标函数中的常数项 /(/frac{1}{p}/) ,同时为了后面推导的简洁性会加上一个 /(/frac{1}{2}/)
很显然,经验风险最小化(empirical risk minimization,ERM)就是求解最优模型的原则。这就是损失函数的来源。
以“残差平方和最小”确定直线位置的方法就是最小二乘法。 用最小二乘法除了计算比较方便外,得到的估计量还具有优良特性, 这种方法对异常值非常敏感。
最常用的是普通最小二乘法( Ordinary Least Square,OLS): 所选择的回归模型应该使所有观察值的残差平方和达到最小, 即采用平方损失函数。
注解
最小二乘法要求X是列满秩的。 然而,对于普通最小二乘问题,其系数估计依赖模型各项相互独立。 当各项是相关的,设计矩阵(Design Matrix) x 的各列近似线性相关, 那么,设计矩阵会趋向于奇异矩阵,这会导致最小二乘估计对于随机误差非常敏感,会产生很大的方差。 这种 多重共线性(multicollinearity) 的情况可能真的会出现,比如未经实验设计收集的数据.
接下来,就是求解这个函数的方法,有 直接公式求解 梯度下降法 。
求解方法 - 直接公式求解¶求偏导数,然后令偏导数为零,直接求解。
想了解具体的求解过程,需要先回顾以下内容:
线性方程组 最小二乘法
/[/underset{w}{min/,} { /frac{1}{2p} }{|| x w - y||_2}^2/]
这个方程的意思是:当 /({ /frac{1}{2p} }{|| x w - y||_2}^2/) 最小时 w 的值。 其中 x 和 y 是已知数据(训练样本数据),w 是求解的未知数。
这个方程是一个二次方程,我们知道一次方程不存在极值的,而二次方程式一定存在极值的,所以 w 一定是有唯一解的。
极值点的导数是0,所以求解方法就是,求出 /({ /frac{1}{2p} }{|| x w - y||_2}^2/) 的导数(这里 /(/hat{w}/) 是多元,所以我们是偏导数),然后令其导数为0。
二次方程的偏导数是一次方程,所以最后实际上我们又得到一个关于未知数 /(/hat{w}=(w_0,w_1, ... , w_p )/) 的一个多元一次线性方程组。
/[w_0 a_{01} + w_1 a_{11} + ... + w_p a_{p1} = b_1/]
/[w_0 a_{02} + w_1 a_{12} + ... + w_p a_{p2} = b_2/]
/[w_0 a_{03} + w_1 a_{13} + ... + w_p a_{p3} = b_3/]
/[w_0 a_{0n} + w_1 a_{1n} + ... + w_p a_{pn} = b_n/]
详细推到过程这个省略
总之,最后w的解析解可以表示成:
/[/hat{w} = (X^T X)^{-1} X^T y/]
线性回归到这里就训练完成了,对每一个样本点的预测值是 /(f(x_i)=/hat{y_i}=/hat{w}^T x_i/) 所以:
/[/hat{y}=X /hat{w}=X(X^T X)^{−1} X^T y/]
接下来看一下我们寻找到的预测值的一个几何解释:
从上面的解析解 /(/hat{w}=(X^T X)^{−1}X^T y/) 可以得到 /(X^T(/hat{y}−y)=0/) (垂直的向量相乘=0), 因此实际上 /(/hat{y}/) 是y在平面X(由列向量x1和x2张成,假设只有两维)上的投影。
2.1.5. 线性模型的缺点¶
线性模型的前提是你的特征和结果是存在近似线性关系的情况下,预测才会准确,否则是非常不可靠的。
注解
机器学习模型无非就是根据已有数据,去预测未知数据的一个 可能的值 ,仅仅是一个估计而已。
看一些示例: 下图是二维空间中,一维自变量(特征),一维因变量(结果)),因变量和自变量 存在近似线性关系,适用 线性模型进行预测。
下图是二维空间中,一维自变量(特征),一维因变量(结果)),因变量和自变量 不存在 近似线性关系,不适用 线性模型进行预测。
下图是三维空间中,二维自变量(特征),一维因变量(结果)),因变量和自变量 存在 近似线性关系,适用 线性模型进行预测。
下图是三维空间中,二维自变量(特征),一维因变量(结果)),因变量和自变量 不存在 近似线性关系,不适用 线性模型进行预测。