【Python】多分类算法—Random Forest

2023-11-12

【Python】多分类算法—Random Forest

本文将主要就Random Forest(随机森林)的多分类应用进行描述,当然也可运用于二分类中。本文运用scikit-learn框架。



一、导入基础库

导入数据处理和绘图的相关库,为使层次更加分明,将在后面再导入scikit-learn框架。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

二、数据读取及处理

1.数据读取

从csv文件中读取设备数据,代码如下:

# 读取数据
dataset = pd.read_csv('test_data.csv')
print(dataset)

数据形式大概如下,x为设备数据,class为数据特征,这里分为三类:
(真实数据不便展示,截图只是做展示,这里可下载iris鸢尾花数据集https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data)
在这里插入图片描述

2.数据处理

接下来进行数据预处理,将x作为自变量X,class作为自变量y。

# 数据预处理 选择自变量x 因变量y
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 3].values

三、基于scikit-learn的随机森林

1.训练集和测试集

利用scikit-learn中的train_test_split模块将数据拆分为训练集和测试集。

# 将数据集拆分为训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=0)

2.标准化

为消除数据差值太大带来的影响,利用StandardScaler进行标准化,突出数据集的特征。

# 数据标准化 特征标度
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

3.训练

在scikit-learn中,采用随机森林模块RandomForestClassifier,对训练数据进行训练。
n_estimators表示随机森林中树的数量, criterion='entropy’表示选用entropy信息熵来寻找节点和分枝, random_state表示随机模式参数。

from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier(n_estimators=50, criterion='entropy', random_state=42)
classifier.fit(X_train, y_train)
print("X_train:", X_train)
print("y_train:", y_train)

3.预测

在模型训练好后,利用测试数据集进行预测。对测试集的分类实质上是通过测试集数据去预测因变量y,即表格中的class。

y_pred = classifier.predict(X_test)
print("X_test:", X_test)
print("y_pred:", y_pred)

4.输出结果

最后采用scikit-learn中自带的分类器将预测结果输出,包括confusion matrix、Classification Report、Accuracy。

from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
result = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(result)
result1 = classification_report(y_test, y_pred)
print("Classification Report:", )
print(result1)
result2 = accuracy_score(y_test, y_pred)
print("Accuracy:", result2)

从confusion matrix的结果可以看出,分类0被抽取的随机数量为62,预测准确数量为62;分类1被抽取的数量为240,预测准确数量为232;分类2被抽取的数量为33,预测准确数量为33。
在这里插入图片描述
precision表示准确率,recall表示召回率,f1-score表示precision和recall的调和平均值。
在这里插入图片描述
Accuracy为随机森林分类的准确性,结果表明准确率为97.6%。
在这里插入图片描述


总结。

