亦菲喊你来学机器学习(12) --随机森林

文章目录

  • 随机森林
    • 基本原理
    • 随机森林特点
      • 优点
      • 缺点
    • 构建模型
      • 模型参数
      • 训练模型
      • 测试模型
      • 绘制重要特征
    • 注意事项
  • 总结

随机森林

随机森林(Random Forest)是一种集成学习方法,属于决策树模型的扩展。它通过构建多个决策树并将它们的预测结果进行汇总,以此来提高预测的准确性和稳定性。随机森林是“集成学习”中最流行的算法之一,尤其在分类和回归任务中表现出色。

基本原理

随机森林的构建基于两个主要原则:Bagging(Bootstrap Aggregating)和随机特征选择

我们主要了解一下Bagging原则:

Bagging随机森林通过从原始数据集中有放回地随机抽取样本(称为bootstrap样本)来构建多棵决策树。每个决策树都是在这样的随机样本上训练的,因此不同的树可能使用到不同的数据点。这样做可以增加模型的多样性,因为每棵树都是在不同的数据子集上训练的。

在这里插入图片描述

随机森林特点

优点

  • 准确性高:由于结合了多个决策树的预测结果,随机森林通常能提供比单一决策树更高的预测准确性。
  • 能够处理高维数据:随机特征选择机制使得随机森林能够有效地处理包含大量特征的数据集。
  • 能够评估特征的重要性:通过计算每个特征在构建所有树时产生的平均信息增益或平均不纯度减少量,可以评估出各个特征的重要性。
  • 不易过拟合:由于随机性和多样性,随机森林模型通常对训练数据的噪声和异常值具有较好的鲁棒性,不太容易过拟合。

缺点

  • 复杂:当随机森林中的决策树个数很多时,训练时需要的空间和时间会较大。
  • 随机森林模型还有许多不好解释的地方,有点算个黑盒模型

构建模型

对于构建一个完整的模型,主要从以下两个方面进行:

  1. 训练模型
  2. 测试模型

但是对于随机森林算法随机森林作为一种强大的集成学习算法,通过构建多个决策树并将它们的结果进行汇总,以提高模型的预测准确性和泛化能力。在这个过程中,理解哪些特征对模型的预测结果具有重要影响是至关重要的,所以知道特征的影响权重是很重要的,于是我们需要在上面两步的基础上,再加一步:

  1. 绘制重要特征:便于进行特征工程,去除无关特征

模型参数

python">class sklearn.ensemble.RandomForestClassifier(n_estimators=’warn’,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,min_impurity_split=None,bootstrap=True,oob_score=False,n_jobs=None,random_state=None,verbose=0,warm_start=False,class_weight=None)

随机森林一些重要参数:

python">-- 1.n_estimators :随机森林独有)随机森林中决策树的个数。在0.20版本中默认是10个决策树;在0.22版本中默认是100个决策树;
-- 2.criterion :(同决策树)节点分割依据,默认为基尼系数。----> 可选【entropy:信息增益】
-- 3.max_depth:(同决策树)【重要】default=(None)设置决策树的最大深度,默认为None。【(1)数据少或者特征少的时候,可以不用管这个参数,按照默认的不限制生长即可(2)如果数据比较多特征也比较多的情况下,可以限制这个参数,范围在10~100之间比较好】
-- 4.min_samples_split : (同决策树)【重要】默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则建议增大这个		 值。
-- 5.min_samples_leaf :(同决策树)【重要】这个值限制了叶子节点最少的样本数。
-- 6.min_weight_fraction_leaf : (同决策树)这个值限制了叶子节点所有样本权重和的最小值。【一般不需要注意】
-- 7.max_features : (随机森林独有)【重要】随机森林允许单个决策树使用特征的最大数量。当为整数时,即最大特征数;当为小数时,训练集特征数*小数;
-- 8.max_leaf_nodes:(同决策树)通过限制最大叶子节点数,可以防止过拟合,默认是None
-- 9.min_impurity_split:(同决策树)这个值限制了决策树的增长【一般不推荐改动默认值】
-- 10.bootstrap=True(随机森林独有)是否有放回的采样,按默认,有放回采样
-- 11. n_jobs=1:并行job个数。这个在是bagging训练过程中有重要作用,可以并行从而提高性能。1=不并行;n:n个并行;-1:CPU有多		 少core,就启动多少job。

