【機器學習筆記Ⅰ】10 特征工程

特征工程(Feature Engineering)詳解

特征工程是機器學習和數據科學中的核心環節,旨在通過對原始數據的轉換、組合和提取,構建更適合模型的高質量特征。其質量直接決定模型性能上限(“數據和特征決定了模型的上限,而算法只是逼近這個上限”)。


1. 特征工程的核心目標

  1. 提升模型性能:增強特征與目標變量的相關性。
  2. 降低計算成本:減少冗余特征,加速訓練。
  3. 改善泛化能力:避免過擬合,提高魯棒性。

2. 特征工程的主要步驟

(1) 數據理解與探索

  • 查看數據分布:統計描述(均值、方差、分位數)、可視化(直方圖、箱線圖)。
  • 檢測異常值:Z-score、IQR方法。
  • 分析特征相關性:熱力圖、皮爾遜相關系數。

代碼示例

import pandas as pd
import seaborn as sns# 加載數據
data = pd.read_csv("data.csv")
# 統計描述
print(data.describe())
# 相關性熱力圖
sns.heatmap(data.corr(), annot=True)

(2) 數據清洗

  • 處理缺失值
    • 刪除:data.dropna()
    • 填充:均值/中位數(data.fillna())、預測模型(如KNN)。
  • 處理異常值
    • 截斷:np.clip(values, lower, upper)
    • 分箱平滑。

示例

# 填充缺失值
data["age"].fillna(data["age"].median(), inplace=True)
# 處理異常值(基于IQR)
Q1, Q3 = data["income"].quantile([0.25, 0.75])
IQR = Q3 - Q1
data = data[(data["income"] >= Q1 - 1.5*IQR) & (data["income"] <= Q3 + 1.5*IQR)]

(3) 特征構造

  • 領域知識驅動
    • 電商:從“購買時間”提取“是否周末”、“時段(早/中/晚)”。
    • 文本:從“評論”提取“情感分數”、“關鍵詞頻率”。
  • 數學變換
    • 對數變換:np.log(x)(處理長尾分布)。
    • 多項式特征:sklearn.preprocessing.PolynomialFeatures(如 (x^2, xy))。

代碼示例

from sklearn.preprocessing import PolynomialFeatures# 多項式特征
poly = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly.fit_transform(X[["feature1", "feature2"]])

(4) 特征編碼

  • 分類變量編碼
    • 獨熱編碼(One-Hot):pd.get_dummies()
    • 目標編碼(Target Encoding):用目標變量均值代替類別。
  • 數值變量分箱
    • 等寬分箱:pd.cut(data, bins=5)
    • 等頻分箱:pd.qcut(data, q=5)

示例

# 獨熱編碼
data_encoded = pd.get_dummies(data, columns=["city"])
# 分箱
data["age_bin"] = pd.cut(data["age"], bins=[0, 18, 35, 60, 100], labels=["child", "young", "adult", "elder"])

(5) 特征縮放

  • 標準化(Standardization)StandardScaler(均值0,方差1)。
  • 歸一化(Normalization)MinMaxScaler(縮放到[0,1])。
  • 魯棒縮放(Robust Scaling)RobustScaler(抗異常值)。

代碼

from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

(6) 特征選擇

  • 過濾法(Filter)
    • 方差閾值:VarianceThreshold(threshold=0.1)
    • 相關性:選擇與目標變量相關性高的特征(如相關系數 > 0.3)。
  • 包裹法(Wrapper)
    • 遞歸特征消除(RFE):RFECV(estimator=LogisticRegression())
  • 嵌入法(Embedded)
    • L1正則化(Lasso):Lasso(alpha=0.1).fit(X, y)

示例

from sklearn.feature_selection import SelectKBest, f_classif# 選擇K個最佳特征
selector = SelectKBest(score_func=f_classif, k=5)
X_selected = selector.fit_transform(X, y)

3. 高級特征工程技術

(1) 時間序列特征

  • 滑動窗口統計:均值、標準差(pandas.rolling())。
  • 周期性特征:提取小時、星期、季節。

(2) 文本特征

  • 詞袋模型CountVectorizer
  • TF-IDFTfidfVectorizer
  • 詞嵌入:Word2Vec、BERT。

(3) 圖像特征

  • 手工特征:HOG(方向梯度直方圖)、SIFT。
  • 深度學習:CNN提取的特征(如ResNet最后一層輸出)。

4. 特征工程的評估

  • 模型性能對比:在驗證集上測試特征工程前后的AUC、RMSE等指標。
  • 特征重要性分析
    • 樹模型:model.feature_importances_
    • SHAP值:解釋特征貢獻。

