探索随机森林: 机器学习中的集成学习神器

机器学习 第七课 随机森林

  • 概述
  • 机器学习
    • 机器学习的主要分类
    • 监督学习
    • 无监督学习
    • 强化学习
  • 集成学习
    • 提高准确性
    • 增强稳定性
    • 提升泛化能力
  • 集成学习的主要方法
    • Bagging
    • Boosting
    • Stacking
  • 随机森林的理论基础
    • 决策树的基本原理
    • 随机森林的生成过程
    • 随机森林的优势与局限性
  • 随机森林的实际应用
    • 通过 sklearn 调用随机森林算法
    • 分类问题
    • 回归问题
  • 特征重要性
    • 如何计算特征
    • 解释特征重要性

概述

机器学习 (Machine Learning), 作为人工智能的一个重要分支, 近年来已经成为近期热门和活跃的方向之一. 机器学习通过数据中学习, 并利用这些学习到的知识进行决策和预测.

机器学习 随机森林

随着数据量的激增和计算能力的提升, 单一模型往往难以满足复杂任务的需求, 集成学习 (Ensemble Learning) 应运而生. 集成学习通过组合多个模型, 来提高预测准确性和模型稳定性. 集成学习的基本思想是 “三个臭皮匠, 顶个诸葛亮”, 通过将多个弱学习器组合成一个强学习器, 从而达到提升模型性能的目的.

机器学习

机器学习的主要分类

机器学习根据学习任务的性质和学习过程的机制, 可以分为三大类: 监督学习 (Supervised Learning), 无监督学习 (Unsupervised Learning) 和强化学习 (Reinforcement Learning).

监督学习

监督学习 (Supervised Learning) 是常见的机器学习类型, 特点是学习过程中提供了输入和对应的输出标签. 算法的目标是学习一个映射关系, 使得对于新的输入, 能够准确预测其输出. 常见的监督学习任务包括分类和回归.

无监督学习

与监督学习 (Supervised Learning), 无监督学习 (Unsupervised Learning) 的数据中没有标签信息. 算法需要自行发现数据中的结构和规律. 常见的无监督学习任务包括聚类, 降为和密度估计.

强化学习

强化学习关注的是智能体如何在环境中采取行动, 以最大化某种累积奖励. 而是通过与环境的交互来学习最优策略.

集成学习

集成学习 (Ensemble Learning) 是一种机器学习的范式, 通过结合多个学习器来完成学习任务.

集成学习

提高准确性

单个模型可能因为过拟合, 欠拟合或者数据噪声而导致预测不准确, 而集成多个模型可以显著提高预测的准确性.

增强稳定性

不同的模型对数据的不同特征有不同的响应, 集成学习能够减少模型对特定数据特征的依赖, 从而增强模型的稳定性.

提升泛化能力

集成学习通过综合多个模型的预测结果, 能够提升模型对未见数据的泛化能力.

集成学习的主要方法

集成学习 (Ensemble Learning) 的方法主要有三类:

  • Bagging
  • Boosting
  • Stacking

Bagging

Bagging, 全称 Bootstrap Aggregating, 是一种通过减少模型方差来提升模型性能的集成学习方法. Bagging 的核心思想是通过对原始数据集进行多次有放回抽样, 构成多个不同的子数据集. 然后在这些子数据集上分别训练多个相同类型的模型. 最终, 通过对这些模型的预测结果进行平均 (回归 Regression) 或投票 (分类 Classification) 得到最终的预测结果.

优点:

  • 减少过拟合 (Over Fitting): 由于每个模型在不同的数据子集上训练的, 因此 Bagging 对数据的特定噪声和异常的敏感性降低, 从减少了过拟合的风险
  • 提升模型稳定性: 每个模型可能因为训练数据的微小变化而产生较大的预测变化, 而 Bagging 通过平均多个模型的预测的预测结果, 提升了模型的稳定性

缺点:

  • 计算成本较高: 需要训练多个模型, 因此计算成本较高
  • 模型间互相独立: Bagging 方法假设各个模型相互独立, 但在实际应用中这一假设往往不成立

Boosting

Boosting 是一种将多个弱学习组合成强学习的集成学习方法. 与 Bagging 不同, Boosting 关注于提升模型的偏差. Boosting 通过迭代地训练一系列模型, 每个模型都试图纠正前一个模型的错误. 新模型的训练数据的权重会根据前一个模型的预测性能进行调整, 错误预测的数据会获得更高的权重.

优点:

  • 提升模型性能: Boosting 能够将一系列性能较差的模型组合成一个性能优秀的模型
  • 灵活性高: Boosting 可以与不同类型的学习方法一起使用

