森林为何有效
本课属于 Coddy Machine Learning 学习旅程的“监督学习”单元。第 42 课,共 58 课。
森林中的树木经过有意的差异化处理。每棵树都使用一个自助采样样本进行训练:从数据行中随机有放回地抽取,因此有些数据行会重复出现,有些则不会被选中。
每次提问也会随机选取几个特征。各棵树会犯不同的错误,而投票会抵消这些错误。两种萤火虫:
只有在大多数树木意见一致的地方,森林才会保留一条带状区域。
这些树位于 forest.estimators_ 中:
third = forest.estimators_[2]
print(round(third.score(X_test, y_test), 3))这会输出 0.737。整个森林的得分是 0.895。
挑战
中等随机森林能胜过自己的树吗?起始代码使用 riders.csv 中的数据,将 forest 拟合到这些数据上,数据记录了哪些骑手在 6 小时内完成了 160 km 骑行,哪些没有,并设置好了图表。
- 计算随机森林中每棵树在测试数据行上的得分。
- 绘制得分直方图,使用
bins=10,并用红色竖线标出forest_acc。 - 打印随机森林胜过了多少棵树。
另一次骑行打印了 The forest beats 88 of its 100 trees,并绘制了下面的图:
接下来,Coddy 会描述你的图表。
亲手试试
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
# 参加 160 km 慈善骑行的骑手:是否在 6 小时内完赛(1 表示是,0 表示否)
riders = pd.read_csv("riders.csv")
features = ["weekly_km", "long_ride_km", "age", "years_riding", "rest_days", "sleep_hours"]
X = riders[features].to_numpy() # 普通数组,符合随机森林中各棵树预期的格式
y = riders["under_6h"].to_numpy()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
forest = RandomForestClassifier(n_estimators=100, random_state=0)
forest.fit(X_train, y_train)
forest_acc = forest.score(X_test, y_test)
fig, ax = plt.subplots()
ax.set_title("The Forest and Its Trees")
ax.set_xlabel("Test accuracy")
ax.set_ylabel("Trees")
# 在下方编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
监督学习中的所有课
自己练习: Python 在线编译器