当前位置: 首页 > news >正文

算法金 | 使用随机森林获取特征重要性

大侠幸会幸会,我是日更万日 算法金;0 基础跨行转算法,国内外多个算法比赛 Top;放弃 BAT Offer,成功上岸 AI 研究院 Leader;

<随机森林及其应用领域> 随机森林是一种强大的机器学习算法,其基本原理在于通过集成多个决策树来提高整体性能。决策树是一种流程图结构,通过一系列的决策来达到最终目标。

而随机森林则是通过构建许多这样的决策树,每个决策树都在某种程度上是独立的,从而提高了模型的稳健性和准确性。这种算法在各种领域都有着广泛的应用。

防失联,进免费知识星球交流。算法知识直达星球:https://t.zsxq.com/ckSu3

  • 项目实战 -
    在接下来的部分,我们深入地探讨特征重要性在实际问题中的运用。我们将使用UCI红酒分类数据集,这个数据集来自UCI机器学习仓库,总共包含了3种红酒,178个样本。每个样本有13个特征,用于描述红酒的各种化学成分。https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data

<加载UCI红酒分类数据集>
数据集概览

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

加载数据集

url = “https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data”
column_names = [“Class”, “Alcohol”, “Malic acid”, “Ash”, “Alcalinity of ash”, “Magnesium”, “Total phenols”, “Flavanoids”, “Nonflavanoid phenols”, “Proanthocyanins”, “Color intensity”, “Hue”, “OD280/OD315 of diluted wines”, “Proline”]
data = pd.read_csv(‘wine-1.csv’, names=column_names)

分割数据集

X = data.drop(“Class”, axis=1)
y = data[“Class”]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

在这段代码的帮助下,我们不需要任何高超的技术,只需要几行简单的代码,就能将这些数据划分成可以训练机器学习模型的形式。

<训练随机森林模型>
构建随机森林模型

创建随机森林分类器

rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42)

在训练集上训练模型

rf_classifier.fit(X_train, y_train)

训练完成后,评估模型

