预测数值
本课属于 Coddy Machine Learning 学习旅程的“监督学习”单元。第 11 课,共 58 课。
本章中的模型用于预测数字。学完本章后,模型的预测误差图会揭示它忽略了什么:
从你熟悉的一条直线开始。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]coef_ 为每个特征保存一个斜率:每增加 1 m²,价格就增加 2.39 千美元。intercept_ 是直线的起点,即 0 m² 时的值。然后,model.predict([[100]]) 会预测 100 m² 的价格约为 310.85 千美元。
挑战
中等一家打印店从不公布价格,但你有 10 条过去的订单记录:以美元计的 pages 和 price。程序会读取新订单的页数。
- 将页数整理成单列数据,并据此拟合一个
LinearRegression。 - 打印每页价格(保留 3 位小数)和设置费,也就是截距(保留 2 位小数)。
- 打印新订单的预测价格(保留 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())
# 在下方编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
监督学习中的所有课
自己练习: Python 在线编译器