「日拱一码」081 机器学习——梯度增强特征选择GBFS

目录

什么是梯度增强特征选择(GBFS)

为什么 GBM 适合做特征选择

GBFS 的一般步骤

代码示例


什么是梯度增强特征选择(GBFS)

GBFS 并非一个像 Lasso 或随机森林那样有严格标准定义的独立算法,而是一种基于梯度提升机(Gradient Boosting Machine, GBM)模型来进行特征选择的思想和策略

其核心思想是:利用训练好的 GBM 模型(如 XGBoost, LightGBM, CatBoost)内置的特征重要性评分,来识别并选择对预测目标最重要的特征子集

为什么 GBM 适合做特征选择

  1. 内置的特征重要性(Feature Importance):大多数 GBM 实现都会自动计算特征重要性。最常见的两种计算方式是:

    • 基于分裂(Gain): 衡量一个特征在所有树中被用于分裂时,所带来的不纯度(如基尼系数、均方误差)减少的总和。这是最常用、最可靠的指标。
    • 基于频率(Frequency): 衡量一个特征在所有树中被用作分裂点的次数。
  2. 强大的非线性拟合能力:GBM 能够捕捉特征与目标之间复杂的非线性关系和交互效应,因此其评估出的特征重要性比一些线性模型(如 Lasso)更全面。

  3. 抗过拟合和鲁棒性:通过集成多棵弱学习器(树),GBM 对噪声数据相对鲁棒,其给出的特征重要性排序也更为稳定

GBFS 的一般步骤

  1. 训练一个 GBM 模型:使用全部特征在训练集上训练一个梯度提升模型(如 XGBRegressor 或 LGBMClassifier)。
  2. 获取特征重要性:从训练好的模型中提取每个特征的重要性分数。
  3. 排序和选择:将特征按重要性分数从高到低排序。
  4. 确定阈值:选择一个阈值来选择特征。方法有:
  • 选择 Top-K 个特征:例如,只保留最重要的前 20 个特征。
  • 重要性分数阈值:例如,只保留重要性分数大于平均值的特征。
  • 递归消除:结合递归特征消除(RFE),逐步剔除最不重要的特征,通过交叉验证来确定最佳特征数量

代码示例

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from xgboost import XGBClassifier# 1. 加载数据
data = load_breast_cancer()
X, y = data.data, data.target
feature_names = data.feature_names# 查看数据形状
print("原始特征维度:", X.shape)  # (569, 30)# 2. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 3. 训练一个XGBoost模型(使用所有特征)
model = XGBClassifier(random_state=42, use_label_encoder=False, eval_metric='logloss')
model.fit(X_train, y_train)# 4. 获取特征重要性(基于Gain)
importance_scores = model.feature_importances_
# 创建一个(特征名:重要性分数)的字典,并排序
feat_imp_dict = dict(zip(feature_names, importance_scores))
sorted_feat_imp = sorted(feat_imp_dict.items(), key=lambda x: x[1], reverse=True)# 打印最重要的10个特征
print("\n最重要的10个特征:")
for feat, imp in sorted_feat_imp[:10]:print(f"{feat}: {imp:.4f}")
# worst concave points: 0.2856
# mean concave points: 0.2357
# worst perimeter: 0.1743
# worst radius: 0.0760
# worst area: 0.0570
# worst texture: 0.0217
# worst concavity: 0.0187
# perimeter error: 0.0186
# mean texture: 0.0144
# mean radius: 0.0128# 5. 可视化特征重要性(可选)
plt.figure(figsize=(10, 8))
indices = np.argsort(importance_scores)[::-1] # 按重要性降序排列的索引
plt.title('Feature Importances (XGBoost - Gain)')
plt.barh(range(len(indices)), importance_scores[indices], color='b', align='center')
plt.yticks(range(len(indices)), [feature_names[i] for i in indices])
plt.xlabel('Relative Importance')
plt.gca().invert_yaxis() # 让最重要的特征显示在顶部
plt.tight_layout()
plt.show()# 6. 进行特征选择:我们选择最重要的前10个特征
top_k = 10
selected_feature_indices = indices[:top_k] # 获取最重要特征的索引X_train_selected = X_train[:, selected_feature_indices]
X_test_selected = X_test[:, selected_feature_indices]print(f"\n选择后的特征维度:{X_train_selected.shape}")  # (455, 10)# 7. 使用选择后的特征重新训练模型,验证效果
model_selected = XGBClassifier(random_state=42, use_label_encoder=False, eval_metric='logloss')
model_selected.fit(X_train_selected, y_train)# 预测
y_pred_full = model.predict(X_test)
y_pred_selected = model_selected.predict(X_test_selected)# 评估准确率
acc_full = accuracy_score(y_test, y_pred_full)
acc_selected = accuracy_score(y_test, y_pred_selected)print(f"\n模型性能对比:")
print(f"使用所有特征的测试集准确率: {acc_full:.4f}")  # 0.9561
print(f"使用Top-{top_k}个特征的测试集准确率: {acc_selected:.4f}")  # 0.9561

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

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

