Menu
CoddyTech

多个特征

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

房价不只取决于面积:步行到车站的距离远,会让房价降低。模型从这两方面学习,并画出平行线:

图中有 10 栋房屋,横轴为面积,纵轴为房价:靠近车站的房屋用蓝色圆点表示,较远的房屋用橙色方块表示。模型画出两条平行线,分别表示步行 5 分钟和 25 分钟的情况;在任何面积下,步行 25 分钟对应的线都低 10.2 万美元

在代码中,X 会获取两列,而 coef_ 会为每个特征提供一个权重:

X = houses[["area_m2", "minutes_walk"]]
model = LinearRegression()
model.fit(X, houses["price"])
print(np.round(model.coef_, 1))

这会打印:

[ 2.6 -5.1]

权重对应 X 的列。其他特征保持不变时,每增加 1 m²,价格就增加 2.6 千美元;步行时间每增加 1 分钟,价格就减少 5.1 千美元。

权重的单位是目标相对于其特征单位的比例:每平方米对应的千数,每分钟对应的数量。

challenge icon

挑战

中等

餐饮服务商根据过去 40 场活动的情况,为新活动报价,数据在 events.csv 中:guests、courses、months_ahead(提前预订的时间)和以美元计的 cost。起始代码会将一场新活动读入 new_event。

  1. 使用 features 对成本进行 LinearRegression 拟合。
  2. 对每个特征,打印该特征增加 1 个单位会使费用增加或减少多少(保留 2 位小数)。
  3. 打印新活动的报价(保留 2 位小数)。

另一家餐饮服务商的结果:

Each extra guest adds 41.5 dollars
Each extra course adds 198.25 dollars
Each extra month booked ahead takes off 22.8 dollars
Quote: 4312.6 dollars

亲手试试

import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression

# 每场过去的活动占一行:宾客人数、菜品道数、提前预订的月数、费用(美元)
events = pd.read_csv("events.csv")
features = ["guests", "courses", "months_ahead"]
units = ["guest", "course", "month booked ahead"]
# 新活动的数据,存为只有一行的表
guests = int(input())
courses = int(input())
months = int(input())
new_event = pd.DataFrame({"guests": [guests], "courses": [courses], "months_ahead": [months]})

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

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

监督学习中的所有课

自己练习: Python 在线编译器