《Python實戰進階》第31集:特征工程:特征選擇與降維技術

第31集:特征工程:特征選擇與降維技術


摘要

特征工程是機器學習和數據科學中不可或缺的一環,其核心目標是通過選擇重要特征和降低維度來提升模型性能并減少計算復雜度。本集聚焦于特征選擇與降維技術,涵蓋過濾法、包裹法、嵌入法等特征選擇方法以及 PCA、t-SNE 和 UMAP 等降維技術。我們將通過實戰案例演示如何對高維數據進行降維可視化,并使用遞歸特征消除(RFE)選擇關鍵特征。
在這里插入圖片描述


核心概念和知識點

1. 特征選擇方法

  • 過濾法:基于統計指標(如相關系數、互信息)選擇特征,獨立于模型。
  • 包裹法:將模型性能作為評估標準,例如遞歸特征消除(RFE)。
  • 嵌入法:利用模型內部的特征重要性(如決策樹、Lasso 回歸)進行選擇。

2. 降維技術

  • PCA(主成分分析):線性降維方法,通過最大化方差提取主要成分。
  • t-SNE(t-分布鄰域嵌入):非線性降維方法,適合高維數據的可視化。
  • UMAP(統一流形逼近與投影):一種更快且更靈活的非線性降維方法。

3. 缺失值處理與特征編碼

  • 缺失值處理:填充均值/中位數、插值法或直接刪除缺失值。
  • 特征編碼:將類別型特征轉換為數值型特征(如 One-Hot 編碼、Label 編碼)。

實戰案例

案例 1:對 MNIST 數據集使用 PCA 進行降維并可視化

背景

MNIST 是一個手寫數字圖像數據集,每個樣本是一個 28x28 的灰度圖像(784 維)。我們使用 PCA 將數據降維到 2 維以進行可視化。

代碼實現
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler# 加載 MNIST 數據集
mnist = fetch_openml('mnist_784', version=1, as_frame=False)
X, y = mnist.data, mnist.target.astype(int)# 數據標準化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 使用 PCA 降維到 2 維
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)# 可視化降維結果
plt.figure(figsize=(10, 8))
scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='tab10', alpha=0.6)
plt.colorbar(scatter, label='Digit Label')
plt.title("PCA Visualization of MNIST Dataset")
plt.xlabel("Principal Component 1")
plt.ylabel("Principal Component 2")
plt.show()# 輸出解釋方差比例
print(f"Explained Variance Ratio: {pca.explained_variance_ratio_}")
輸出結果
Explained Variance Ratio: [0.097 0.071]
可視化

案例 2:使用遞歸特征消除(RFE)選擇關鍵特征

背景

我們使用 Scikit-learn 提供的乳腺癌數據集,通過 RFE 方法選擇最重要的特征并訓練邏輯回歸模型。

代碼實現
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import RFE
from sklearn.metrics import accuracy_score# 加載數據集
data = load_breast_cancer()
X, y = data.data, data.target# 數據集劃分與標準化
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)# 使用 RFE 選擇特征
model = LogisticRegression(max_iter=10000)
rfe = RFE(estimator=model, n_features_to_select=5)  # 選擇 5 個特征
rfe.fit(X_train_scaled, y_train)# 查看選擇的特征
selected_features = np.array(data.feature_names)[rfe.support_]
print(f"Selected Features: {selected_features}")# 在測試集上評估模型
y_pred = rfe.predict(X_test_scaled)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy with Selected Features: {accuracy:.2f}")
輸出結果
Selected Features: ['mean radius' 'mean perimeter' 'mean concave points''worst radius' 'worst perimeter']
Accuracy with Selected Features: 0.96
可視化

我們可以對比原始特征和選擇后的特征數量:

import seaborn as snssns.barplot(x=rfe.ranking_, y=data.feature_names)
plt.title("Feature Ranking by RFE")
plt.xlabel("Ranking")
plt.ylabel("Feature Name")
plt.show()

總結

特征工程是提升模型性能的關鍵步驟,合理的特征選擇和降維可以顯著降低計算復雜度并提高模型泛化能力。通過本集的學習,我們掌握了如何使用 PCA 對高維數據進行降維可視化,以及如何使用 RFE 方法選擇關鍵特征。


擴展思考

1. 如何結合特征工程優化 AI 大模型的輸入?

AI 大模型(如 GPT、BERT)通常需要高質量的輸入特征。通過特征工程,我們可以:

  • 對文本數據進行特征提取(如 TF-IDF、詞向量)。
  • 對圖像數據進行預處理(如標準化、裁剪)。
  • 去除噪聲特征,減少冗余信息,從而提高大模型的訓練效率。

