决策树算法:随机森林民主算法【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.mzph.cn/news/52511.shtml

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

相关文章

Linux常用命令——dhcpd命令

在线Linux命令查询工具 dhcpd 运行DHCP服务器。 语法 dhcpd [选项] [网络接口]选项 -p <端口> 指定dhcpd监听的端口 -f 作为前台进程运行dhcpd -d 启用调试模式 -q 在启动时不显示版权信息 -t 简单地测试配置文件的语法是否正确的&#xff0c;但不会尝试执行任何网络…

WSL2 Ubuntu20.04 配置 CUDA

前言 本文主要讲解如何在 Widnows 11 环境下的 WSL2&#xff08;Ubuntu20.04&#xff09;配置 CUDA 来启用 GPU 加速&#xff08;本文默认您已经在 Windows 上安装完成 Nvidia CUDA&#xff09; 配置流程 检查驱动 打开 GeForce Experience 检查驱动程序的情况&#xff0c;…

在Qt窗口中添加右键菜单

在Qt窗口中添加右键菜单 基于鼠标的事件实现流程demo 基于窗口的菜单策略实现Qt::DefaultContextMenuQt::ActionsContextMenuQt::CustomContextMenu信号API 基于鼠标的事件实现 流程 需要使用:事件处理器函数(回调函数) 在当前窗口类中重写鼠标操作相关的的事件处理器函数&a…

设计模式之中介者模式(Mediator)的C++实现

1、中介者模式的提出 在软件组件开发过程中&#xff0c;如果存在多个对象&#xff0c;且这些对象之间存在的相互交互的情况不是一一对应的情况&#xff0c;这种功能组件间的对象引用关系比较复杂&#xff0c;耦合度较高。如果有一些新的需求变化&#xff0c;则不易扩展。中介者…

Vue教程(五):样式绑定——class和style

1、样式代码准备 样式提前准备 <style>.basic{width: 400px;height: 100px;border: 1px solid black;}.happy{border: 4px solid red;background-color: rgba(255, 255, 0, 0.644);background: linear-gradient(30deg, yellow, pink, orange, yellow);}.sad{border: 4px …

腾讯云下一代CDN -- EdgeOne加速MinIO对象存储

省流 使用MinIO作为EdgeOne的源站。 背景介绍 项目中需要一个兼容S3协议的对象存储服务&#xff0c;腾讯云的COS虽然也兼容S3协议&#xff0c;但是也只是支持简单的上传下载&#xff0c;对于上传的时候同时打标签这种需求&#xff0c;就不兼容S3了。所以决定自建一个对象存储…

学习JAVA打卡第四十天

对象的字符串表示 在此类中我们讲过&#xff0c;所有的类都默认是java.lang包中object类的子类或间接子类。 Object类有一个public String toString&#xff08;&#xff09;方法,一个对象通过调用该方法可以获得该对象的字符串表示。一个对象调用toString法&#xff08;&…

AURIX TriCore内核架构学习笔记

名词缩写 ISA - Instruction Set Architecture&#xff0c;指令集架构PC - Program Counter, holds the address of the instruction that is currently runningGPRs - 32 General Purpose RegistersPSW - Program Status WordPCXI - Previous Context InformationCSA - Conte…

【Python编程】将同一种图片分类到同一文件夹下,并且将其分类的路径信息写成txt文件进行保存

注&#xff1a;数据结构同上一篇博文类似 一、代码 import os import cv2 import shutilpath0os.getcwd()\\apple\\RGB path1os.getcwd()\\apple\\tof_confidence # path2os.getcwd()\\apple\\tof_depth # path3os.getcwd()\\apple\\tof_depthRGB # path4os.getcwd()\\apple\…

HTML番外篇(五)-移动端适配

一、媒体查询 1.认识媒体查询 媒体查询是一种提供给开发者针对不同设备需求进行定制化开发的一个接口。 你可以根据设备的类型&#xff08;比如屏幕设备、打印机设备&#xff09;或者特定的特性(比如屏幕的宽度)来修改你的页面。 媒体查询的使用方式主要有三种&#xff1a;…

Linux socket网络编程概述 和 相关API讲解

socket网络编程的步骤 大体上&#xff0c;连接的建立过程就是&#xff1a;服务器在确定协议类型后&#xff0c;向外广播IP地址和端口号&#xff0c;并监听等待&#xff0c;直到客户端获取了IP地址和端口号并成功连接&#xff1a; 使用socket来进行tcp协议的网络编程的大体步骤…

Qt快速学习(二)--QMainWindow,对话框,布局管理器,常用控件

目录 1 QMainWindow 1.1 菜单栏 1.2 工具栏 1.3 状态栏 1.4 铆接部件 1.5 核心部件&#xff08;中心部件&#xff09; 1.6 资源文件 2 对话框QDialog 2.1 基本概念 2.2 标准对话框 2.3 自定义消息框 2.4 消息对话框 2.5 标准文件对话框 3 布局管理器 3.1 系统…

axios / fetch 实现 stream 流式请求

axios 是一个支持node端和浏览器端的易用、简洁且高效的http库。本文主要介绍 axios 如何实现 stream 流式请求&#xff0c;注意这里需要区分 node 环境和浏览器环境。 一、node端 代码演示&#xff1a; const axios require(axios);axios({method: get,url: http://tiven.c…

Spring Boot 整合MyBatis-Plus

&#x1f600;前言 本篇博文是关于Spring Boot 整合MyBatis-Plus的&#xff0c;希望你能够喜欢&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的…

储能运行约束的Matlab建模方法

最近一段时间有很多人问我最优潮流计算中储能系统的建模方法。部分朋友的问题我回复了&#xff0c;有些没有回消息的&#xff0c;我就不再一一回复了&#xff0c;在这里我写一篇博客统一介绍一下。 1.储能系统介绍 首先&#xff0c;让【GPT】简单介绍一下储能系统&#xff1a;…

Maven解析

目录 Maven的概念 Pom 项目坐标 仓库 Maven环境搭建 安装jdk 配置maven 配置本地仓库地址 配置阿里云 maven 镜像仓库&#xff0c;下载速度更快 在idea中配置maven ​编辑 pom中名词解释 Maven命令 Maven的概念 Maven 是 Apache 软件基金会的一个开源项目,是一个…

PhantomJS+java 后端生成echart图表的图片

PhantomJSjava 后端生成echart图表的图片 前言源码效果实现echarts-convertPhantomJS实现echarts截图得到图片java延时读取base64数据 参考 前言 该项目仅用作个人学习使用 源码 地址 docker镜像&#xff1a; registry.cn-chengdu.aliyuncs.com/qinjie/java-phantomjs:1.0 …

航空电子设备中的TSN通讯架构—直升机

前言 以太网正在迅速取代传统网络&#xff0c;成为航空电子设备和任务系统的核心高速网络。本文提出了以太网时间敏感网络(TSN)在航空电子设备上应用的技术优势问题。在实际应用中&#xff0c;TSN已成为一个具有丰富的机制和协议的工具箱&#xff0c;可满足与时间和可靠性相关…

vue2 computed计算属性,watch侦听器

一、今日学习目标 1.指令补充 指令修饰符v-bind对样式增强的操作v-model应用于其他表单元素 2.computed计算属性 基础语法计算属性vs方法计算属性的完整写法成绩案例 3.watch侦听器 基础写法完整写法 二、指令修饰符 1.什么是指令修饰符&#xff1f; 所谓指令修饰符就是…

windows下cmd快速生成大文件命令

fsutil file createnew [文件名] [文件大小]