代碼

import shap# 計算SHAP值
explainer = shap.Explainer(model)
shap_values = explainer(X)
shap.summary_plot(shap_values, X)

5. 工具與庫推薦

任務工具
數據清洗Pandas, OpenRefine
特征構造FeatureTools, Tsfresh(時間序列)
特征選擇Scikit-learn, XGBoost內置特征重要性
自動化特征工程AutoFeat, Feature-engine

6. 總結

  • 核心原則:理解業務、迭代實驗、持續驗證。
  • 關鍵步驟:清洗 → 構造 → 編碼 → 縮放 → 選擇。
  • 避坑指南
    • 避免數據泄漏(先拆分再處理)。
    • 平衡特征數量與信息量(防止維度災難)。

特征工程是藝術與科學的結合,需結合領域知識和數據直覺,不斷優化!


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

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

相關文章

20250708-03-string結構及命令詳解_筆記

一、字符串操作1. set命令&#xfeff;1&#xff09;set命令詳解&#xfeff;&#xfeff;基本語法與參數命令格式&#xff1a;set key value [ex 秒數]/[px 毫秒數][nx]/[xx]有效期設置&#xff1a;ex參數&#xff1a;以秒為單位設置過期時間&#xff0c;如set a 1 ex 10表示1…

SpringBoot3-集成MybatisPlus

此次操作是在多模塊下進行的&#xff0c;SpringBoot3-規劃多模塊目錄 添加管理依賴 根模塊 zibocoder-parent 的 pom.xml 中添加 MybatisPlus bom 管理依賴 <properties>...<mybatis-plus.version>3.5.12</mybatis-plus.version>... </properties> <…

部署MongoDB

