决策树算法:随机森林民主算法【02/2】

决策树民主:随机森林算法

一、介绍:

        记住您在阅读亚马逊上的所有评论后进行的最后一次购买,或者在查看 IMDb 评级后您观看的以前的电影。人类是社会动物,他人的意见和行为自然会影响我们。我们的决定在很大程度上取决于“群体智慧”的概念,即群体的集体决策和选择可以平均个人的偏见和错误,并提出更准确的答案。

        随机森林算法的工作方式类似,其中最终决策是通过对多个机器学习模型的输出执行多数计数或平均值来做出的。要理解随机森林算法,我们必须熟悉决策树打包集成学习,因为这两个概念构成了骨干。

二、决策树:

        决策树是一种监督学习算法它使用树状结构根据输入数据做出决策。它将数据划分为分支,并将结果分配给叶节点。

        简单来说,决策树是 if-else 语句的广泛集合。在这里,我添加了一个指向我上一篇文章的链接,其中我已经清楚地解释了决策树算法。

三、装袋集成学习:

        bagging 代表 引导聚合。它是使用最广泛的集成学习技术之一。集成学习是一种结合多个机器学习模型以创建更准确、更健壮的模型的技术。有许多集成学习技术,例如:

  • 装袋
  • 提高
  • 堆垛

简单来说,bagging 集成学习技术结合了多个机器学习模型的结果,以提高整体性能。

构成Bagging Ensemble Learning技术思想的两个最重要的概念是Bootstrapping和Aggregation。

3.1 引导:

        Bootstrapping是机器学习中的一个统计术语,是指将大型数据集随机采样为小子集。此外,每个引导示例用于训练多个模型。

        这是减少过度拟合的一种非常有效的方法。此方法提高了整体机器学习模型的准确性和鲁棒性。我们可以通过对行和列或两者进行采样来实现引导,如下所示:

  • 使用替换的行采样:在此方法中,从数据集中选择随机行并进行替换,这意味着子数据集中可以多次出现每一行。
  • 无保留的行采样: 在此方法中,从数据集中选择随机行而不进行替换,这意味着每行在子数据集中只能出现一次,这意味着子数据集中的所有行都是唯一的。
  • 列/特征采样与替换: 在此方法中,从数据集中选择随机列或特征并进行替换,这意味着每个列可以在子数据集中多次出现。
  • 无保留的列/特征采样: 在此方法中,从数据集中选择随机列或特征而不进行替换,这意味着每列在子数据集中只能出现一次,这意味着子数据集中的所有列都是唯一的。
  • 行和列的组合采样: 在此方法中,为子数据集选择随机行和列。

3.2 集合体:

聚合是指袋装集成学习的最后阶段,在该阶段中,我们根据各自袋装集成学习中使用的多个机器学习模型的输出,在分类的情况下执行多数计数,在回归问题的情况下执行平均值

聚合可提高模型的准确性。通过组合多个数据点,模型可以了解有关数据基础分布的更多信息。

 

Bagging Ensemble Learning,来源:作者图片

四、什么是随机森林算法?

随机森林是一种监督式机器学习算法,可提高决策树的性能和预测能力。 随机森林中的术语“森林”是指在训练阶段协同工作的决策树的集合。

        随机森林算法由Leo Breiman和Adele Cutle给出。

最重要的关键是,如果bagging ensemble learning技术中使用的所有机器学习模型或算法都是决策树,则称为随机森林。

        在分类的情况下,它执行多数计数,而在回归中,它计算多个决策树的平均值。

决策树和随机森林,来源:作者图片

 

上图显示了数据如何在 n 个决策树之间划分,每个决策树生成不同的结果。我们在分类问题的情况下执行多数计数,在回归的情况下执行平均值。

五、随机森林算法如何工作?

        在这里,我将向你们直观地了解随机森林算法在幕后的工作原理,并附上逐步解释。

5.1. 导入数据集:

        在这里,我采用一个包含 400 行和五列的数据集,其中三列被选择为输入:“性别”、“年龄”和“估计工资”,“购买”列设置为输出。

import pandas as pd
df = pd.read_csv('social_network.csv')
df.head()
 

