特征工程完整指南 - 第二部分

蘇米特·班迪帕迪亞

照片由Dan Cristian P?dure?在Unsplash上拍攝

一、說明

DATA,通常被稱為原油,需要經過加工和清潔才能有效地用于各種用途。正如我們不直接使用來自其來源的石油一樣,數據也經過類似的處理以提取其真正價值。

二、特征選擇

特征選擇是從數據集中的大量可用特征中選擇相關特征子集的過程。由于以下原因,這是機器學習的重要一步

  • 它使機器學習算法能夠更快地訓練。
  • 它減少了過度擬合,增強了可解釋性,并降低了計算復雜性。
  • 提高模型性能和準確性

特征工程完整指南 - 第一部分-CSDN博客

三、單變量特征選擇:

????????單變量特征選擇方法側重于單獨評估每個特征,而不考慮特征之間的關系。這些方法包括統計檢驗,例如卡方、方差分析或互信息。目標是選擇與目標變量相關性最高的特征,丟棄不相關的特征。

SelectKBest:根據單變量統計測試(例如卡方、f_regression 或mutual_info_regression)選擇前 k 個特征

from sklearn.feature_selection import SelectKBest, chi2# Assuming X contains the input features and y contains the target variable# Create an instance of SelectKBest with chi-squared test
selector = SelectKBest(score_func=chi2, k=5)# Fit the selector to the data
selector.fit(X, y)# Get the selected features
X_selected = selector.transform(X)

SelectPercentile:使用相同的統計測試,根據得分最高的特征的百分位數選擇排名靠前的特征。

from sklearn.feature_selection import SelectPercentile, f_classif# Assuming X contains the input features and y contains the target variable# Create an instance of SelectPercentile with f_classif test and percentile=50
selector = SelectPercentile(score_func=f_classif, percentile=50)# Fit the selector to the data
selector.fit(X, y)# Get the selected features
X_selected = selector.transform(X)

四、遞歸特征消除(RFE):

????????RFE 是一種迭代特征選擇技術,從所有特征開始,逐步消除最不重要的特征。它依靠機器學習模型的性能或特征系數來確定特征重要性。通過迭代刪除特征,RFE 可以識別優化模型性能最有影響力的子集。

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression# Assuming X contains the input features and y contains the target variable# Create an instance of Logistic Regression
estimator = LogisticRegression()# Create an instance of RFE with the logistic regression estimator
selector = RFE(estimator, n_features_to_select=3)# Fit the selector to the data
selector.fit(X, y)# Get the selected features
X_selected = selector.transform(X)

五、基于模型的特征選擇:

????????基于模型的特征選擇技術使用機器學習模型來評估特征重要性。模型根據系數、特征權重或特征重要性來估計特征重要性。基于 L1 的正則化,例如 Lasso 回歸,可以將不相關的特征系數縮小到零,從而有效地執行特征選擇。

from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import Lasso# Assuming X contains the input features and y contains the target variable# Create an instance of Lasso Regression
estimator = Lasso(alpha=0.1)# Create an instance of SelectFromModel with Lasso estimator
selector = SelectFromModel(estimator)# Fit the selector to the data
selector.fit(X, y)# Get the selected features
X_selected = selector.transform(X)

六、基于樹的特征選擇:

????????基于樹的算法,例如隨機森林和梯度提升,提供了內在的特征選擇機制。這些算法根據特征對模型性能的貢獻程度來分配特征重要性。具有較高重要性的特征被認為更相關,并且可以被選擇用于進一步分析。

from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier# Assuming X contains the input features and y contains the target variable# Create an instance of Random Forest Classifier
estimator = RandomForestClassifier()# Create an instance of SelectFromModel with Random Forest estimator
selector = SelectFromModel(estimator)# Fit the selector to the data
selector.fit(X, y)# Get the selected features
X_selected = selector.transform(X)