環境:CentOS7 添加 MongoDB 官方 YUM 倉庫 sudo vi /etc/yum.repos.d/mongodb-org-6.0.repo 將以下內容粘貼到文件中(以 MongoDB 6.0 為例): [mongodb-org-6.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86…

重學前端002 --響應式網頁設計 CSS 基礎

文章目錄css 樣式特殊說明根據在這里 Freecodecamp 實踐&#xff0c;調整順序后做的總結。 css 樣式 body {background-color: red; # 跟background-image 不同時使用background-image: url(https://cdn.freecodecamp.org/curriculum/css-cafe/beans.jpg);font-family: sans-…

Zig高并發爬取數據簡潔模版

上文中我們介紹了Zig語言得爬蟲的有些優劣勢&#xff0c;想必大家對于自身項目選擇那種語言做爬蟲應該有些思路了&#xff0c;今天我將使用Zig的標準庫來構建一個簡單的高并發爬蟲模板。由于Zig的異步機制和標準庫中的http模塊&#xff0c;我們可以實現一個基于事件循環的爬蟲。…

IS-IS 協議 | LSP 傳輸與鏈路狀態數據庫同步機制

略作整理&#xff0c;待校。IS-IS 中 SRM 與 SSN 標志的作用及協同機制 SRM 和 SSN 標志的作用 在 IS-IS 協議中&#xff0c;SRM 和 SSN 是兩個關鍵標志&#xff0c;用于控制和優化 LSP&#xff08;Link State PDU,鏈路狀態信息&#xff09;在網絡中的泛洪與同步過程。 一、SRM…

xxl-job 改造適配pg數據后的Jenkins自動部署

接上文適配pg數據庫之后需要進行部署&#xff0c;便有了此文 1.下載并安裝Jenkins如下&#xff1a; https://mirrors.jenkins.io/war-stable/2.504.3/jenkins.war nohup java -jar jenkins.war --httpPort8080 & 啟動Jenkins并解鎖安裝需要的環境&#xff0c;git&#xff0…

數據庫Oracle從入門到精通!第四天(并發、鎖、視圖)

八、并發控制數據庫是一個共享資源&#xff0c;可以為多個應用程序所共享&#xff0c;這些程序可以串行執行&#xff08;排隊執行&#xff09;&#xff0c;但是很多情況下&#xff0c;可能出現多個程序或一個程序中的多個進程并行的執行&#xff0c;這就是數據庫的并行操作&…

EXCEL(帶圖)轉html

文章目錄敘述1、效果2、excel 轉換主邏輯3、其他補充3.0 主前端bootstrap3.1 my.css&#xff1a;3.2 my.js3.3 入口home.html3.4 Data.ashx敘述 要實現H5 展示excel 查詢 了一下沒有好的辦法,自己寫了一個,簡單記錄一下 1、效果 用bootstrap 根據sheet做了一個菜單。 2、exc…

小程序富文本Editor插入圖片、超鏈接、公式等的一次嘗試

小程序插入圖片 通過EditorContext.insertImage接口可以實現圖片的插入&#xff1a; EditorContext.insertImage({src,width,height,data, })如何插入超鏈接、公式、視頻、表格等等? 通過EditorContext.insertCustomBlock應該是可以實現的&#xff0c;具體實現方式我沒有了…

傳輸層協議TCP、UDP

傳輸層協議TCP、UDP 1、TCP和UDP報文格式 傳輸層協議TCPvsUDP 傳輸層主要兩個傳輸協議&#xff0c;分別是TCP和UDP&#xff0c;負責提供流量控制、排序服務和錯誤校驗。 &#xff08;1&#xff09;TCP是面向連接的&#xff0c;一般用于傳輸數據量比較少&#xff0c;且對可靠性要…

設計模式—專欄簡介

大學總是忙著參加ACM實驗室的各種事情&#xff0c;到了畢業的時候&#xff0c;對于設計模式也是僅了解單例模式。畢業后&#xff0c;剛開始代碼也是亂寫一通&#xff0c;完全沒有章法。整個開發環境也是為了解決問題&#xff0c;從來沒有考慮結構化什么的&#xff08;沒辦法&am…

面試150 鏈表的復制

思路 python可以使用調庫法&#xff0c;使用深度拷貝 """ # Definition for a Node. class Node:def __init__(self, x: int, next: Node None, random: Node None):self.val int(x)self.next nextself.random random """class Solution:de…

MySQL分布式ID沖突詳解:場景、原因與解決方案

引言 在分布式系統開發中&#xff0c;你是否遇到過這樣的崩潰時刻&#xff1f;——明明每個數據庫實例的自增ID都從1開始&#xff0c;插入數據時卻提示“Duplicate entry ‘100’ for key ‘PRIMARY’”&#xff1b;或者分庫分表后&#xff0c;不同庫里的訂單ID竟然重復&#x…

c++文字游戲_闖關打怪2.0(開源)

本次更新內容: 1.增強對手性能 2.可暫停(按N) 3.修復些許bug 4.增加boos關(第10、20、30...關) 1. 游戲概述 本游戲是一個基于Windows控制臺的回合制戰斗游戲,采用俯視視角的2D平面設計。玩家控制角色"p"在1325大小的封閉場景中與敵人"@"戰斗,通過…

Java學習第十二部分——idea各種項目簡介

目錄 一.前言 二.語言介紹 三.生成器介紹 四.拓展 一.前言 打開idea項目創建時發現如上情況&#xff0c;“新建項目”下面的是語言&#xff0c;生成器下面的是這些語言對應的生成器工具&#xff0c;本文將簡單介紹。 二.語言介紹 Java 用途&#xff1a;Java是一種廣泛使…

Codeforces Round 868 (Div. 2) D. Unique Palindromes(1900,構造)

Problem - D - Codeforces 不錯的字符串構造體&#xff0c;記錄一下 首先注意到k≤20這一條件。對于一個長度為n的字符串&#xff0c;最多有n個不同的回文子串&#xff0c;這種情況出現在所有字符都相同時。因此&#xff0c;限制條件中的xi必須滿足xi≤ci&#xff0c;且相鄰兩…

ClickHouse 全生命周期性能優化

引言 ClickHouse作為列式存儲的OLAP數據庫&#xff0c;以其極致的查詢性能著稱&#xff0c;但"高性能"并非開箱即用。不合理的表設計、SQL寫法或集群配置&#xff0c;可能導致性能衰減甚至服務不可用。本文基于ClickHouse 24.3版本&#xff0c;從設計規范、開發規范、…

Linux sed 命令 詳解

在 Linux 系統中&#xff0c;sed&#xff08;Stream Editor&#xff09;是一個非常強大且靈活的文本處理工具。它不僅可以用于簡單的文本替換、刪除和插入操作&#xff0c;還能實現復雜的文本轉換任務。 &#x1f4cc; 一、什么是 sed&#xff1f; sed 是一個基于模式匹配對文…

項目進度同步不及時,如何提升信息透明度

項目進度同步不及時的核心問題包括溝通渠道不暢通、缺乏統一的信息平臺、未建立明確的進度更新機制、團隊意識不足、責任劃分不明確等。其中&#xff0c;缺乏統一的信息平臺最為關鍵。統一的信息平臺能夠確保所有相關人員實時掌握最新的進度狀態&#xff0c;避免信息孤島&#…