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

news2024/11/17 8:24:46

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

随机森林

基本定义

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

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

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

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

做个说明

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

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

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

举个例子

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

  • 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

# 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}icon-default.png?t=N7T8https://blog.csdn.net/snowdenkeke/article/details/136046028政安晨:机器学习快速入门(二){基于Python与Pandas} {建立您的第一个机器学习模型}icon-default.png?t=N7T8https://blog.csdn.net/snowdenkeke/article/details/136047590政安晨:机器学习快速入门(三){pandas与scikit-learn} {模型验证及欠拟合与过拟合}icon-default.png?t=N7T8https://blog.csdn.net/snowdenkeke/article/details/136051177好啦,咱们现在开始执行上述代码:

结论

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

写在最后

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

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

小伙伴们,加油!

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1438415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「云原生可观测团队」获选「InfoQ 年度技术内容贡献奖」

随着云原生、人工智能逐渐成为各行各业的创新生产力工具。可以预见,我们即将进入全新的智能化时代。随着数据成为新型生产要素,云和 AI 正走向深度融合。云原生通过提供大规模多元算力的高效供给,可观测成为业务创新的核心基础设施&#xff0…

Future和FutureTask

Future和FutureTask Future类Future主要方法get()get(long timeout,TimeUnit unit)cancel()isDone()isCancelled() 用线程池的submit方法返回Future对象用FutureTask来创建Future Future类 FutureTask叫未来任务,可以将一个复杂的任务剔除出去交给另外一个线程来完…

基于LLM的Agent的兴起及其潜力:综述

原文链接:https://arxiv.org/pdf/2309.07864v1.pdf 1. Introduction LLM-based Agent的基本构成。本文认为,构成LLM-based Agent的核心部件有三个: brain: 主要目标有2个—信息记忆、信息处理perception: 主要目标在于让agent能够感受到更…

0207作业

继承:是 C中类的一个重要特性,它允许一个类从另一个类中继承成员变量和成员函数。通过继承,可以在子类中重用父类的代码,并可以根据需要进行扩展和修改。继承关系形成了类的层次结构。 虚继承:是一种特殊的继承方式&a…

林浩然与杨凌芸的Java奇缘:final关键字的三次浪漫邂逅

林浩然与杨凌芸的Java奇缘:final关键字的三次浪漫邂逅 Lin Haoran and Yang Lingyun’s Java Romance: Three Romantic Encounters with the “final” Keyword 在一个名叫“编程乐园”的世界里,住着两位才子佳人——男主角林浩然和女主角杨凌芸。他们不…

【翻译】 Processing的安卓项目构建(译者用的是Android Studio)

原文链接:https://github.com/processing/processing-android/wiki/Building-Processing-for-Android,版本Apr 2, 2023 译者声明:这个文档是开源公开的,协议是GNU协议。译者自己得使用这个文档,所以才翻译的&#xff0…

Windows Server 2019 DHCP服务器搭建

系列文章目录 目录 系列文章目录 文章目录 前言 一、DHCP服务器是什么? 二、配置服务器 1.实验环境搭建 1)实验服务器配置和客户端 2)实验环境 2.服务器配置 ​编辑 文章目录 Windows Server 2003 Web服务器搭建Windows Server 2003 FTP服务器搭建Windows S…

【Java 数据结构】反射

反射 1 定义2 用途(了解)3 反射基本信息4 反射相关的类(重要)4.1 Class类(反射机制的起源 )4.1.1 Class类中的相关方法(方法的使用方法在后边的示例当中) 4.2 反射示例4.2.1 获得Class对象的三种方式4.2.2 反射的使用 5、反射优点和缺点 1 定义 Java的反…

YOLOv8改进 更换轻量级网络结构

一、GhostNet论文 论文地址:1911.11907.pdf (arxiv.org) 二、 GhostNet结构 GhostNet是一种高效的目标检测网络,具有较低的计算复杂度和较高的准确性。该网络采用了轻量级的架构,可以在计算资源有限的设备上运行,并能够快速地实时检测图像中的目标物体。 GhostNet基于Mo…