我对数据集的分类“性别”列执行了一个热编码,并删除了该列的“用户ID”:

df = df.iloc[:, 1:]
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['Gender'] = le.fit_transform(df['Gender'])
df.head()
 

2. 将整个数据集拆分为训练和测试子数据集:

在此步骤中,我将整个数据集拆分为训练集和测试集;我没有使用 sklearn 模型选择,而是手动执行了它。我在 .sample 方法的帮助下通过传递 replace = False 选择了随机的唯一行

# train dataset:
df_train = df.sample(350, replace=False)
# random 350 rows will be selected
# and all rows will be unique because, replace = False# test dataset:
df_test = df.sample(50, replace=False)
x_test = df_test.iloc[:, :3]
y_test = df_test.iloc[:, 3]

3. 引导:

        正如我所提到的,在随机森林算法中,相同的数据集被划分为不同的子数据集,每个子数据集被馈送到不同的决策树。基于这个概念,我编写了一个引导函数,将整个数据集拆分为不同行的随机子集。

        我通过将整个数据集划分为多个子集来执行引导。具体来说,“行采样与替换”。

# function to randomly select specified number of rows from the training dataset:
from sklearn.preprocessing import StandardScaler
def random_rows(df, n):df = df.sample(n, replace=True) # replace=True, there will be duplicate rows sc = StandardScaler()x_train = df.iloc[:, :3].valuesx_train = sc.fit_transform(x_train)y_train = df.iloc[:, 3]return x_train, y_train
x_train, y_train = random_rows(df_train, 115)
# random 115, rows will be selected from the training datasetprint(x_train)
print(y_train)

输出:x_train

 

output: y_train

 

从行索引号中我们可以清楚地看到,所有行都是随机选择的子集。

4. 构建多个决策树模型:

        在这里,我为三种决策树算法创建了三个子集;所有三个子数据集都将具有可替换的随机行,这意味着同一行可以出现多次。

x1, y1 = random_rows(df_train, 115)
x2, y2 = random_rows(df_train, 115)
x3, y3 = random_rows(df_train, 115)

Three decision tree models are as follows:

from skleran.tree import DecisionTreeClassifier
# decision tree model 1:
dt1 = DecisionTreeClassifier()
dt1.fit(x1, y1)# decision tree model 2:
dt2 = DecisionTreeClassifier()
dt2.fit(x2, y2)# decision tree model 3:
dt3 = DecisionTreeClassifier()
dt3.fit(x3, y3)

5. 测试阶段:

在最后阶段,我将输入值从测试数据集传递到所有决策树并执行多数计数。

print(x_test.head())
print(y_test.head())

输出:x_test

 

输出:y_test

 

xs = sc.fit_transform(x_test)
test = xs[3,:].reshape(1, 3)
print("Result of decision tree 1: ", dt1.predict(test))
print("Result of decision tree 2: ", dt2.predict(test))
print("Result of decision tree 3: ", dt3.predict(test))
 

        所有决策树的上述结果显示多数计数为 [1]。因此,最终值为 [1]。为了证明结果,我们可以看到测试数据集中行索引 307 的值为 [1],因此进行了验证。

六、使用 sklearn 库实现随机森林算法:

# imported the required libraries:
import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt
import seaborn as sns# imported the dataset:
df = pd.read_csv('social_network.csv')
df = df.iloc[:, 1:]# performed One Hot Encoding on the gender column: 
le = LabelEncoder()
df['Gender'] = le.fit_transform(df['Gender'])# split the dataset into train and test:
x = df.iloc[:, 0:3].values
y = df.iloc[:, 3]
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=42, test_size=0.2)# decision tree algorithm model:
dt = DecisionTreeClassifier()
dt.fit(x_train, y_train)# random forest model:
rf = RandomForestClassifier(n_estimators=300)
rf.fit(x_train, y_train)# testing phase for both decision tree and random forest
y_pred1 = dt.predict(x_test)
y_pred2 = rf.predict(x_test)# accuracy score and cofusion matrix of decision tree and random forest:
print("Accuracy Score of decision tree: ", accuracy_score(y_test, y_pred1))
sns.heatmap(confusion_matrix(y_test, y_pred1), annot=True)
plt.title("Confusion Matrix of Decision Tree")
plt.show()print("Accuracy Score of random forest: ", accuracy_score(y_test, y_pred2))
sns.heatmap(confusion_matrix(y_test, y_pred1), annot=True)
plt.title("Confusion Matrix of Random Forest")
plt.show()

 

 决策树和随机森林的混淆矩阵

