上篇文章中,我们根据BMI来预测寿命,BMI扮演一个“预测者”的角色,统计学中一般把它叫做“自变量(independent variable)”。“预测者”是一个(用于预测其他变量的)变量,那些被预测的那些值,一般被称为“因变量(dependent variables)” ,那么,上个例子中,要预测的寿命就是因变量(dependent variable)。
那如果说我们还有每个人的心率数据,是否能够使用 BMI 和心率两组数据来预测寿命呢?当然可以!我们可以使用“多元线性回归(multiple linear regression)”来实现。
如果你要预测的结果依赖多个变量,你可以建立一个更复杂的模型,这时使用多个自变量可以得到更好的预测结果。
当只有一个自变量的时候,线性回归模型可以用一条直线来表示,当你添加多个自变量的时候,相当于空间中添加了更多的维度。
当只有一个自变量的时候,直线对应的方程式是:y=mx+b。对于的图形也许是这样的:
增加一个自变量,对应的方程式是:y= m1x1 + m2x2 + b
这个需要一个三维图形来表示这个公式,这个时候,这个线性回归模型就是一个平面:
你也可以使用更多的自变量,实际上用的越多效果越好!如果你使用了n个自变量,那么对应模型的方程可以这样表示:y = m1x1 + m2x2 + m3x3 + … + mnxn + b
使用更多的自变量,相应的模型可视化也变得更难。但幸运的是,所有的线性回归都是一样的,可以直接用方程式推导出来。我们还是使用同样的方式来进行预测。
多元线性回归实践
在这次实践中,我们会用到 波斯顿房价的数据(https://archive.ics.uci.edu/ml/datasets/Housing),
这份数据已经包含在scikit-learn的数据集中,包含506所房屋的13项指标,我们使用这13项指标来建立模型,用于预测房子的价格。
完整代码如下:
# 导入 LinearRegression 类 和 数据集
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
# 加载数据集
boston_data = load_boston()
x = boston_data['data']
y = boston_data['target']
# 建立一个回归模型,并赋值给 model
model = LinearRegression()
# fit 函数根据数据调整模型
model.fit(x, y)
# 使用模型做出预测
sample_house = [[2.29690000e-01, 0.00000000e+00, 1.05900000e+01, 0.00000000e+00, 4.89000000e-01,
6.32600000e+00, 5.25000000e+01, 4.35490000e+00, 4.00000000e+00, 2.77000000e+02,
1.86000000e+01, 3.94870000e+02, 1.09700000e+01]]
# 使用 sample_house 的指标进行预测
prediction = model.predict(sample_house)
print(prediction)