相关文章

解构汇编, 万物起源

汇编的诞生汇编全景图核心主干: CPU架构主要分支: 语法和工具共同的地貌: 核心概念延伸: 跨平台 & 跨架构跨平台跨架构总结以 GAS vs. NASM 为例NASM 不支持跨架构 ≠ 无法在ARM架构上的系统安装汇编的诞生 机器语言的困境 早期的程序员直接使用机器语言进行编程机器语言由…

广州旅游网站系统 - 纯静态旅游展示平台

🌟 广州旅游网站系统 - 纯静态旅游展示平台观世界才有世界观 - 一个集景区展示、旅游攻略、文化传播于一体的精美旅游网站📋 项目概述 这是一个专注于广州旅游文化的纯静态网站系统,采用现代化的前端技术栈,为游客提供全方位的广州…

Qt UDP通信学习

Qt UDP通信学习 一、项目概述 本项目基于Qt框架实现了UDP通信功能,支持单播与广播消息收发,展示了UDP套接字的基本用法,适合初学者学习Qt网络模块的实际应用。 二、项目结构 55.pro:Qt工程文件,配置模块与源码文件main…

古德哈特定律(Goodhart‘s Law)

古德哈特定律(Goodhart’s Law)表述为“当一个指标变成了目标,它将不再是个好指标”。 该定律由英国经济学家查尔斯古德哈特(Charles Goodhart)在1975年提出,最初用于批判撒切尔夫人政府的货币主义政策&…

在 ASP.NET Core 8 Web API 中实现基于角色的授权 安全且可扩展 API 的最佳实践

掌握基于角色的授权:使用专家策略保护您的 ASP.NET Core 8 Web API。在 ASP.NET Core 8 Web API 中实现基于角色的授权:安全且可扩展 API 的最佳实践介绍授权是任何 Web 应用程序的关键组件。在开发 API 时,使用基于角色的授权保护端点可确保…

AutoHotkey识别图片

一、下载ImagePut插件 下载地址:GitHub - iseahound/ImagePut: A core library for images in AutoHotkey. Supports AutoHotkey v1 and v2. 二、将插件和要搜索的图片导入项目 #Include ./plugin/ImagePut.ahk ; 截取当前屏幕 pic : ImagePutBuffer(0) point : p…

CamX-Camera常用编译命令和adb指南

g_camxsettings vendor/qcom/proprietary/camx/src/settings/g_camxsettings.xml 控制相机debug的信息都在该文件里面 0、相关代码 framwork层 frameworks/av/camera/ frameworks/av/services/camera frameworks/av/services/camera frameworks/hardware/interfaces/camerase…

LabVIEW 实现颜色平滑渐变控制

LabVIEW 中实现 LED 颜色从蓝到红的平滑渐变显示在 LabVIEW 开发中,若需让 LED(或类 LED 显示控件)实现从蓝色到红色的平滑色彩渐变(模拟温度等参数从低到高的视觉反馈),可通过自定义颜色查找表 数值缩放映…

阴阳学:从入门到精通