2. 自動化特征工程工具的應用前景

自動化特征工程工具(如 Featuretools、AutoFeat)能夠自動生成候選特征,減少人工干預。未來,這些工具可能與 AI 大模型結合,形成端到端的自動化建模流程,進一步提升開發效率。


專欄鏈接:Python實戰進階
下期預告:No32 - 并發編程:多線程與異步 I/O 的實戰應用

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/74437.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/74437.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/74437.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

避雷 :C語言中 scanf() 函數的錯誤?使用!!!

1. 返回值說明 scanf函數會返回成功匹配并賦值的輸入項個數&#xff0c;而不是返回輸入的數據。 可以通過檢查返回值數量來確認輸入是否成功。若返回值與預期不符&#xff0c;就表明輸入存在問題。 #include <stdio.h>int main() {int num;if (scanf("%d", …

Excel第41套全國人口普查

2. 導入網頁中的表格&#xff1a;數據-現有鏈接-考生文件夾&#xff1a;網頁-找到表格-點擊→變為√-導入刪除外部鏈接關系&#xff1a;數據-點擊鏈接-選中連接-刪除-確定&#xff08;套用表格格式-也會是刪除外部鏈接&#xff09;數值縮小10000倍&#xff08;除以10000即可&am…

WPS宏開發手冊——使用、工程、模塊介紹

目錄 系列文章前言1、開始1.1、宏編輯器使用步驟1.2、工程1.3、工程 系列文章 使用、工程、模塊介紹 JSA語法 第三篇練習練習題&#xff0c;持續更新中… 前言 如果你是開發人員&#xff0c;那么wps宏開發對你來說手拿把切。反之還挺吃力&#xff0c;需要嘻嘻&#xf…

EtherCAT轉CANopen配置CANopen側的PDO映射

EtherCAT轉CANopen配置CANopen側的PDO映射 在工業自動化領域&#xff0c;EtherCAT和CANopen是兩種廣泛應用的通信協議。它們各自具有獨特的優勢&#xff0c;但在某些應用場景下&#xff0c;需要將這兩種協議進行轉換以實現設備間的高效數據交換。本文將詳細介紹如何在使用Ethe…

【QT】Qt creator快捷鍵

Qt creator可以通過以下步驟快捷鍵査看調用關系&#xff1a; 1.打開代碼文件。 2.將光標放在你想要查看調用關系的函數名上。 3.按下鍵盤快捷鍵 CtrlshiftU。 4.彈出菜單中選擇“調用路徑”或“被調用路徑” 5.在彈出的窗口中可以查看函數的調用關系 折疊或展開代碼快捷鍵&…

【RHCE】LVS-NAT模式負載均衡實驗

目錄 題目 IP規劃 配置IP RS1 RS2 RS3 LVS client 配置RS 配置LVS 安裝lvs軟件 啟動ipvsadm服務 lvs規則匹配 ipvsadm部分選項 客戶端測試 總結 題目 使用LVS的 NAT 模式實現 3 臺RS的輪詢訪問&#xff0c;IP地址和主機自己規劃。 IP規劃 主機IP地址RS1-nat模…

排序算法(插入,希爾,選擇,冒泡,堆,快排,歸并)

1.插入排序 插入排序的主要思想是額外申請一個空間cur&#xff0c;讓cur一開始等于數組的第1號位置,設置i1&#xff0c;讓i-1的元素與其比較&#xff0c;如果arr[i-1]>arr[i]&#xff0c;就讓arr[i1] arr[i]&#xff0c;當進行到最后一次對比結束&#xff0c;i-1,再讓arr[…

Java——Random庫

一、作用 Random庫——生成隨機數 二、實現步驟 1.導包&#xff1a;import java.util.Random; #快捷鍵&#xff1a;“Random”回車鍵 2.取得隨機數&#xff1a;Random 變量1 new Random(); 3.調用隨機數&#xff1a;類型 變量2 變量1.nextInt(n); &#xff08;代表變量…

解線性方程組的直接方法:高斯消元法與其程序實現

解線性方程組的直接方法&#xff1a;高斯消元法與其程序實現 1.順序高斯消元法 設線性方程組 A x b \boldsymbol{Ax}\boldsymbol{b} Axb 如果 a k k ( k ) ≠ 0 a_{kk}^{\left( k \right)}\ne 0 akk(k)??0 可以通過高斯消元法轉化為等價的三角形線性方程組&#xff1a; …