training_accuracy = rf_classifier.score(X_train, y_train)
print(f’训练集准确率:{training_accuracy:.2f}') # 评估训练集上的准确率

test_accuracy = rf_classifier.score(X_test, y_test)
print(f’测试集准确率:{test_accuracy:.2f}') # 评估测试集上的准确率

训练集准确率:1.00测试集准确率:1.0完美!

<查看特征重要性>
特征重要性的计算

决策树是通过计算每次特征划分导致的样本杂质(信息熵等)减少程度,来决定该特征的重要性。RandomForestClassifier会自动计算并存储特征重要性。

获取特征重要性

feature_importance = pd.DataFrame({“Feature”: X_train.columns, “Importance”: rf_classifier.feature_importances_})
feature_importance = feature_importance.sort_values(by=“Importance”, ascending=False)

打印特征重要性

print(feature_importance)

<可视化特征重要性>
import numpy as np
import matplotlib.pyplot as plt

提取特征重要性信息

feature_names = X_train.columns
importances = rf_classifier.feature_importances_
indices = np.argsort(importances)[::-1]

绘制条形图

plt.bar(range(X_train.shape[1]), importances[indices], align=‘center’)

在每个条形图上显示特征重要性数值

for x in range(X_train.shape[1]):
text = ‘{:.2f}’.format(importances[indices[x]])
plt.text(x, importances[indices[x]] + 0.01, text, ha=‘center’)

设置x轴刻度标签

plt.xticks(range(X_train.shape[1]), feature_names[indices], rotation=90)
plt.xlim([-1, X_train.shape[1]])
plt.ylim(0.0, np.max(importances) + 0.05)

添加标签和标题

plt.xlabel(‘Feature’)
plt.ylabel(‘Importance’)
plt.title(‘Random Forest Feature Importance’)

自动调整布局并显示图形

plt.tight_layout()
plt.show()

<自动选择重要特征>
应用特征选择算法

from sklearn.feature_selection import SelectFromModel

使用SelectFromModel进行特征选择

sfm = SelectFromModel(rf_classifier, threshold=‘median’) # 阈值可选,比如threshold=0.1
sfm.fit(X_train, y_train)

选出5个重要特征

X_train_selected = sfm.transform(X_train)
X_test_selected = sfm.transform(X_test)

查看选中的特征

selected_features = X_train.columns[sfm.get_support()]

重新建立模型并在选中特征上进行训练

rf_classifier_selected = RandomForestClassifier(n_estimators=100, random_state=42)
rf_classifier_selected.fit(X_train_selected, y_train)

在测试集上进行预测

y_pred_selected = rf_classifier_selected.predict(X_test_selected)

评估模型性能

accuracy_selected = accuracy_score(y_test, y_pred_selected)

打印选中的特征和模型评估结果

print(“Selected Features:”, list(selected_features))
print(“Model Accuracy with Selected Features:”, accuracy_selected)

自动选择了 7 个重要特征,其中脯氨酸和酒精含量位列前两。这与手动分析特征重要性的结果是一致的。通过运行可以发现,结果和13个特征的方法相当,Cool…


/ __ \ | |
| / / ___ ___ | |
| | / _ \ / _ | |
| _/\ () | () | |
_
/_/ ___/|_|

打完收工 [ 抱拳礼 ]星辰大海,江湖再会,溜了溜了~

相关文章:

算法金 | 使用随机森林获取特征重要性

大侠幸会幸会&#xff0c;我是日更万日 算法金&#xff1b;0 基础跨行转算法&#xff0c;国内外多个算法比赛 Top&#xff1b;放弃 BAT Offer&#xff0c;成功上岸 AI 研究院 Leader&#xff1b; <随机森林及其应用领域> 随机森林是一种强大的机器学习算法&#xff0c;其…...

网络安全的重要性

网络安全的重要性 网络安全是指保护网络系统免受未授权的访问、攻击、破坏或未经授权的数据泄露的能力。随着互联网的普及和数字化进程的加速&#xff0c;网络安全问题日益凸显&#xff0c;成为个人、企业和国家必须面对的重要挑战。 网络安全的威胁 网络安全威胁包括黑客攻…...

Leetcode40 无重复组合之和

题目描述&#xff1a; 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含重复的组合。 思路分析 这个题是…...

详解MATLAB中处理日期和时间的函数

在MATLAB中处理日期和时间时&#xff0c;可以使用多种函数来进行计时和时间差计算。以下是对一些常用函数的详细解释&#xff1a; 1. tic 和 toc 用途&#xff1a;用来测量一段代码执行的时间。用法&#xff1a;tic; % 启动秒表 % 你的代码 elapsedTime toc; % 停止秒表&…...

Java养老护理助浴陪诊小程序APP源码

&#x1f496;护理助浴陪诊小程序&#x1f496; 一、引言&#xff1a;养老新趋势&#x1f331; 在快节奏的现代生活中&#xff0c;养老问题逐渐成为了社会关注的焦点。如何为老年人提供便捷、贴心的服务&#xff0c;让他们晚年生活更加安心、舒适&#xff0c;是我们每个人都需…...

go的singleFlight学习

Package singleflight provides a duplicate function call suppression mechanism “golang.org/x/sync/singleflight” 原来底层是 waitGroup&#xff0c;我还以为等待的协程主动让出 cpu 了&#xff0c;没想到 waitGroup.Wait() 阻塞了 doCall 不但返回值是 func 的 val 和…...

高电压技术-冲击高压发生器MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 冲击电压发生器是产生冲击电压波的装置&#xff0c;用于检验电力设备耐受大气过电压和操作过电压的绝缘性能&#xff0c;冲击电压发生器能产生标准雷电冲击电压波形&#xff0c;雷电冲击电压截波,标准操作冲击…...

【STM32】SysTick系统滴答定时器

1.SysTick简介 CM4内核的处理和CM3一样&#xff0c;内部都包含了一个SysTick定时器&#xff0c;SysTick 是一个24 位的倒计数定时器&#xff0c;当计到0 时 &#xff0c;将 从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除&#xf…...

编码遵循五大设计原则创建出更加健壮、可维护和可扩展的软件系统

一、单一职责原则&#xff08;SRP&#xff09; * 定义&#xff1a;一个类应该只有一个引起它变化的原因。 * 解释&#xff1a;意味着一个类应该专注于做一件事情&#xff0c;当需求发生变化时&#xff0c;只影响到一个类。这有助于降低类间的耦合&#xff0c;使得代码更易于理…...

记录一个问题

问题描述 如果一个物料既在A总成零件号下计算为托盘库&#xff0c;在B总成零件号下计算为箱库&#xff0c;则放于箱库。 A中选择排名第21的递补进托盘库。&#xff08;也需要判断递补的是否在其他总成零件中为箱库&#xff0c;是的话继续递补判断&#xff09; 解决思路 为了…...

ONLYOFFICE 8.1版本桌面编辑器测评:重塑办公效率的巅峰之作

在数字化办公日益普及的今天&#xff0c;一款高效、便捷且功能强大的桌面编辑器成为了职场人士不可或缺的工具。ONLYOFFICE 8.1版本桌面编辑器凭借其卓越的性能和丰富的功能&#xff0c;成功吸引了众多用户的目光。今天&#xff0c;我们将对ONLYOFFICE 8.1版本桌面编辑器进行全…...

【shell脚本速成】python安装脚本

文章目录 案例需求应用场景解决问题脚本思路案例代码 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的每一刻&#xff0c;都沐…...

Redis报错:MISCONF Redis is configured to save RDB snapshots

错误提示内容&#xff1a; 2024-06-25 16:30:49 : Connection: Redis_Server > [runCommand] PING 2024-06-25 16:30:49 : Connection: Redis_Server > Response received : -MISCONF Redis is configured to save RDB snapshots, but it is currently not able to pers…...

关于使用绿联 USB-A转RJ45 2.5G网卡提速的解决问题

问题 网络下载速率低 网线是七类网线&#xff0c;外接的USB网卡驱动 我的自带网卡是 I219v 在嵌入了2.5G网络后一直无法到达1.5G以上。 平均测速300~500M 解决方案 更新了USB的网卡驱动 禁用了 I219-V的驱动。测速即可 USB驱动下载地址 https://download.csdn.net/downlo…...

Qt: QPushButton 按钮实现 上图标下文字

效果如下&#xff1a; 实现有如下几种方式&#xff1a; 1. 使用 QPushButton 设置 setStyleSheet 例&#xff1a; ui->recorder->setStyleSheet("QPushButton{"\"border: 1px solid #00d2ff; "\"min-height: 60px; "\"col…...

使用阿里云效API操作流水线

使用阿里云效&#xff08;Alibaba Cloud DevOps&#xff09;API操作流水线时&#xff0c;需要注意以下几个方面&#xff1a; 认证与授权 确保你已经获取了正确的访问凭证&#xff08;AccessKey ID 和 AccessKey Secret&#xff09;&#xff0c;并且这些凭证具有足够的权限来执行…...

使用命令行创建uniapp+TS项目,使用vscode编辑器

一:如果没有pnpm,先安装pnpm 二:使用npx工具和degit工具从 GitHub 上的 dcloudio/uni-preset-vue 仓库克隆一个名为 vite-ts 的分支,到项目中. 执行完上面命令后,去manifest.json添加appid(自己微信小程序的Id),也可不执行直接下一步,执行pnpm install ,再执行pnpm:dev:mp-weix…...

ABC355 Bingo2

分析&#xff1a; 找出其中一行或列或任意对角线被全部标记&#xff0c;即可输出回合数&#xff0c;否则输出-1 如果x%n0&#xff0c;行是x/n&#xff0c;列是n 如果x%n&#xff01;0&#xff0c;行是x/n1&#xff0c;列是x%n 如果行列或行列n1即为对角线。 标记行列对角线…...

Spring+Vue项目部署

目录 一、需要的资源 二、步骤 1.首先要拥有一个服务器 2.项目准备 vue&#xff1a; 打包: 3.服务器装环境 文件上传 设置application.yml覆盖 添加启动和停止脚本 ​编辑 安装jdk1.8 安装nginx 安装mysql 报错&#xff1a;「ERR」1273-Unknown collation: utf8m…...

【uml期末复习】统一建模语言大纲

前言&#xff1a; 关于uml的期末复习的常考知识点&#xff0c;可能对你们有帮助&#x1f609; 目录 第一部分 概念与基础 第一章 面向对象技术 第二章 统一软件过程 第三章 UML概述 第四章 用例图 第五章 类图 第六章 对象图 第七章 顺序图 第八章 协作图 第九章 状态…...

STM32F103引脚功能全解析:从供电到通信接口的实战配置指南

STM32F103引脚功能全解析&#xff1a;从供电到通信接口的实战配置指南 在嵌入式系统开发中&#xff0c;STM32F103系列微控制器因其出色的性能和丰富的外设资源&#xff0c;成为众多开发者的首选。这款基于ARM Cortex-M3内核的MCU&#xff0c;不仅具备72MHz的主频&#xff0c;还…...

OpenClaw+百川2-13B:个人知识库自动整理与问答系统搭建

OpenClaw百川2-13B&#xff1a;个人知识库自动整理与问答系统搭建 1. 为什么需要本地化知识管理系统 去年整理博士论文资料时&#xff0c;我遇到了一个典型的研究者困境&#xff1a;电脑里堆积了237个PDF、643篇网页存档和无数零散的笔记片段&#xff0c;但需要引用某个概念时…...

AI 自动获客系统正在重构企业线索获取方式

在数字化营销持续深化的当下&#xff0c;企业获客成本逐年攀升&#xff0c;传统 “广撒网” 的线索获取模式早已难以为继。销售团队大量时间耗费在无效线索筛选上&#xff0c;真正用于精准跟进、成交的时间不足两成&#xff0c;人力与投入的失衡让企业陷入增长内耗。而 AI 自动…...

基于comsol的三相电力变压器电磁场与电路耦合计算的电压电流及磁通密度分布分析

comsol三相电力变压器电磁场和电路耦合计算&#xff0c;可以得到变压器高低压绕组电压电流分布以及变压器磁通密度分布三相电力变压器建模这事儿&#xff0c;说难不难说简单也不简单。前两天用COMSOL折腾了个带电路耦合的模型&#xff0c;顺手把绕组电流分布和铁芯磁通都摸清楚…...

STM32温湿度监控系统设计与实现

## 1. 工业生产线温湿度监控系统设计### 1.1 系统架构设计 基于STM32F103C8T6微控制器的工业级温湿度监控系统采用三层架构&#xff1a; - **感知层**&#xff1a;3个DHT22数字温湿度传感器 - **控制层**&#xff1a;STM32F103C8T6最小系统板 - **云平台层**&#xff1a;ESP826…...

Python AI 工具不是越多越好!——3个被低估但日均调用量破50万的轻量级用例工具(附内部灰度测试报告)

第一章&#xff1a;Python AI 工具不是越多越好&#xff01;——轻量级用例工具的价值重估在AI工程实践中&#xff0c;开发者常陷入“工具堆砌陷阱”&#xff1a;为一个文本清洗任务引入 Transformers&#xff0c;为简单分类部署完整 FastAPI ONNX Runtime Redis 缓存栈。这种…...

debian 更新内核后,nvidia 驱动突然不见了,处理

nvidia 驱动通常由 dkms 来构建 安装新内核后&#xff0c; 对应 linux-headers-amd64 没有安装到&#xff0c;导致 dkms 不为新内核 构建驱动 解决办法&#xff1a; apt update apt install linux-headers-amd64 它会自动为已有的内核安装 linux 头文件 然后 用命令 dpkg-recon…...

编写程序让智能洗手液机检测手部靠近,自动出液,无需按压。

&#x1f9fc; 项目实战&#xff1a;基于红外测距的智能洗手液机控制系统一、实际应用场景描述 (Scenario)在机场、医院、办公楼等公共场所&#xff0c;传统的按压式洗手液机存在卫生隐患——每个人都需要接触同一个泵头&#xff0c;容易造成细菌交叉感染。目标&#xff1a;通过…...

springboot基于协同过滤推荐算法的图书借阅推荐系统

目录需求分析与系统设计数据准备与处理协同过滤算法实现推荐系统集成系统测试与优化部署与监控项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作需求分析与系统设计 明确系统的核心功能需求&#xff0c;包括用户管理、图书管理、…...

清华学位论文高效排版:thuthesis模板全场景应用指南

清华学位论文高效排版&#xff1a;thuthesis模板全场景应用指南 【免费下载链接】thuthesis LaTeX Thesis Template for Tsinghua University 项目地址: https://gitcode.com/gh_mirrors/th/thuthesis 在学术写作中&#xff0c;格式规范与内容质量同等重要。thuthesis作…...