缺点:

  • 容易过拟合: Boosting 对噪声和异常非常敏感, 容易过拟合
  • 计算成本较高: 需要迭代训练多个模型, 计算成本较高

Stacking

Stacking 是一种将多个不同的基模型组合起来的集成学习方法. Stacking 通过训练一个元模型来组合多个基模型的预测结果. 元模型的输入是基模型的输出, 输出是最终的预测结果.

优点:

  • 提升模型性能: 通过组合不同的模型, Stacking 能够提升模型的性能
  • 灵活性高: 可以使用不同类型的模型作为基模型和元模型

缺点:

  • 模型复杂度搞: Stacking 模型的复杂度较高, 需要调整的参数较多
  • 计算成本高: 需要训练多个模型和一个元模型, 计算成本较高

随机森林的理论基础

随机森林 (Random Forest) 是一种基于决策树的集成学习方法. 随机森林结合了 Bagging 算法和随机特征选择的策略来构建一组决策树, 并通过投票或平均的方式来进行预测. 随机森林属于一种 Bagging 算法.

随机森林

决策树的基本原理

决策树是一种树形结构的模型, 通过一系列的判断规则来进行预测. 一个决策树包括根节点, 内部节点, 叶节点和边. 每个内部节点代表一个特征或属性, 每个边代表一个决策规则, 每个叶节点代表最终的预测结果.

决策树的构建过程包括特征选择, 树的生成和剪枝. 特征选择目标是选出最优的划分特征, 常用的方法有信息增益, 增益率和基尼指数等. 树的生成是通过递归的方式来构建决策树.

随机森林的生成过程

在生成随机森林 (Random Forest) 的过程中, 首先对原始数据集进行有放回的随机抽样, 生成多个不同的训练数据集.

对于每个训练数据集, 随机森林独特地构建一个决策树. 在每个决策树构建的过程中, 随机森林引入随机特征选择的策略, 即在每次划分节点时, 不是从所有特征中选择最优特征, 而是从一个随机选择的特征子集中选择最优特征.

随机森林的预测过程包括对每个决策树进行预测, 然后通过投票 (分类问题) 或者平均 (回归问题) 的方式来综合这些预测结果, 得到最终的预测结果.

随机森林的优势与局限性

优势:

  • 提高准确率: 随机森林能够大佬很高的准确率, 并且能够有效地运行在大数据上
  • 防止过拟合: 通过多个决策树并行进行投片或平均, 减少过拟合的风险
  • 能够处理高危数据: 随机森林能够处理大量的特征, 并且不需要进行特征选择
  • 提供特征重要性评估: 随机森林能够评估各个特征在预测中的重要性

局限性:

  • 模型解释性差:由于随机森林是由多个决策树组成的, 因此它的模型解释性不如单个决策树
  • 训练时间较长: 随机森林需要构建多个决策树, 因此训练时间可能会比单个决策树长

随机森林的实际应用

随机森林在各个领域都有广泛的应用. 接下来我们通过两个实际案例来探讨随机森林在分类和回归方面的应用.

通过 sklearn 调用随机森林算法

格式:

sklearn.ensemble.RandomForestClassifier(n_estimators=100,*,criterion="gini",max_depth=None,min_samples_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.0,max_features="auto",max_leaf_nodes=None,min_impurity_decrease=0.0,bootstrap=True,oob_score=False,n_jobs=None,random_state=None,verbose=0,warm_start=False,class_weight=None,ccp_alpha=0.0,max_samples=None,
)

参数:

  • n_estimators: 森林中树的数量, 默认为 100
  • criterion: 分裂质量的函数, 默认为 “gini” 基尼
  • max_depth: 树最大深度, 默认为 None
  • min_smaples_split: 分裂内部节点所需的最小样本数, 默认为 2
  • min_samples_leaf: 在叶节点出需要的最小样本数, 默认为 1
  • max_features: 最佳分割时要考虑的特征数量, 默认 “auto”
  • random_state: 随机数种子
# 导包
from sklearn.ensemble import RandomForestClassifier# 实例化模型
rf_clf = RandomForestClassifier()

分类问题

鸢尾花分类

代码:

"""
@Module Name: 随机森林 鸢尾花.py
@Author: CSDN@我是小白呀
@Date: October 24, 2023Description:
随机森林 鸢尾花
"""
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report# 加载数据
iris = load_iris()
X, y = iris.data, iris.target# 分割训数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 实例化模型
rf_clf = RandomForestClassifier(random_state=42)# 拟合模型
rf_clf.fit(X_train, y_train)# 预测
y_pred = rf_clf.predict(X_test)# 模型评估
report = classification_report(y_test, y_pred)
print(report)# 特征重要性
feature_importance = rf_clf.feature_importances_
print(feature_importance)