本文主要介绍了随机森林进行多分类的大致步骤,准确率还算不错,关于RandomForestClassifier中的具体参数设置可以参考官网教程sklearn.ensemble.RandomForestClassifier

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Python】多分类算法—Random Forest 的相关文章

  • Tkinter:消息小部件中锚点选项的正确值是多少?

    我一直在学习 tkinterTkinter 中的消息小部件 https python course eu tkinter message widget in tkinter php at Python 课程和教程 https python
  • 定义Python源代码编码的正确方法

    PEP 263 http www python org dev peps pep 0263 定义如何声明Python源代码编码 通常 Python 文件的前两行应以以下内容开头 usr bin python coding
  • Python re无限执行

    我正在尝试执行这段代码 import re pattern r w w s re compiled re compile pattern results re compiled search COPRO HORIZON 2000 HOR p
  • 数据框 - 平均列

    我在 pandas 中有以下数据框 Column 1 Column 2 Column3 Column 4 2 2 2 4 1 2 2 3 我正在创建一个数据框 其中包含第 1 列和第 2 列 第 3 列和第 4 列等的平均值 ColumnA
  • 如何使用 Python boto3 获取 redshift 中的列名称

    我想使用 python boto3 获取 redshift 中的列名称 创建Redshift集群 将数据插入其中 配置的机密管理器 配置 SageMaker 笔记本 打开Jupyter Notebook写入以下代码 import boto3
  • 使用 Pytest 的参数化添加测试功能的描述

    当其中一个测试失败时 可以在测试正在测试的内容的参数化中添加描述 快速了解测试失败的原因 有时您不知道测试失败的原因 您必须查看代码 通过每个测试的描述 您就可以知道 例如 pytest mark parametrize num1 num2
  • 以类型化内存视图作为成员的结构定义

    目前我正在尝试让一个具有类型化内存视图的结构能够工作 例如 ctypedef struct node unsigned int inds 如果 inds 不是内存视图 据我所知 它可以完美地工作 然而 通过内存视图并使用类似的东西 def
  • python celery -A 的无效值无法加载应用程序

    我有一个以下项目目录 azima init py main py tasks py task py from main import app app task def add x y return x y app task def mul
  • 如何使用 opencv python 计算乐高积木上的孔数?

    我正在开发我的 python 项目 我需要计算每个乐高积木组件中有多少个孔 我将从输入 json 文件中获取有关需要计算哪个程序集的信息 如下所示 img 001 red 0 blue 2 white 1 grey 1 yellow 1 r
  • 在 Mac OSX 上从 Python 3.6 运行 wine 命令

    我正在尝试用 Python 编写一个打开的脚本wine然后发送代码到wine终端打开一个 exe程序 这 exe程序也是命令驱动的 我可以打开wine 但我无法进一步 import shlex subprocess line usr bin
  • 使用标签或 href 传递 Django 数据

    我有一个包含链接的表 当单击该链接进行更多操作时 我想将一些数据传递给我的函数 my html table tbody for query in queries tr td value a href internal my func que
  • 为什么在Python解释器中输入_会返回True? [复制]

    这个问题在这里已经有答案了 我的翻译行为非常奇怪 gt gt gt True gt gt gt type True
  • 检索 geodjango 多边形对象的边界框

    如何在 geodjango 中获取 MultiPolygon 对象的边界框 在 API 中找不到任何内容http geodjango org docs geos html http geodjango org docs geos html
  • 为正则表达式编写解析器

    即使经过多年的编程 我很羞愧地说我从未真正完全掌握正则表达式 一般来说 当问题需要正则表达式时 我通常可以 在一堆引用语法之后 想出一个合适的正则表达式 但我发现自己越来越频繁地使用这种技术 所以 自学并理解正则表达式properly 我决
  • 将字符串中的随机字符转换为大写

    我尝试随机附加文本字符串 这样就不只是有像这样的输出 gt gt gt david 我最终会得到类似的东西 gt gt gt DaViD gt gt gt dAviD 我现在的代码是这样的 import random import stri
  • numpy polyfit 中使用的权重值是多少以及拟合误差是多少

    我正在尝试对 numpy 中的某些数据进行线性拟合 Ex 其中 w 是该值的样本数 即对于点 x 0 y 0 我只有 1 个测量值 该测量值是2 2 但对于这一点 1 1 我有 2 个测量值 值为3 5 x np array 0 1 2 3
  • 寻找完美的正方形

    我有这个Python代码 def sqrt x ans 0 if x gt 0 while ans ans lt x ans ans 1 if ans ans x print x is not a perfect square return
  • Jupyter Notebook:带有小部件的交互式绘图

    我正在尝试生成一个依赖于小部件的交互式绘图 我遇到的问题是 当我使用滑块更改参数时 会在前一个绘图之后完成一个新绘图 而我预计只有一个绘图会根据参数发生变化 Example from ipywidgets import interact i
  • 如何使用xlwt设置文本颜色

    我无法找到有关如何设置文本颜色的文档 在 xlwt 中如何完成以下操作 style xlwt XFStyle bold font xlwt Font font bold True style font font background col
  • Python 中的 Unix cat 函数 (cat * > merged.txt)? [复制]

    这个问题在这里已经有答案了 一旦建立了目录 有没有办法在Python中使用Unix中的cat函数或类似的函数 我想将 files 1 3 合并到 merged txt 我通常会在 Unix 中找到该目录 然后运行 cat gt merged

