「日拱一碼」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
英文地址,請注明出處:http://en.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. 監控…