Linux常见命令总结

1.目录操作 1. 切换目录 (cd) ①切换到指定目录下 cd 目录名 ②切换到根目录下 cd ~ 2. 查看目录 (ls) ①查看当前目录下的所有目录和文件 ls ②查看当前目录下的所有目录和文件(包括隐藏的文件)ls…

怎么加密电脑磁盘?磁盘加密软件哪个好?

磁盘是电脑储存数据的基础工具,可以存放大量数据。为了避免数据泄露,可以使用专业的磁盘加密软件加密保护电脑磁盘。那么,磁盘加密软件哪个好呢?下面我们就来了解一下。 磁盘加锁专家 磁盘加锁专家是一款专业的磁盘加锁软件&…

cesium mapboxgl+threebox glb 朝向问题

一、3Dbuilder打开glb 二、cesium在pitch和heading都为0的情况下,不设置模型的朝向 三、mapboxglthreebox在pitch和bearing都为0的情况下,不设置模型的朝向 四、对于地图默认视角,cesium设置pitch-90、heading0的时候和mapboxglthreebox设置p…

使用python绘制无边框ECG信号-可用于论文插图-小白版

用python绘制一个心电信号 最近在写大论文,由于自己做的是心电信号难免要做一些心电信号的插图,然后在写论文的时候有的时候要用真实信号有的时候需要用到示意图,这里面的其他部分使用Visio绘制的,但是前面的心电信号部分&#x…

寒假作业:2024/2/3

作业1:编程实现单向循环链表的头插、头删、尾插、尾删 1.头插: 代码: #include "head.h" /** function: 单向循环链表新节点创建* param [ in] * param [out] * return 成功返回创建的节点,失败NULL*/ loop_…

SM2259XT量产工具修复金泰克固态硬盘29F01T2ALCQJ1颗粒开卡

在这里插入代码片前言 网心云用的固态硬盘突然坏了识别不了,磁盘管理、diskGenius、pe系统里均无法识别,查询发现可以用开卡工具修复,遂进行了一番折腾。 拆硬盘 如图硬盘是块金泰克240g容量的,拆开后找到主控芯片型号为SM2259…

思科模拟器实验合集

目 录 实验一 常用网络命令的使用.................................... 1 实验二 双绞线制作.................................................. 12 实验三 网络模拟软件.............................................. 15 实验四 交换机基本配置..................…

使用vite创建vue+ts项目,整合常用插件(scss、vue-router、pinia、axios等)和配置

一、检查node版本 指令:node -v 为什么要检查node版本? Vite 需要 Node.js 版本 18,20。然而,有些模板需要依赖更高的 Node 版本才能正常运行,当你的包管理器发出警告时,请注意升级你的 Node 版本。 二、创…

SpringBoot:web开发

web开发demo:点击查看 LearnSpringBoot05Web 点击查看更多的SpringBoot教程 技术摘要 webjarsBootstrap模板引擎thymeleaf嵌入式Servlet容器注册web三大组件 一、webjars webjars官网 简介 简介翻译 WebJars 是打包到 JAR(Java Archive)…

Java线程是怎么实现run方法的执行的呢?【 多线程在JVM中的实现原理剖析】

Java线程是怎么实现run方法的执行的呢?【 多线程在JVM中的实现原理剖析】 查看naive state0 方法JVM_StartThread 方法创建操作系统线程操作系统线程执行 本文转载-极客时间 我们知道Java线程是通过行start()方法来启动的,线程启动后会执行run方法内的代…

【Spring基础】从0开始学习Spring(2)

前言 在上篇文章,我已经讲了Spring中最核心的知识点:IoC(控制反转)以及DI(依赖注入)。这篇文章,我将讲一下关于Spring框架中的其它比较琐碎但是又还是挺重要的知识点,因此&#xff…