训练模型

  1. 收集数据

链接:训练数据
提取码:7f7y

  1. 数据预处理

数据预处理一般有:读取数据、分开变量和标签、划分训练集和测试集数据:

python">import pandas as pd
data_1 = pd.read_csv("spambase.csv")
x = data_1.iloc[:,:-1]
y = data_1.iloc[:,-1]from sklearn.model_selection import train_test_split
train_x,test_x,train_y,test_y = \train_test_split(x,y,test_size=0.2,random_state=100)
  1. 构建模型

构建模型,给予数据训练结果,调整模型参数,得到尽量优的结果:

python">from sklearn.ensemble import RandomForestClassifier	#导入随机森林算法模型
rf = RandomForestClassifier(n_estimators=100,	#训练时划分决策树的个数max_features=0.8,	#允许单个决策树使用特征的最大数量random_state=0
)
rf.fit(train_x,train_y)

测试模型

  1. 测试训练集本身数据
python">from sklearn import metrics
train_predict = rf.predict(train_x)
print(metrics.classification_report(train_y,train_predict))
-------------------------precision    recall  f1-score   support0       1.00      1.00      1.00      22461       1.00      1.00      1.00      1431accuracy                           1.00      3677macro avg       1.00      1.00      1.00      3677
weighted avg       1.00      1.00      1.00      3677
  1. 测试划分的测试集模型
python">test_predict = rf.predict(test_x)
print(metrics.classification_report(test_y,test_predict))
---------------------------precision    recall  f1-score   support0       0.94      0.96      0.95       5391       0.94      0.92      0.93       381accuracy                           0.94       920macro avg       0.94      0.94      0.94       920
weighted avg       0.94      0.94      0.94       920

绘制重要特征

  1. 导入必要的库:

    python"># 导入matplotlib的pyplot模块,用于绘图
    import matplotlib.pyplot as plt
    
  2. 获取特征重要性:

    随机森林模型rf中获取特征重要性。

    python">importances = rf.feature_importances_
    
  3. 创建DataFrame来存储特征重要性:

    使用pandas的DataFrame来存储特征重要性:

    python">import pandas as pd
    im = pd.DataFrame(importances,columns=["importances"])
    
  4. 准备特征名称:

    从某个data_1 中获取列名(即特征名称),然后转换为列表,并去掉最后一个元素

    python">clos = data_1.columns
    clos_1 = clos.values
    clos_2 = clos_1.tolist() #转化成列表
    clos = clos_2[0:-1]
    
  5. 将特征名称添加到DataFrame中:

    将处理后的特征名称列表clos作为一列添加到DataFrame: im中,列名为’clos’:

    python">im['clos'] = clos
    
  6. 排序并选择前10个最重要的特征:

    根据"importances"列的值对DataFrame进行降序排序,并只保留前10行(即最重要的10个特征)。

    python">im = im.sort_values(by=['importances'],ascending=False)[:10]
    
  7. 准备绘图:

    python">index = range(len(im))	#生成一个与DataFrame:im长度相同的索引列表。
    plt.yticks(index,im.clos)	#设置y轴的刻度标签为DataFrame:im中的'clos'列的值,即特征名称。
    plt.barh(index,im['importances'])	#绘制一个水平条形图,x轴为特征的重要性,y轴为特征名称。
    
  8. 显示图形:

    显示绘制的图形:

    python">plt.show()
    
  9. 完整绘图展示:

python">#绘制特征重要排名
import matplotlib.pyplot as plt
from pylab import mplimportances = rf.feature_importances_
im = pd.DataFrame(importances,columns=["importances"])clos = data_1.columns
clos_1 = clos.values
clos_2 = clos_1.tolist()
clos = clos_2[0:-1]
im['clos'] = closim = im.sort_values(by=['importances'],ascending=False)[:10]index = range(len(im))
plt.yticks(index,im.clos)
plt.barh(index,im['importances'])
plt.show()

图像展示:

在这里插入图片描述