输出结果:

              precision    recall  f1-score   support0       1.00      1.00      1.00        101       1.00      1.00      1.00         92       1.00      1.00      1.00        11accuracy                           1.00        30macro avg       1.00      1.00      1.00        30
weighted avg       1.00      1.00      1.00        30[0.10809762 0.03038681 0.43999397 0.42152159]

回归问题

波士顿房价预测:

"""
@Module Name: 随机森林 波士顿房价.py
@Author: CSDN@我是小白呀
@Date: October 245, 2023Description:
随机森林 波士顿房价
"""
from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error# 加载数据
boston = load_boston()
X, y = boston.data, boston.target# 分割训数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 实例化模型
rf_clf = RandomForestRegressor(random_state=42)# 拟合模型
rf_clf.fit(X_train, y_train)# 预测
y_pred = rf_clf.predict(X_test)# 模型评估
MSE = mean_squared_error(y_test, y_pred)
print("MSE:", MSE)# 特征重要性
feature_importance = rf_clf.feature_importances_
print(feature_importance)

输出结果:

MSE: 7.901513892156864
[0.03806177 0.00175615 0.00795268 0.00100426 0.01554377 0.503844930.01383994 0.06054907 0.00381091 0.01566064 0.01631341 0.012153620.30950883]

特征重要性

feature_importances_代表模型特征重要性. 在我们拟合RandomForestClassifierRadomForestRegressor模型之后使用. feature_importances_可以帮助我们了解每个特征对模型预测的贡献度, 即特征的重要性.

如何计算特征

随机森林 (Random Forest) 中的特征重要性是通过观察每颗树中的每个特征分裂点带来的纯度增益来计算的. 具体步骤:

  1. 对于森林中的每棵树, 计算每个特征的纯度增益总和
  2. 将这个总和除以森林中所有数的数量,
  3. 将这些平均值标准化, 使他们的总和为 1, 这样你就得到了每个特征的重要性得分

解释特征重要性

feature_importance_会返回一个数组, 包含每个特征的重要性得分. 数组长度等于输入数据的特征数量. 每个得分都是一个介于 0 和 1 之间的数组, 所有得分的总和为 1.

高分 vs 低分

  • 高分: 如果一个特征的重要性得分很高, 这意味着这个特征对模型的预测非常有帮助
  • 低分: 如果一个特征的重要性得分很低, 意味着这个特征对模型的预测贡献不大, 或者特征信息已经被其他特征所捕获

例子:

from sklearn.ensemble import RandomForestClassifier# 假设 X 是特征矩阵,y 是标签
clf = RandomForestClassifier()
clf.fit(X, y)# 获取特征重要性
importances = clf.feature_importances_# 打印特征重要性
for i, imp in enumerate(importances):print(f"Feature {i}: {imp}")

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

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

相关文章

vue2.0项目中组件和iframe之间如何传值

vue2.0项目中组件和iframe之间如何传值 一、vue组件二、iframe组件 一、vue组件 mounted() {// 注册 message 事件监听器,只注册一次window.addEventListener(message, this.handleFromIframeMessage) }, beforeDestroy() {// 移除事件监听器window.removeEventList…

C#实现数据导出任一Word图表的通用呈现方法及一些体会

疲惫的修改 应人才测评产品的需求,导出测评报告是其中一个重要的环节,报告的文件类型也多种多样,其中WORD输出也扮演了一个重要的角色。 实现方法比较简单,结合分析结果数据,通过WORD模板文件进行替换输出。在实现的…

关于报错java.util.ConcurrentModificationException: null的源码分析和解决

一般有这种问题,方法中至少会有List或者Map下的至少两个子类,有可能参数类型相同,也有可能不同都有可能触发这个问题!其主要原因是使用了ArrayList进行删除操作或者使用iterator遍历集合的同时对集合进行修改都有可能会出现这个问题 ArrayList属于List下的子类 需要区分的是Li…

qt的一些自绘控件

https://download.csdn.net/download/venice0708/88469835

嵌入式Linux_学习路线+基础知识

嵌入式Linux_学习路线基础知识 一、学习路线 说明:u-boot是一大块学起来需要三到六个月比较耗时,也属于比较落后的知识点,所以暂时不学习,内核也是如此暂时不学习,从应用层入手,先入门再深入 二、Shell指令…

MongoDB 的集群架构与设计

一、前言 MongoDB 有三种集群架构模式,分别为主从复制(Master-Slaver)、副本集(Replica Set)和分片(Sharding)模式。 Master-Slaver 是一种主从复制的模式,目前已经不推荐使用。Re…

ARM | 传感器必要总线IIC

IIC总线介绍 1.谈谈你对IIC总线理解? 1)IIC总线是串行半双工同步总线,主要用于连接整体电路 2)SCL/SDA作用:IIC是两线制,一根是时钟线SCK,用于控制什么时候进行进行数据传输,时钟信号由主机发出; 另一根是数据线SDA,用于进行数据传输,可以从…