从上面的例子中,我们可以看到单个决策树的准确率得分为:85%,而随机森林的准确率得分为:91%,准确率提高了近6%。

七、随机森林算法的优点:

        在多个优点中,最重要的两个是:

  • 准确性:随机森林是一种非常精确的算法,特别擅长处理具有许多特征的复杂数据集。
  • 鲁棒性:随机森林是一种稳健的算法,这意味着它不容易受到数据中的噪声或异常值的影响。因为异常值分布在多个子数据集中。

八、结论:

        请记住,我提到了决策树的民主:随机森林,因为随机森林像民主一样运作。在民主国家,具有多数投票规则的政党,同样是随机森林,在分类问题的情况下根据多数票做出最终决定。在这里,我添加了一个指向在乳腺癌数据集上执行的随机森林算法项目的链接。GitHub - mrinmoyxb/Breast-Cancer-Detection-Model: Machine Learning Breast Cancer Detection model performed using Random Forest Algorithm

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

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

相关文章

Matlab分割彩色图像

彩色图像 彩色图像除有亮度信息外,还包含有颜色信息。以最常见的RGB(红绿蓝)彩色空间为例来简要说明彩色图像: 彩色图像可按照颜色的数目来划分。例如,256色图像和真彩色图像(2的16次方=21677…

智信数科SMS短信平台安装教程

智信SMS客户端下载 使用智信SMS短信平台前,需要前往公司官网或者百度网盘共享地址下载最新版本的短信平台。 下载地址一:公司官网 下载地址二:百度网盘共享(推荐) 智信SMS客户端安装 安装前,确保您已经正…

【MySQL系列】Select语句单表查询详解(二)ORDERBY排序

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

Oracle的学习心得和知识总结(二十八)|Oracle数据库数据库回放功能之论文二翻译及学习

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《Oracle Database SQL Language Reference》 2、参考书籍:《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…

私有化部署即时通讯平台,30分钟替换钉钉和企业微信

随着企业对即时通讯和协作工具的需求不断增长,私有化部署的即时通讯平台成为企业的首选。WorkPlus作为有10余年行业深耕经验与技术沉淀品牌,以其安全高效的私有化部署即时通讯解决方案,帮助企业在30分钟内替换钉钉和企业微信。本文将深入探讨…

adb 命令

1.adb shell dumpsys activity top | find "ACTIVITY" 查看当前运行的activity包名 2.adb shell am start -n 包名/页面名 打开应用的页面 3.查看将要启动或退出app的包名 adb shell am monitor 只有在启动或退出的时候才会打印 4.查看当前启动应用的包名 ad…

【动手学深度学习】--20.目标检测和边界框

文章目录 目标检测和边界框1.目标检测2.边界框 目标检测和边界框 学习视频:物体检测和数据集【动手学深度学习v2】 官方笔记:目标检测和边界框 在图像分类任务中,我们假设图像中只有一个主要物体对象,我们只关注如何识别其类别…

用Idea把SpringBoot项目打包镜像上传至docker

1、设置docker把2375端口开起来 命令查看docker装在哪里 vim docker.service 新增 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock 2、配置Dockerfile 我在跟pom同一层 3、配置docker-maven-plugin <plugin><groupId>com.spotify</groupId><arti…

c语言调用mciSendString播放音乐

如下所示&#xff0c;这是一个使用c语言调用系统方法mciSendString()&#xff0c;让系统播放音乐的示例&#xff1a; baihuaxiang 代码&#xff1a; #include <graphics.h> #include <Windows.h> #include <mmsystem.h>#pragma comment(lib,"WINMM.LIB…

element-ui中的el-table合并单元格

描述&#xff1a; 在写项目的时候有时候会经常遇到把行和列合并起来的情况&#xff0c;因为有些数据是重复渲染的&#xff0c;不合并行列会使表格看起来非常的混乱&#xff0c;如下&#xff1a; 而我们想要的数据是下面这种情况&#xff0c;将重复的行进行合并&#xff0c;使表…

STM32设置为I2C从机模式(HAL库版本)

STM32设置为I2C从机模式&#xff08;HAL库版本&#xff09; 目录 STM32设置为I2C从机模式&#xff08;HAL库版本&#xff09;前言1 硬件连接2 软件编程2.1 步骤分解2.2 测试用例 3 运行测试3.1 I2C连续写入3.2 I2C连续读取3.3 I2C单次读写测试 4 总结 前言 我之前出过一篇关于…

XXX程序 详细说明

用于记录理解PC程序的程序逻辑 1、程序的作用 根据原作者的说明&#xff08;文件说明.txt&#xff09;&#xff0c;该程序 (PC.py) 的主要作用是提取某一个文件夹中的某个设备 (通过config中的信息看出来是Ag_T_8) 产生的日志文件&#xff0c;然后提取其中某些需要的数据&…

内网渗透神器CobaltStrike之权限提升(七)

Uac绕过 常见uac攻击模块 UAC-DLL UAC-DLL攻击模块允许攻击者从低权限的本地管理员账户获得更高的权限。这种攻击利用UAC的漏洞&#xff0c;将ArtifactKit生成的恶意DLL复制到需要特权的位置。 适用于Windows7和Windows8及更高版本的未修补版本 Uac-token-duplication 此攻…

Web3和去中心化:互联网的下一个演化阶段

文章目录 Web3和去中心化的定义Web3&#xff1a;去中心化&#xff1a; 为什么Web3和去中心化如此重要&#xff1f;数据隐私和安全&#xff1a;去中心化的创新&#xff1a;去除中间商&#xff1a; Web3和去中心化的应用领域去中心化金融&#xff08;DeFi&#xff09;&#xff1a…

Qt下使用ModbusTcp通信协议进行PLC线圈/保持寄存器的读写(32位有符号数)

文章目录 前言一、引入Modbus模块二、Modbus设备的连接三、各寄存器数据的读取四、各寄存器数据的写入五、示例完整代码总结 前言 本文主要讲述了使用Qt的Modbus模块来进行ModbusTcp的通信&#xff0c;实现对PLC的线圈寄存器和保持寄存器的读写&#xff0c;基于TCP/IP的Modbus…

设计模式大白话——命令模式

命令模式 一、概述二、经典举例三、代码示例&#xff08;Go&#xff09;四、总结 一、概述 ​ 顾名思义&#xff0c;命令模式其实和现实生活中直接下命令的动作类似&#xff0c;怎么理解这个命令是理解命令模式的关键&#xff01;&#xff01;&#xff01;直接说结论是很不负责…

MindManager

MindManager 简介下载安装crack 简介 MindManager是一款由Mindjet公司开发的思维导图软件。思维导图是一种图形化的方法&#xff0c;用于在一个中心主题周围组织和呈现各种相关思想、想法和信息。MindManager允许用户创建、编辑和共享思维导图&#xff0c;以帮助他们更好地组织…

【Unity3D赛车游戏】【四】在Unity中添加阿克曼转向,下压力,质心会让汽车更稳定

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

SMC状态机 讲解2 从模型到SMC

SMC状态机 讲解2 从模型到SMC 1、实例化有限状态机&#xff08;FSM)2、简单转换 Simple Transition3、外部环回转换 External Loopback Transition4、内部环回转换 Internal Loopback Transition5、转换动作6、转换Guard7、转换参数8、Entry 和 Exit动作9、Push 转换10、Pop转换…

鼠标拖拽盒子移动

目录 需求思路代码页面展示【补充】纯js实现 需求 浮动的盒子添加鼠标拖拽功能 思路 给需要拖动的盒子添加鼠标按下事件鼠标按下后获取鼠标点击位置与盒子边缘的距离给 document 添加鼠标移动事件鼠标移动过程中&#xff0c;将盒子的位置进行重新定位侦听 document 鼠标弹起&a…