Menu
CoddyTech

预测数值

本课属于 Coddy Machine Learning 学习旅程的“监督学习”单元。第 11 课,共 58 课。

本章中的模型用于预测数字。学完本章后,模型的预测误差图会揭示它忽略了什么:

模型预测误差与温度的关系图:数据点从 -280 向上弯曲到 +140,再向下弯曲,分布在标记为 0 的虚线两侧,图中标注:模型忽略了一条曲线

从你熟悉的一条直线开始。LinearRegression 从表格 X 中学习这条直线,每个样本占一行,每个特征占一列:

from sklearn.linear_model import LinearRegression

area = np.array([60, 75, 90, 110, 130, 150])  # 房屋面积,单位为 m²
price = np.array([215, 248, 290, 335, 385, 428])  # 单位为千美元
X = area.reshape(-1, 1)  # 6 行,1 列
model = LinearRegression()
model.fit(X, price)
print(np.round(model.coef_, 2), np.round(model.intercept_, 2))
print(np.round(np.polyfit(area, price, 1), 2))

这会打印出两次相同的行:

[2.39] 71.59
[ 2.39 71.59]

六栋房屋以点表示,价格与面积的关系图中,粗橙色的 LinearRegression 直线与黑色虚线 np.polyfit 完全重合:价格 = 2.39 * 面积 + 71.59

coef_ 为每个特征保存一个斜率:每增加 1 m²,价格就增加 2.39 千美元。intercept_ 是直线的起点,即 0 m² 时的值。然后,model.predict([[100]]) 会预测 100 m² 的价格约为 310.85 千美元。

challenge icon

挑战

中等

一家打印店从不公布价格,但你有 10 条过去的订单记录:以美元计的 pages 和 price。程序会读取新订单的页数。

  1. 将页数整理成单列数据,并据此拟合一个 LinearRegression。
  2. 打印每页价格(保留 3 位小数)和设置费,也就是截距(保留 2 位小数)。
  3. 打印新订单的预测价格(保留 2 位小数)。

对于另一家打印店和 120 页:

Per page: 0.095 dollars
Setup fee: 4.1 dollars
120 pages: 15.5 dollars

亲手试试

import numpy as np
from sklearn.linear_model import LinearRegression

# 过去 10 次打印任务:打印的页数和支付的费用,单位为美元
pages = np.array([40, 75, 120, 160, 210, 260, 300, 380, 450, 520])
price = np.array([7.38, 12.6, 17.65, 20.69, 26.63, 32.18, 37.76, 46.4, 55.17, 60.89])
new_pages = int(input())

# 在下方编写你的代码
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

监督学习中的所有课

自己练习: Python 在线编译器