C# Winform编程(9)网络编程

网络编程 HTTP网络编程IPAddress IP地址类WebClient类WebRequest类和WebResponse类 WebBrowser网页浏览器控件TCP网络编程TcpClient类TcpListener类NetworkStream类Socket类 HTTP网络编程 IPAddress IP地址类 IPAddress类代表IP地址,可在十进制表示法和实际的整数…

N——>BatchSize 数据维度理解和处理(chun, cat, squeeze, unsqueeze)

数据处理之N——>BatchSize N——>batch_size train_data TensorDataset(torch.Tensor(x_train).double(), torch.Tensor(y_train).double()) train_loader DataLoader(train_data, batch_sizeargs.bs, shuffleTrue, drop_lastTrue) for batch_idx, (inputs, results…

代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。

用JAVA代码编写 704. 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12]…

Haproxy 服务

Haproxy:他也是常用的负载均衡软件 nginx 支持四层转发,七层转发 haproxy 也是四层和七层转发 LVS的DR和NAT都是基于四层转发 都是基于流量的转发。 tun:四层和七层都有。 基于四层的转发: 1,lvs 2,nginx 3&…

JAVA代码审计-纵向越权漏洞分析

查看这个cms系统后台管理员 添加用户的页面 点击添加管理员 这个模块只有管理员拥有,普通用户没有这个模块。 打开源码分析是否存在越权漏洞。 ------------------------------------------------------------------------------------------------------------ …

对python中切片详解

嗨喽,大家好呀~这里是爱看美女的茜茜呐 Python中什么可以切片 Python中符合序列的有序序列都支持切片(slice) 如:列表,字符,元祖 👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~ python源码、视…

Python 自动化(十五)请求和响应

准备工作 将不同day下的代码分目录管理,方便后续复习查阅 (testenv) [rootlocalhost projects]# ls mysite1 (testenv) [rootlocalhost projects]# mkdir day01 day02 (testenv) [rootlocalhost projects]# cp -rf mysite1/ day01/ (testenv) [rootlocalhost proj…

Spring Cloud Config

Spring Cloud Config 服务端:一个集中化配置中心,可以是一个独立的服务,也可以注册到服务治理中心,它可以集中管理各个 微服务的配置; 作用原理是从某个地方读取(本地/云端)提供给其客户端作为配置; 客户端:作为一个服务端,通过读取Config的服务端来获取自己的配置文件; 服务…

计算机视觉中的数据预处理与模型训练技巧总结

计算机视觉主要问题有图像分类、目标检测和图像分割等。针对图像分类任务,提升准确率的方法路线有两条,一个是模型的修改,另一个是各种数据处理和训练的技巧(tricks)。图像分类中的各种技巧对于目标检测、图像分割等任务也有很好的作用&#…

【AGC】更新应用信息报未知错误解决方法

【问题描述】 最近有几个开发者遇到了一个问题,他们在AGC控制台配置好应用信息的图标和截图之后,点击保存按钮会弹出“未知错误,请稍后再试”的异常报错,导致无法正确保存应用配置信息。 出错页面如图所示。 ​​ 【解决方案】 …

debian、ubuntu打包deb包工具,图形界面deb打包工具mkdeb

debian、ubuntu打包deb包工具,图形界面deb打包工具mkdeb,目前版本1.0 下载地址: 链接:https://pan.baidu.com/s/1QX6jXNMYRybI9Cx-1N_1xw?pwd8888 md5: b6c6658408226a8d1a92a7cf93834e66 mkdeb_1.0-1_all.deb

ES6之Set集合(通俗易懂,含实践)

Set是什么?它的方法有哪些?它在实例开发中有什么作用? 让我为大家介绍一下吧! ES6提供了新的数据结构 Set(集合) 。它类似于数组,但成员的值是唯一的。 创建方法: let s new Set()console.log(s)它属于什…

一套成熟的ERP系统,应具备哪些能力?

随着制造业数字化、智能化的不断升级,企业的金字塔静态管理模式也在向扁平化动态管理模式转变,而企业管理系统则是推动这一趋势发展的重要载体。 为了更好地实现企业管理信息化,越来越多的企业在应用ERP系统。ERP对企业经营起着至关重要的辅…