介绍
决策树会让您很难做出决定。 一棵有很多树叶的深树将会过度拟合,因为每个预测都来自其叶子上只有少数房屋的历史数据。 但是叶子很少的浅树会表现不佳,因为它无法捕获原始数据中的那么多区别。
即使在今天,最复杂的建模技术也面临着欠装和过度装配之间的这种张力。 但是,许多模型都有聪明的想法,可以带来更好的性能。 我们将以随机森林为例。
随机森林使用许多树,并通过平均每个组件树的预测来进行预测。 它通常比单个决策树具有更好的预测准确性,并且与默认参数一起使用效果很好。 如果您继续建模,您可以学习更多具有更好性能的模型,但其中许多模型对获取正确的参数很敏感。
举例
您已经看过几次加载数据的代码。 在数据加载结束时,我们有以下变量:
- train_X
- val_X
- train_y
- val_y
import pandas as pd
# Load data
melbourne_file_path = 'melb_data.csv'
melbourne_data = pd.read_csv(melbourne_file_path)
# Filter rows with missing values
melbourne_data = melbourne_data.dropna(axis=0)
# Choose target and features
y = melbourne_data.Price
melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'BuildingArea',
'YearBuilt', 'Lattitude', 'Longtitude']
X = melbourne_data[melbourne_features]
from sklearn.model_selection import train_test_split
# 将数据拆分为训练和验证数据,用于功能和目标
# 拆分基于随机数生成器。 提供数值
# inndom_state参数保证我们每次都得到相同的分割
# 运行此脚本。
train_X, val_X, train_y, val_y = train_test_split(X, y,random_state = 0)
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
forest_model = RandomForestRegressor(random_state=1)
forest_model.fit(train_X, train_y)
melb_preds = forest_model.predict(val_X)
print(mean_absolute_error(val_y, melb_preds))
我们构建一个随机森林模型,类似于我们如何在scikit-learn中构建决策树 - 这次使用RandomForestRegressor类而不是DecisionTreeRegressor。
结论
可能还有进一步改进的空间,但这比250,000的最佳决策树错误有了很大的改进。 有些参数允许您更改随机森林的性能,因为我们更改了单个决策树的最大深度。 但随机森林模型的最佳功能之一是,即使没有这种调整,它们通常也能合理地工作。
您很快就会学习XGBoost模型,它可以在使用正确的参数进行调整时提供更好的性能(但需要一些技巧才能获得正确的模型参数)。
评论已关闭