这样,我们就可以通过这个图片来进行特征工程,筛选出无关变量,优化模型啦!!

注意事项

  • 尽管随机森林在很多情况下表现优异,但它仍然需要足够的训练数据来避免过拟合,并且需要仔细调整其参数(如树的数量、每个节点的最大特征数等)以达到最佳性能。
  • 在处理高度不平衡的数据集时,可能需要采用特定的策略来改进随机森林的性能,如通过调整类别权重或使用不同的评估指标。

总结

本篇介绍了:

  1. Bagging原则
  2. 随机森林模型的参数
  3. 构建随机森林模型
  4. 如何绘制重要特征,进行特征工程,优化模型

http://www.ppmy.cn/news/1516022.html

相关文章

英国政府停止使用人工智能

你是否注意到,每家公司都声称他们拥有一些新发现的人工智能技术,这些技术显然使他们更胜一筹,但这些人工智能却完全是空洞的,令人失望?我也是,这也是我对这项技术如此怀疑的一半原因。但在过去几年里&#…

Golang | Leetcode Golang题解之第374题猜数字大小

题目&#xff1a; 题解&#xff1a; func guessNumber(n int) int {return sort.Search(n, func(x int) bool { return guess(x) < 0 }) }

K8S对接Ceph分部署存储

文章目录 一、Ceph理论知识1、Ceph简介2、Ceph分布式存储的优点3、Ceph核心组件 二、部署Ceph高可用集群1、服务器环境信息2、部署前环境准备工作3、部署Ceph监控服务Monitor4、激活Ceph存储服务OSD 三、K8S对接Ceph存储1、K8S对接Ceph RBD实现数据持久化2、基于Ceph RBD生成PV…

在编程学习的道路上,面对Bug和复杂算法时,我们常常会感到挫折和困惑。以下是一些克服这些挑战的有效方法:

在编程学习的道路上&#xff0c;面对Bug和复杂算法时&#xff0c;我们常常会感到挫折和困惑。以下是一些克服这些挑战的有效方法&#xff1a; 系统化问题解决&#xff1a; 遇到Bug时&#xff0c;首先要从整体入手&#xff0c;系统地分析问题。例如&#xff0c;可以通过逐步调试…

2024年Intellij IDEA快捷键总结

目录 编辑与格式化&#xff1a; 导航与跳转&#xff1a; 重构&#xff1a; 查找与替换&#xff1a; 调试 其他常用&#xff1a; 使用快捷键的好处&#xff1a; 快捷键功能描述 编辑与格式化&#xff1a; CtrlX删除当前行或选中的文本CtrlD复制当前行或选中的文本到下一行…

iPhone13手机照片被误删,有什么方法可以恢复吗?

在日常使用手机时&#xff0c;我们可能因为误操作、手机崩溃、或者其他原因&#xff0c;导致iPhone13手机中的照片丢失。遇到这种情况&#xff0c;手机误删照片如何恢复&#xff1f;在本文中&#xff0c;我们将分享3个妙招&#xff0c;帮助您恢复iPhone13上误删的照片。 一、通…

Flask restful 前后端分离和 restful 定义

Flask restful 前后端分离和 restful 定义 前后端分离RESTful API总结在Web开发中,前后端分离(Frontend and Backend Separation)和RESTful API(Representational State Transfer 应用程序接口)是两个重要的概念,特别是在构建大型或复杂的Web应用程序时。Flask作为一个轻…

解锁C#性能监控:内置性能计数器全解析

标题&#xff1a;解锁C#性能监控&#xff1a;内置性能计数器全解析 摘要 性能计数器是衡量和监控应用程序性能的重要工具。在C#中&#xff0c;.NET框架提供了一套完整的性能计数器类库&#xff0c;使得开发者能够轻松地收集和分析应用程序的运行时数据。本文将详细介绍如何在…

【第一章概述—计算机中的数制】非十进制数到十进制数的转换,八进制转十进制,16进制转十进制。十进制转8进制,十进制转16进制

将非十进制数转换为十进制数或将十进制数转换为其他进制数&#xff0c;具体步骤如下&#xff1a; 八进制&#xff08;Octal&#xff09;转换为十进制&#xff08;Decimal&#xff09; 八进制转十进制&#xff1a; 每个八进制位乘以其对应的权重&#xff1a; 从右到左&#x…