SelectFromModel方法在內部使用 RandomForestClassifier 模型計算特征重要性來確定要選擇的特征。

SelectFromModel方法根據指定的閾值或預定義的重要性標準自動選擇特征它根據特征重要性確定重要性閾值,并選擇滿足或超過該閾值的特征。

七、特征重要性

????????特征重要性是一種為數據集中的每個特征分配分數的度量。該分數表示每個特征與目標變量的重要性或相關性級別。

????????基于樹的分類器,例如隨機森林分類器和額外樹分類器,具有內置的特征重要性類。此類允許您在數據集(例如虹膜數據集)上訓練模型,然后使用 feature_importance_ 屬性計算每個特征的重要性得分。

????????在下面的示例中,我們將在 iris 數據集中訓練額外的樹分類器,并使用內置類 feature_importance_ 來計算每個特征的重要性。

# Load libraries
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.ensemble import ExtraTreesClassifier# Load iris data
iris_dataset = load_iris()# Create features and target
X = iris_dataset.data
y = iris_dataset.target# Convert to categorical data by converting data to integers
X = X.astype(int)# Building the model
extra_tree_forest = ExtraTreesClassifier(n_estimators = 5,criterion ='entropy', max_features = 2)# Training the model
extra_tree_forest.fit(X, y)# Computing the importance of each feature
feature_importance = extra_tree_forest.feature_importances_# Normalizing the individual importances
feature_importance_normalized = np.std([tree.feature_importances_ for tree in extra_tree_forest.estimators_],axis = 0)# Plotting a Bar Graph to compare the models
plt.bar(iris_dataset.feature_names, feature_importance_normalized)
plt.xlabel('Feature Labels')
plt.ylabel('Feature Importances')
plt.title('Comparison of different Feature Importances')
plt.show()

標準化特征重要性

上圖顯示最重要的特征是花瓣長度 (cm)花瓣寬度 (cm)最不重要的特征是萼片寬度 (cm)。這意味著您可以使用最重要的功能來訓練模型并獲得最佳性能。

八、皮爾遜相關系數矩陣

相關性是一種統計度量,表示兩個變量之間關系的強度。兩種主要類型的相關性是正相關性和負相關性。當兩個變量朝同一方向移動時,就會出現正相關;當一個增加時,另一個也會增加。

兩個變量 X 和 Y 之間的皮爾遜相關系數可以使用以下公式計算

皮爾遜相關系數公式

相關系數的值可以取-1到1之間的任意值。

  • 如果值為 1,則表示兩個變量之間呈正相關。這意味著當一個變量增加時,另一個變量也會增加。
  • 如果值為 -1,則表示兩個變量之間呈負相關。這意味著當一個變量增加時,另一個變量就會減少。
  • 如果值為 0,則兩個變量之間不存在相關性。這意味著變量彼此之間以隨機方式變化。

在下面的示例中,我們將使用 Scikit-learn 庫中的波士頓房價數據集和pandas 中的corr()?方法來查找數據框中所有特征的成對相關性:

# Load libraries
from sklearn.datasets import load_boston
import matplotlib.pyplot as plt
import seaborn as sns# load boston data
boston_dataset = load_boston()# create a daframe for boston data
boston = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names)# Convert to categorical data by converting data to integers
#X = X.astype(int)#ploting the heatmap for correlation
ax = sns.heatmap(boston.corr().round(2), annot=True) 

在提供的圖中,很明顯,特征 RAD 和 RAD 表現出顯著的正相關性,而特征 DIS 和 NOX 表現出很強的負相關性。

當您在數據集中發現相關特征時,這表明它們傳達了相似的信息。在這種情況下,建議消除相關特征之一。

九、順序特征選擇:

順序特征選擇方法評估特征子集而不是單個特征。他們根據選定的評估指標(例如模型性能或交叉驗證分數)迭代地添加或刪除功能。前向選擇從空集開始,逐步添加特征,而后向消除則從所有特征開始,一一刪除。