第一篇:入门篇——阴阳基础理论1.1 阴阳的起源与哲学意义阴阳概念的历史渊源《易经》中的阴阳思想阴阳与宇宙、自然、人生的关系阴阳对思想、行为、社会的影响1.2 阴阳的基本属性与符号阴阳的特征、象征与对立统一阴阳在自然界的表现(昼夜、冷热、动静等…

Java工业通信实战(三):Modbus RTU串口通信实现

想象一下,你要和一台工业设备"对话",比如询问温度传感器"现在多少度?“或者告诉电机"转快一点”。 Modbus RTU就是这种"对话"的标准语言,就像人与人之间说普通话一样。 它采用主从结构,…

CentOS安装或升级protoc

卸载旧版本 sudo yum remove protobuf protobuf-c protobuf-compiler -y sudo rm -f /usr/bin/protoc sudo rm -rf /usr/include/google/protobuf 下载 wget https://github.com/protocolbuffers/protobuf/releases/download/v3.15.0/protoc-3.15.0-linux-x86_64.zip unz…

人工智能在医学图像中的应用:从机器学习到深度学习

目的:人工智能(AI)模型在生物医学研究和医疗服务中扮演着越来越重要的角色。本综述聚焦于在现实世界背景下,开发AI应用作为临床决策支持系统时需要澄清的挑战性问题。方法:进行了一项叙述性综述,包含对1989…

基于Echarts+HTML5可视化数据大屏展示-智慧小区大数据分析

效果展示&#xff1a;代码结构&#xff1a;主要代码实现 index.html布局 <!doctype html> <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8"><title>智慧农业大数据展示</title><link rel"s…

【LeetCode热题100道笔记】验证二叉搜索树

题目描述 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 严格小于 当前节点的数。 节点的右子树只包含 严格大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1&…

Apache Tomcat 教程:从入门到精通(含目录结构与版本详解)

​​​​​​1. 背景​​ Apache Tomcat 是一个开源的 ​​Java Servlet 容器​​&#xff0c;由 ​​Apache 软件基金会&#xff08;ASF&#xff09;​​ 开发和维护&#xff0c;最初由 ​​Sun Microsystems​​ 的软件架构师 ​​James Duncan Davidson​​ 设计&#xff0…

设计模式从入门到精通之(六)策略模式

策略模式&#xff1a;让算法灵活切换的秘密武器在日常开发中&#xff0c;算法的选择常常是程序设计的核心&#xff0c;比如支付方式的选择、排序逻辑的切换、促销活动的动态调整等。当需求变化时&#xff0c;我们需要在多个算法之间切换&#xff0c;但又不希望修改已有代码。如…

安装MATLAB205软件记录

安装MATLAB2025 一台电脑可以安装多个版本的MATLAB; 下载资源 微信公众平台-MATLAB R2025a v25.1下载及安装教程 安装步骤 解压, 压缩文件大小为13.8GB 装载 选中setup.exe右键单击以管理员身份运行 我有文件安装密钥 接受许可条款 复制粘贴密钥 63733-59078-50866-02827-…

MySQL 基础架构(一):SQL语句的执行之旅

MySQL系列文章 MySQL 基础架构&#xff08;一&#xff09;&#xff1a;SQL语句的执行之旅 你是否好奇过&#xff0c;一条看似简单的SQL查询语句&#xff0c;在MySQL内部究竟经历了怎样的"奇幻之旅"&#xff1f;从连接建立到结果返回&#xff0c;MySQL是如何层层处理、…

Spring Boot 使用 Druid 连接池极致优化

在 Spring Boot 中使用 Druid 连接池进行极致优化&#xff0c;需要从核心参数调优、监控体系搭建、安全增强、连接管理及性能适配等多个维度综合考虑。以下是分阶段的详细优化策略&#xff1a;一、基础环境准备确保使用最新稳定版 Druid&#xff08;截至 2024 年推荐 1.2.38&am…

【Big Data】Apache Kafka 分布式流处理平台的实时处理实践与洞察

目录 一、Apache Kafka是什么 二、Kafka的诞生背景 三、Kafka的架构设计 四、Kafka解决的技术问题 五、Kafka的关键特性 六、Kafka与其他消息队列系统的对比 七、Kafka的工作原理 八、Kafka的部署与使用方法 1. 集群部署 2. 生产者与消费者配置 3. 安全配置 4. 监控…