咱们将在这篇文章中使用更复杂的机器学习算法。

政安晨:机器学习快速入门(四){pandas与scikit-learn} {随机森林}-LMLPHP

随机森林

基本定义

随机森林(Random Forest)是一种机器学习算法,属于集成学习(ensemble learning)的一种。它是通过构建多个决策树(即森林)来进行预测和分类的。

随机森林的主要特点是采用了随机采样和随机特征选择的方法,以降低模型的方差和减小过拟合的风险。在随机森林中,对于每个决策树的构建,会从训练集中随机选择一部分样本进行有放回抽样,同时也会随机选择一部分特征进行划分,以减少决策树间的相关性。

在预测时,随机森林通过让每个决策树进行独立的预测,然后根据投票或平均值来决定最终的预测结果。这样可以提高模型的准确性、鲁棒性和稳定性。

随机森林广泛应用于分类、回归和特征选择等领域,其在处理大规模和高维数据时也具有良好的性能。同时,随机森林还能够评估变量的重要性、处理缺失值和处理不平衡数据等问题,因此在实际应用中得到了广泛使用。

做个说明

决策树给你留下了一个困难的决定。一棵包含许多叶子节点的深树会过拟合,因为每个预测都只来自其叶子节点中的少数房屋的历史数据。但是,一棵只有少数叶子节点的浅树表现较差,因为它无法捕捉到原始数据中的许多差异。

即使是当今最复杂的建模技术,也面临着欠拟合和过拟合之间的紧张关系。但是,许多模型有着聪明的想法可以提高性能。我们以随机森林为例进行说明。

随机森林使用多棵树,并通过对每棵组成树的预测进行平均来进行预测。它通常比单棵决策树具有更好的预测准确性,并且在默认参数下工作良好。如果您继续建模,可以学习到更多性能更好的模型,但其中许多对于获取正确参数非常敏感。

举个例子

您已经多次看到了加载数据的代码。在数据加载结束时,我们有以下变量:

咱们现在继续使用与前几篇类似的代码:

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

# split data into training and validation data, for both features and target
# The split is based on a random number generator. Supplying a numeric value to
# the random_state argument guarantees we get the same split every time we
# run this script.
train_X, val_X, train_y, val_y = train_test_split(X, y,random_state = 0)

我们使用scikit-learn类似于构建决策树的方式构建随机森林模型 ——  这次使用RandomForestRegressor类而不是DecisionTreeRegressor类。

代码如下:

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))

{还是依旧做个说明}

如果大家第一次看到这篇文章,那么搭建环境、前因后果等等都参看我的前三篇文章:

政安晨:机器学习快速入门(一){基于Python与Pandas}政安晨:机器学习快速入门(四){pandas与scikit-learn} {随机森林}-LMLPHPhttps://blog.csdn.net/snowdenkeke/article/details/136046028政安晨:机器学习快速入门(二){基于Python与Pandas} {建立您的第一个机器学习模型}政安晨:机器学习快速入门(四){pandas与scikit-learn} {随机森林}-LMLPHPhttps://blog.csdn.net/snowdenkeke/article/details/136047590政安晨:机器学习快速入门(三){pandas与scikit-learn} {模型验证及欠拟合与过拟合}政安晨:机器学习快速入门(四){pandas与scikit-learn} {随机森林}-LMLPHPhttps://blog.csdn.net/snowdenkeke/article/details/136051177好啦,咱们现在开始执行上述代码:

政安晨:机器学习快速入门(四){pandas与scikit-learn} {随机森林}-LMLPHP

结论

可能还有进一步改进的空间,但相比于前面几篇看到的最佳决策树误差为250,000,这已经是一个巨大的改进。有一些参数可以改变随机森林的性能,就像我们改变单个决策树的最大深度一样。但是,随机森林模型最好的特点之一是它们通常可以在没有调整的情况下运行得相当合理。

写在最后

作者政安晨用4篇文章的演练帮助大家完成了机器学习的基本入门,但伟大的征程这才刚刚开始,瑰丽的画卷逐渐在您的脚下铺开,人工智能是星辰大海,机器学习是渡海之舟。

如果您想要继续提升机器学习的技能,去参加机器学习竞赛吧,不要认为这个领域是聪明大脑的游戏,其实谁也不比谁苯,机器学习只是让我们的日常生活中碰到的各类问题朝着最优解再做一遍而已。

小伙伴们,加油!

已经是老人家的我期待着你们的好消息!呵呵。

02-07 06:19