from sklearn.feature_selection import SequentialFeatureSelector
from sklearn.linear_model import LogisticRegression# Assuming X contains the input features and y contains the target variable# Create an instance of Logistic Regression
estimator = LogisticRegression()# Create an instance of SequentialFeatureSelector with logistic regression estimator
selector = SequentialFeatureSelector(estimator, direction='forward', k_features=3)# Fit the selector to the data
selector.fit(X, y)# Get the selected features
X_selected = selector.transform(X)

十、結論

????????特征選擇是機器學習中提高模型性能、可解釋性和效率的重要技術。通過理解和應用適當的特征選擇技術,您可以識別與模型最相關的特征,減少過度擬合并增強其泛化能力。無論您使用單變量方法、遞歸消除、基于模型的方法、基于樹的技術還是順序選擇,選擇取決于您的特定數據集和問題的要求。

????????通過利用這些特征選擇技術,您可以簡化機器學習流程并構建更準確、更高效、更可解釋的模型。

????????請記住,特征選擇是整個模型開發過程的關鍵部分,應該仔細執行和評估,以確保所選特征真正具有信息性和相關性。

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

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

相關文章

LabVIEW中如何達到NI SMU最大采樣率

LabVIEW中如何達到NI SMU最大采樣率 NISMU的數字化儀功能對于捕獲SMU詳細的瞬態響應特性或表征待測設備(DUT)響應(例如線性調整率和負載調整率)至關重要。沒有此功能,將需要一個外部示波器。 例如,假設在…

Docker start/stop/restart 命令

docker start:啟動一個或多個已經被停止的容器。 docker stop:停止一個運行中的容器。 docker restart:重啟容器。 語法 docker start [OPTIONS] CONTAINER [CONTAINER...]docker stop [OPTIONS] CONTAINER [CONTAINER...]docker restart…

設計循環隊列(詳解)

呀哈嘍,我是結衣 今天給大家帶來的內容如標題所述,我們來設計環形隊列,雖然隊列沒有講,但是我就是想講啊。那么環形隊列現在開始。 隊列的屬性 在設計環形隊列前,我們先要了解隊列的特點(先進先出&#x…

鴻蒙(HarmonyOS)應用開發——ArkTs學習準備

介紹 前面我們已經介紹了,如何安裝HarmonyOS的IDE ,那么現在我們來介紹一下。HarmonyOS 開發的語言——ArkTs. ArkTS 是HarmonyOS的開發語言,他是typescript 的擴展,而typesrcipt是javascript的超集,如果你不太熟悉typescript語法…

qml Loader使用介紹

QML Loader 是 Qt Quick 框架中的一個元素,它允許你動態地加載和卸載 QML 組件。Loader 的作用主要體現在以下幾個方面: 延遲加載:Loader 允許你在需要時才加載組件,而不是在應用程序啟動時一次性加載所有組件。這樣可以加快應用程序的啟動時間,因為它只需要初始化用戶當前…

MIT_線性代數筆記:列空間和零空間

目錄 前言子空間綜述列空間 Column space零空間(或化零空間)Nullspaceb 值的影響 Other values of b 前言 本節繼續研究子空間,特別是矩陣的列空間(column space)和零空間(nullspace)。 子空間…

FreeRTOS的并行與并發思考

FreeRTOS的任務觸發是由滴答時鐘觸發SysTick中斷來觸發調度器執行或阻塞或掛起和切換任務的。 首先是任務的并發能力,FreeRTOS的任務執行是基于全搶占調度機制,任務優先級按在就緒列表中由高到低排布,系統首先執行最高優先級任務,…

Django web開發(一) - 前端

文章目錄 前端開發1.快速開發網站2.標簽2.1 編碼2.2 title2.3 標題2.4 div和span2.5 超鏈接2.6 圖片小結標簽的嵌套2.7 列表2.8 表格2.9 input系列2.10 下拉框2.11 多行文本用戶注冊案例: 用戶注冊GET 方式POST 方式表單數據提交優化 3.CSS樣式3.1 快速上手3.2 CSS應用方式1. 在…

Docker run 命令

docker run :創建一個新的容器并運行一個命令 語法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]OPTIONS說明: -a stdin:指定標準輸入輸出內容類型,可選STDIN/STDOUT/STDERR三項; -d:后臺運行容器&am…