随机推荐

  • 遍历实体包含的List

    for ShopGoodSpec s shopgood getSpecs s setGoods id shopgood getGoods id
  • springboot 注解实现AOP记录日志

    AOP AOP为Aspect Oriented Programming的缩写 意为 面向切面编程 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 在日常开发当中经常用来记录日志 方法跟踪 事务 权限等 切面方法说明 Aspe
  • 疯壳AI语音及人脸识别教程2-5中断

    目录 1 1寄存器 1 1 2实验现象 4 视频地址 https fengke club GeekMart su f9cTSxNsp jsp 官方QQ群 457586268 中断 接口数据传送控制方式有查询 中断和DMA等 中断是重要的接口
  • RPC学习笔记【一】:概述

    文章目录 一 简介 1 1 引言 1 2 架构的演变过程 二 RPC 的设计 2 1 设计目标 2 2 核心问题 01 通信方式 02 协议 03 序列化 04 远程代理类 2 3 衍生方案 注册中心 一 简介 1 1 引言 RPC 是远程
  • 相对路径

    相对 绝对路径 顾名思义 相对路径是相对于当前文件的路径 一般是较简短的 那么我们为什么不直接使用绝对路径 也就是文件存放的真实路径 例如 C Microsoft test txt 为什么要用相对路径 当我们把整个程序移动位置时 其中的链接
  • 在 IBM AIX 7.1 上安装 IBM XL C/C++

    开发牛人们注意了 你会在AIX 7 1上安装XL C C 么 这里与您分享一篇在 IBM AIX 7 1 上安装 IBM XL C C 的技术文章 记得闲暇之时阅读哦 好了废话少说 来一起了解下吧 本教程将介绍如何在 IBM AIX 7 1
  • 【微信小程序】小程序template模板使用详解

    1 创建模板文件 2 创建的模板文件只能使用wxml和wxss文件 可以在js文件中模拟逻辑操作 但最后这些逻辑操作是要写在调用模板的文件的JS文件中的 因为调用模板的时候 模板中的JS文件是不起作用的 模板中的逻辑都要在调用的文件中处理
  • Vue技术—自定义指令

    自定义指令总结 一 定义语法 1 局部指令 new Vue directives 指令名 配置对象 或 new Vue directives 指令名 回调函数 2 全局指令 Vue directive 指令名 配置对象 或 Vue dire
  • Bitlocker恢复密钥验证方法

    在重装系统或者更新系统的时候可能会出现这个情况或者你的组织可能设有密码安全策略 在尝试登录失败超过一定次数之后便锁定 再或者可能是你的电脑遇到硬件故障 意外的配置更改或其他安全事件 需要恢复密钥可帮助确保仅授权人员才可解锁你的电脑并还原对你
  • Elasticsearch 安装和后台运行(真实有效,Mac版本已经验证)

    如何安装一个程序 在日常的工作和学习中 例如学习一个新技术 经常需要安装一些程序 那么这个时候 最推荐的就是区技术的官网 学习最新的安装方法 进行安装 一 Mac安装Elasticsearch 关于Elasticsearch的安装 在官网安
  • linux服务器创建root账户

    Linux创建root账户 创建普通账号 修改已经存在的普通账户为root账户 创建一个root类型的账号 创建普通账号 linux创建一个普通系统用户 useradd test 创建test用户 passwd test 创建 更新test
  • 贝叶斯分类器详解 从零开始 从理论到实践

    贝叶斯分类器详解 从零开始 从理论到实践 大纲总览 一 贝叶斯相关概念 1 1 频率学派和贝叶斯学派 1 1 1 频率学派 1 1 2 贝叶斯学派 1 2 概率论基础知识 1 3 贝叶斯定理 二 概率的分布 2 1 离散概率分布 2 1 1
  • 网络层协议(IP协议)

    1 IP层主要有如下作用 数据传输 将数据从一个主机传输到另一个主机 寻址 根据子网划分和IP地址 发现正确的主机地址 路由选择 选择数据在互联网上的传输路径 数据报文分段 当传送的数据大于MTU时 将数据进行分段发送和接收并组装 2 IP
  • C# 数据库介绍及基本操作

    数据库 Database 是按照数据结构来组织 存储和管理数据的仓库 主要作用 1 实现数据共享 2 减少数据的冗余度 3 实现数据独立 分类 相关联 便于集中控制 主流数据库种类 Oracle 甲骨文公司 大型数据库 SQL Struct
  • python 下实现xgboost 调参演示

    基于前阵子京东金融JDD数据探索大赛比赛拿下总决赛季军的经验 发现xgboost真的是一个很好的利器 精确度的提升是很疯狂的 从最远先使用的RF模型到XGBOOST模型 精确度可以说提升了0 3的跨度 相信很多人跟我一样都被xgboost惊
  • hihocoder #1000 : A + B Java实现

    时间限制 1000ms 单点时限 1000ms 内存限制 256MB 描述 求两个整数A B的和 输入 输入包含多组数据 每组数据包含两个整数A 1 A 100 和B 1 B 100 输出 对于每组数据输出A B的和 样例输入 1 2 3
  • 子序列问题

    子序列问题 双指针 动态规划 例题一 判断子序列 力扣392 链接 https leetcode cn com problems is subsequence 题目描述 给定字符串 s 和 t 判断 s 是否为 t 的子序列 字符串的一个子
  • 如何在Power Linux上运行AIX程序(实现验证,附源码开源地址)

    最后更新2021 01 21 静心研究了小半年 终于把原型验证搞定了 可以在Power Linux上直接运行AIX程序 当然 目前只是实现了POC 还有大量的工程工作 源代码地址 https gitee com HarryHurryHung
  • 不用==用equals引发的一系列思考

    毕业刚工作的时候 带我的小师傅给我说判断相等使用equals不要使用 第一次写java的我照办了 但是不清楚为什么 之后还是决定真正了解一下java本身 于是开始看jdk源码 这里以Integer为例 equal public boolea
  • 【Python】多分类算法—Random Forest

    Python 多分类算法 Random Forest 本文将主要就Random Forest 随机森林 的多分类应用进行描述 当然也可运用于二分类中 本文运用scikit learn框架 文章目录 Python 多分类算法 Random F