来源:原始 Jupyter Notebook。内容已转换为网页阅读格式;下载原文件。
一元线性回归
假设有下面的数据,表示某地区房屋面积和售价的关系:
| 房屋面积(平米) | 售价(万) |
|---|---|
| 39.93 | 199 |
| 42.05 | 290 |
| 43.18 | 298 |
| 44.68 | 310 |
| 49.87 | 399 |
| 53.57 | 420 |
将房屋面积作为横坐标(自变量),售价作为纵坐标(因变量),在二维坐标系中,可以画出一条类似直线的散点图:
import numpy as np
import matplotlib.pyplot as plt
plt.xlim(30, 60)
plt.ylim(100, 600)
X = np.array([[39.93,199],[42.05,290],[43.18,298],[44.68,310],[49.87,399],[53.57,420]])
plt.scatter(X[:,0], X[:,1])
plt.show()
运行结果

如何找到一条直线,能最大程度的拟合这些散点数据,这就是 线性回归,由于这里只有一个自变量,所以叫做 一元线性回归。
import numpy as np
import matplotlib.pyplot as plt
plt.xlim(30, 60)
plt.ylim(100, 600)
X = np.array([[39.93,199],[42.05,290],[43.18,298],[44.68,310],[49.87,399],[53.57,420]])
plt.scatter(X[:,0], X[:,1])
x = np.linspace(30, 60, 100)
y = 15*x-360
plt.plot(x, y)
plt.show()
运行结果

在 Andrew Ng 的机器学习讲义中也举了个类似的例子,他使用的是美国俄亥俄州 Portland Oregon 城市的房屋价格,显得更真实一点。都是用房屋面积作为自变量,房屋价格作为因变量。我们知道一元线性函数一般表示为:
一元线性回归就是确定这里的参数 a 和 b,如果刚好有两个点,就可以确定一个二元方程组:
我们根据线性代数的知识,有很多种方法可以解这个方程组,比如矩阵消元法,克莱姆法则,逆矩阵及增广矩阵法等等。但是对于大多数给定的数据集,线性方程组有唯一解的概率比较小,多数都是解不存在的超定方程组。对于这种问题,在计算数学中通常将参数求解问题退化为求最小误差问题,找到一个最接近的解,这叫做松弛求解。