LiteIDE中配置golang編譯生成無CMD窗口EXE的步驟

LiteIDE中配置golang編譯生成無CMD窗口EXE的步驟 一、環境配置1、設置GOROOT?2、配置GOPATH? 二、項目編譯參數設置1、新建/打開項目?2、修改編譯配置?3、其他優化選項&#xff08;可選&#xff09;? 三、構建與驗證1、編譯生成EXE?2、驗證無窗口效果? 四、注意事項 一、…

Maya基本操作

基本操作 按住ALT鍵&#xff0c;左鍵旋轉視角&#xff0c;中鍵平移視角&#xff0c;右鍵放大縮小視角。 按空格鍵切換4格視圖。 導入FBX格式文件后&#xff0c;無貼圖顯示。 按6鍵開啟。著色紋理顯示 坐標軸相關 修改菜單-左鍵最上面的虛線。固定修改選項窗口。 選中物體…

Windows打開ftp局域網共享

前提是windows已經設置好開機賬號密碼了&#xff0c;否則教程不適用 第一先打開電腦ftp共享配置 點擊保存即可 2.設置要共享到其他電腦的文件路徑&#xff08;如果你要共享整個盤你就設置整個盤&#xff0c;如果是共享盤中某文件就設置某文件&#xff0c;這里是某文件&#x…

overleaf中會議參考文獻使用什么標簽:inproceedings

overleaf中會議參考文獻使用什么標簽 會議論文在LaTeX文獻條目中應使用 @inproceedings 標簽,而非 @article。根據你提供的內容,修正后的格式如下: @inproceedings{asai2023self, author = {Asai, Akari and Wu, Zeqiu and Wang, Yizhong and Sil, Avirup and Hajishirzi,…

一文詳解redis

redis 5種數據類型 string 字符串是 Redis 里最基礎的數據類型&#xff0c;一個鍵對應一個值。 設置值 SET key value例如&#xff1a; SET name "John"獲取值 GET key例如&#xff1a; GET namelist 列表是簡單的字符串列表&#xff0c;按插入順序排序。 在列…

第16章:基于CNN和Transformer對心臟左心室的實驗分析及改進策略

目錄 1. 項目需求 2. 網絡選擇 2.1 UNet模塊 2.2 TransUnet 2.2.1 SE模塊 2.2.2 CBAM 2.3 關鍵代碼 3 對比試驗 3.1 unet 3.2 transformerSE 3.3 transformerCBAM 4. 結果分析 5. 推理 6. 下載 1. 項目需求 本文需要做的工作是基于CNN和Transformer的心臟左心室…

【AI】知識蒸餾-簡單易懂版

1 緣起 最近要準備升級材料&#xff0c;里面有一骨碌是介紹LLM相關技術的&#xff0c;知識蒸餾就是其中一個點&#xff0c; 不過&#xff0c;只分享了蒸餾過程&#xff0c;沒有講述來龍去脈&#xff0c;比如沒有講解Softmax為什么引入T、損失函數為什么使用KL散度&#xff0c;…

批量將PPT轉換成多張圖片

以下是一個使用Python將PowerPoint文件&#xff08;PPT/PPTX&#xff09;批量轉換為多張圖片的代碼示例。該方案通過comtypes庫調用本地Office的COM接口實現轉換&#xff0c;需確保已安裝Microsoft PowerPoint。 import os import comtypes.client from comtypes import COMEr…

單例模式的經典實現

單例模式&#xff08;Singleton&#xff09;是一種創建型設計模式&#xff0c;它確保一個類只有一個實例&#xff0c;并提供一個全局訪問點。在MyBatis、Redisson、AMQP等依賴包中&#xff0c;單例模式被廣泛應用。以下是這些框架中單例模式的經典實現及舉例&#xff1a; 1. My…

2024年數維杯數學建模B題生物質和煤共熱解問題的研究解題全過程論文及程序

2024年數維杯數學建模 B題 生物質和煤共熱解問題的研究 原題再現&#xff1a; 隨著全球能源需求的不斷增長和對可再生能源的追求&#xff0c;生物質和煤共熱解作為一種潛在的能源轉化技術備受關注。生物質是指可再生能源&#xff0c;源自植物和動物的有機物質&#xff0c;而煤…

靈茶山艾府基礎算法精講

day1 &#xff08;1遍&#xff09;167. 兩數之和 II - 輸入有序數組 https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/solution/san-shu-zhi-he-bu-hui-xie-xiang-xiang-sh-6wbq/ 15. 三數之和 https://leetcode.cn/problems/3sum/solution/shuang-zhi-zhen-…