SAP-部分字段變更

在SAP中部分字段是可以自行調整的,例如下圖 這個字段是客戶組1,已經被改成一級經理,現在來操作改回客戶組1 首先選擇字段點擊F1-技術信息-數據元素(雙擊) . . 保存,返回,激活,返…

redis運維(十八)pipeline

一 pipeline 流水線 說明: 這里講解的不是jenkins的pipeline流水線這里pipeline: 管道 redis為什么要提供pipeline功能 事務和pipeline ① pipeline的理念 強調:單純的pipeline跟事務沒有關系redis-cli --pipe --> 使用了pipeline機制說明&a…

排序算法總結

1 排序算法 1.1 快速排序 1.1.1 算法思想 先取一個隨機數,然后和數組的最后一個數交換 進行partition過程,也就是比數組最后一個數小的放在數組左邊,大的放在右邊,相等的在數組中間,最后把數組的最后一個數也要放到中…

【LeetCode刷題-回溯】-- 46.全排列

46.全排列 方法:回溯法 一種通過探索所有可能的候選解來找出所有的解的算法,如果候選解被確認不是一個解,回溯法會通過在上一步進行一些變化拋棄該解,即回溯并且再次嘗試 使用一個標記數組表示已經填過的數 class Solution {pu…

【前端】yarn介紹和使用

yarn介紹和使用 一、什么是yarn?二、安裝yarn三、yarn用法四、yarn更多用法 一、什么是yarn? yarn是快速、可靠、安全的依賴管理。 yarn官網:https://yarn.nodejs.cn/ Yarn 是代碼的包管理器。 它允許你與世界各地的其他開發者使用和共享&am…

如何設置實現本地JumpServer遠程訪問管理界面

文章目錄 前言1. 安裝Jump server2. 本地訪問jump server3. 安裝 cpolar內網穿透軟件4. 配置Jump server公網訪問地址5. 公網遠程訪問Jump server6. 固定Jump server公網地址 前言 JumpServer 是廣受歡迎的開源堡壘機,是符合 4A 規范的專業運維安全審計系統。JumpS…

C語言for循環結構經典練習

文章目錄 一、for循環基本知識二、經典例題及解析1.水仙花數2.求規定范圍內的完數3.求規定范圍內質數4.計算階乘之和5.計算55555555555555(類型)6.計算112123123412345(類型)7.判斷用戶輸入正整數的位數8.判斷某正整數是否為回文數9.九九乘法表10.統計用戶輸入的字符中&#xf…

PTA 公路村村通

現有村落間道路的統計數據表中,列出了有可能建設成標準公路的若干條道路的成本,求使每個村落都有公路連通所需要的最低成本。 輸入格式: 輸入數據包括城鎮數目正整數N(≤1000)和候選道路數目M(≤3N)&…

JVM 之 javac、java、javap 命令詳解

目錄 一. 前言 二. javac 命令 三. java 命令 四. javap 命令 一. 前言 在日常工作中,我們新建 Java工程,寫好代碼后,編譯和運行幾乎都是通過 IDE(如idea、eclipse)工具完成。但作為 Java開發者還是要了解下 Java虛…

Modbus RTU協議及modbus庫函數使用

一、與Modbus TCP的區別 在一般工業場景使用modbus RTU的場景還是更多一些,modbus RTU基于串行協議進行收發數據,包括RS232/485等工業總線協議。 與modbus TCP不同的是RTU沒有報文頭MBAP字段,但是在尾部增加了兩個CRC檢驗字節(CRC…