编程小白冲Kaggle每日打卡(17)--kaggle学堂:<机器学习简介>随机森林

devtools/2025/3/1 21:40:27/

Kaggle官方课程链接:Random Forests

本专栏旨在Kaggle官方课程的汉化,让大家更方便地看懂。

Random Forests

使用更复杂的机器学习算法。

介绍

决策树给你留下了一个艰难的决定。一棵有很多叶子的深树会被过度拟合,因为每一个预测都来自它叶子上少数房子的历史数据。但是,叶子很少的浅树表现不佳,因为它无法在原始数据中捕捉到尽可能多的区别。

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

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

例子

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

  • train_X
  • val_X
  • train_y
  • val_y
import pandas as pd# Load data
melbourne_file_path = '../input/melbourne-housing-snapshot/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_errorforest_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))
191669.7536453626

结论

可能还有进一步改进的空间,但与250000的最佳决策树错误相比,这是一个很大的改进。有一些参数允许您更改随机森林的性能,就像我们更改单个决策树的最大深度一样。但随机森林模型最好的特点之一是,即使没有这种调整,它们通常也能合理地工作。

Your Turn

尝试自己使用随机森林模型,看看它对你的模型有多大的改进。


http://www.ppmy.cn/devtools/163737.html

相关文章

GD32F450 使用

GB32F450使用 1. 相关知识2. 烧写程序3. SPI3.1 spi基础3.2 spi代码 4. 串口4.1 串口引脚4.2 串口通信代码 问题记录1. 修改晶振频率 注意:GD32F450 总共有三种封装形式,本文所述的相关代码和知识,均为 GD32F450IX 系列。 1. 相关知识 参数配…

labview中VISA串口出现异常的解决方案

前两天在做项目时发现,当用VISA串口读取指令时出现了回复异常的情况,不管发什么东西就一直乱回,针对这个情况,后面在VISA串口中加了一个VISA寄存器清零的函数。加了之后果然好多了,不会出现乱回的情况,但是…

Spring Boot 实战:轻松实现文件上传与下载功能

目录 一、引言 二、Spring Boot 文件上传基础 (一)依赖引入 (二)配置文件设置 (三)文件上传接口编写 (一)文件类型限制 (二)文件大小验证 &#xff0…

docker简介-学习与参考

docker Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱…

在AI中,tokens是自然语言处理(NLP)的基本单位,用于文本的分割和处理。

在AI中,tokens是自然语言处理(NLP)的基本单位,用于文本的分割和处理。‌ Tokens可以是单个单词、字符、子词或标点符号,具体形式取决于使用的分词方法。‌12 Tokens在AI模型中的作用 ‌文本处理‌:在AI模…

【分布式锁通关指南 04】redis分布式锁的细节问题以及RedLock算法原理

引言 在03篇中我们讲解了lua脚本的使用(Ps:如果你没跳过的话),目前我们通过api也好,lua脚本也好,已经基于redis实现了分布式锁,但看似完美的它其实还存在一些细节问题,本章节将会带领…

验证码识别:一文掌握手机验证码的自动化处理

文章目录 一、获取手机验证码1.1 通过短信接收验证码1.2 使用第三方短信接收服务1.3 使用ADB读取手机短信1.4 通过API获取验证码1.5 通过邮件接收验证码二、解析和提取验证码2.1 正则表达式提取2.2 JSON解析三、自动化输入验证码3.1 使用Selenium自动化Web应用3.2 使用Appium自…

量子计算的数学基础:复数、矩阵和线性代数

量子计算是基于量子力学原理的一种新型计算模式,它与经典计算机在信息处理的方式上有着根本性的区别。在量子计算中,信息的最小单位是量子比特(qubit),而不是传统计算中的比特。量子比特的状态是通过量子力学中的数学工具来描述的,因此,理解量子计算的数学基础对于深入学…