Python爬虫—常用的网络爬虫工具推荐

以下列举几个常用的网络爬虫工具 1. 八爪鱼&#xff08;Bazhuayu&#xff09; 简介&#xff1a; 八爪鱼是一款面向非技术用户的桌面端爬虫软件&#xff0c;以其可视化操作和强大的模板库而受到青睐。它支持从各种网站上抓取数据&#xff0c;包括文本、图片、文档等&#xff…

MySQL对JSON数据类型的处理

MySQL从5.7版本开始提供了对JSON数据类型的支持&#xff0c;‌使得MySQL能够直接存储和管理JSON格式的数据。‌这使得在数据库中处理JSON数据变得更为方便和高效。‌以下是一些常用的处理JSON数据的函数和操作&#xff1a;‌ 1.‌创建JSON列 CREATE TABLE my_table (id INT A…

uniapp-:class内使用函数报错及解决方法

在开发时&#xff0c;需要根据状态动态的去渲染颜色&#xff0c;这个时候就用到了 :class :class"hColor(2,item, index)" 在vue内开发时&#xff0c;此代码片段可以正常使用 在uniapp内开发时&#xff0c;相同代码报错&#xff0c;因为在uniapp内 :class不支持直接…

优化学习管理:Moodle和ONLYOFFICE文档编辑器的完美结合

目录 前言 一、什么是 Moodle 1、简单快速插入表单字段 3、免费表单模板库 4、开启无缝协作 三、在Moodle中集成ONLYOFFICE文档 四、在Moodle安装使用ONLYOFFICE 1、下载安装 2、配置服务器 3、在Moodle中使用ONLYOFFICE 文档活动 五、未来展望 写在最后 前言 在当今教育科技飞…

启动kafka

启动 kafka 启动 kafka 使用 zookeeper # 启动 zookeeper ./zookeeper-server-start.sh ../config/zookeeper.properties & # 启动 kafka ./kafka-server-start.sh ../config/server.properties &# 关闭 kafka ./kafka-server-stop.sh ../config/server.properties# …

一款人性化的终端用户界面工具

A collection of human friendly terminal user interface. 截图 历史文件预览 注意: find file 依赖 fzf. file browser依赖 ranger / lf / … 安装 git clone https://github.com/StubbornVegeta/StartUp ~/.config/ cd ~/.config/StartUp ./install.sh用法 . $HOME/.…

人员离岗识别摄像机

一种通过摄像技术来监测和识别工作场所员工离开工作岗位的设备。该摄像机能够准确识别员工的面部特征&#xff0c;并通过算法识别出员工是否离开了工作岗位&#xff0c;从而提高工作场所的管理效率。摄像机采用高清摄像头和人脸识别技术&#xff0c;能够精准识别出员工的面部特…

自制电路图为何无法驱动ESP01S?

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

jmeter——添加测试片段

问&#xff1a;为什么要添加测试片段&#xff1f; 答&#xff1a;在测试的过程中&#xff0c;有可能遇到这一个测试需要上一个测试为前提的情况&#xff0c;例如&#xff1a;登录之后才能下单&#xff0c;所以先要进行登录&#xff0c;因此就用到【测试片段】。 1、右键【测试…

【论文阅读】A Closer Look at Parameter-Efficient Tuning in Diffusion Models

Abstract 大规模扩散模型功能强大&#xff0c;但微调定制这些模型&#xff0c;内存和时间效率都很低。 本文通过向大规模扩散模型中插入小的学习器(称为adapters)&#xff0c;实现有效的参数微调。 特别地&#xff0c;将适配器的设计空间分解为输入位置、输出位置、函数形式的…

免费高画质提取PPT/Word/Excel中的图片工具

下载地址&#xff1a;https://pan.quark.cn/s/134ccc35b8a2 软件简介&#xff1a; 好不容易搞到一个几十上百MB的ppt&#xff0c;想导出里面的图片进行二次加工&#xff0c;却被ppt超低画质的图片另存为功能劝退&#xff0c;明知里面全是高清图片&#xff0c;走时却是两手空空…