機器學習——數據預處理和特征工程(sklearn)

目錄

一、數據挖掘流程

1. 獲取數據

2. 數據預處理

3. 特征工程

4. 建模,測試模型并預測出結果

5. 驗證模型效果

二、sklearn中的相關包

1.sklearn.preprocessing

2.sklearn.Impute

3.sklearn.feature_selection

4.sklearn.decomposition

三、數據預處理

1. 數據無量綱化

(1)數據歸一化

(2)數據標準化

2. 缺失值

3. 處理分類型特征:編碼與啞變量

(1)preprocessing.LabelEncoder

(2)preprocessing.OrdinalEncoder

(3)preprocessing.OneHotEncoder

4. 處理連續型特征:二值化與分段

(1)preprocessing.Binarizer

(2)preprocessing.KBinsDiscretizer

四、特征選擇

1. Filter過濾法

(1)方差過濾

(2)相關性過濾

① 卡方過濾

② F檢驗

③ 互信息法

2. Embedded嵌入法

3. Wrapper包裝法

4. 總結+補充


一、數據挖掘流程

1. 獲取數據

2. 數據預處理

????????從數據中檢測,糾正或刪除損壞,不準確或不適用于模型的記錄的過程。

????????目的:讓數據適應模型,匹配模型的需求。

3. 特征工程

????????是將原始數據轉換為 更能代表預測模型的潛在問題的 特征的過程,可以 通過 挑選最 相關的特征,提取特征 以及創造特征來實現。其中 創造特征 又經常以 降維算法的 方式實現。

????????目的:① 降低計算成本,② 提升模型上限

4. 建模,測試模型并預測出結果

5. 驗證模型效果

二、sklearn中的相關包

1.sklearn.preprocessing:幾乎包含數據預處理的所有內容。

2.sklearn.Impute:填補缺失值專用。

3.sklearn.feature_selection:包含特征選擇的各種方法的實踐。

4.sklearn.decomposition:包含降維算法。

三、數據預處理

????????涉及包:preprocessing & Impute

1. 數據無量綱化

????????在機器學習算法實踐中,我們往往有著 將不同規格的 數據轉換到 同一規格,或 不同分布的數據轉換到 某個特定分布的需求,這種需求統稱為將數據 “ 無量綱化 ”。無量綱化可以加快求解速度,也可以幫我們 提升模型精度,避免 某一個取值范圍 特別大的 特征對距離 計算造成影響。

????????數據的無量綱化可以是 線性的,也可以是 非線性的。

????????線性的 無量綱化包括?中心化處理和縮放處理。(中心化的本質是讓所有記錄減去一個固定值,即讓數據樣本數據平移到某個位置。縮放的本質是通過除以一個固定值,將數據固定在某個范圍之中,取對數也算是一種縮放處理。)

(1)數據歸一化

????????當數據(x)按照最小值中心化后,再按極差(最大值 - 最小值)縮放,自個單位,并且會被收斂到[0, 1]之間,而這個過程,就叫做數據歸一化

????????sklearn中通過 preprocessing.MinMaxScaler 實現,其中參數 feature_range 控制我們希望 把數據壓縮到的范圍,默認是[0,1]。

(2)數據標準化

????????當數據(x)按均值(𝛍)中心化后,再按標準差(𝛔)縮放,數據就會服從為均值為 0,方差為 1 的正態分布(即標準正態分布),而這個過程,就叫做 數據標準化。

????????sklearn中通過 preprocessing.StandardScaler 實現。

2. 缺失值

????????機器學習和數據挖掘中所使用的數據,永遠不可能是完美的。很多特征,對于分析和建模來說 意義非凡,但對于實際 收集數據的人 卻不是如此,因此數據挖掘之中,常常會 有重要的字段缺失值很多,但又不能舍棄字段的情況。因此,數據預處理 中非常重要的一項就是 處理缺失值。

????????sklearn中通過 impute.Simplelmputer 實現。

重要參數:

① missing_values

????????默認空值np.nan。告訴Simplelmputer,數據中的缺失值長什么樣。

② strategy

默認均值。填補缺失值的策略。

????????輸入“mean” :使用均值填補(僅對數值型特征可用)。

????????輸入“median” :用中值填補(僅對數值型特征可用)。

????????輸入“most_frequent”:?用眾數填補(對數值型和字符型特征都可用)。

????????輸入“constant” :表示請參考參數 “ fill_value" 中的值(對數值型和字符型特征都可用)。

③ fill_value

????????常用 0。當參數 “startegy” 為 “constant” 的時候可用,可輸入 字符串或數字表示 要填充的值。

④ copy

????????默認為True。將 創建特征矩陣的 副本,反之則 會將缺失值填補 到原本的 特征矩陣中去。

from sklearn.impute import SimpleImputerimp_mean = SimpleImputer() # 均值填補
imp_median = SimpleImputer(strategy="median")  # 中位數填補
imp_0 = SimpleImputer(strategy="constant", fill_value=0) # 0 填補

3. 處理分類型特征:編碼與啞變量

(1)preprocessing.LabelEncoder:標簽專用,能夠將分類轉換為分類數值。
(2)preprocessing.OrdinalEncoder:特征專用,能夠將分類特征轉換為分類數值。
(3)preprocessing.OneHotEncoder:獨熱編碼,創建啞變量。

????????我們把分類轉換成 數字的時候,忽略了 數字中自帶的 數學性質,所以給算法 傳達了一些 不準確的信息,而這會影響 我們的建模。類別 OrdinalEncoder 可以用來 處理有序變量,但對于名義變量,我們只有使用啞變量的方式來處理,才能夠盡量向算法傳達最準確的信息。

????????數據類型以及常用的統計量:

from sklearn.preprocessing import OneHotEncoderenc = OneHotEncoder(categories='auto').fit(x)
result = enc.transform(x)

4. 處理連續型特征:二值化與分段

(1)preprocessing.Binarizer

????????根據閾值將數據 二值化(將特征值設置為 0 或 1),用于處理連續型變量。大于閾值的值 映射為 1,而小于或 等于閾值的值映射為 0。默認閾值為 0 時,特征中所有的 正值都映射到 1。

from sklearn.preprocessing import Binarizertransformer = Binarizer(threshold=30).fit_transform(x)
(2)preprocessing.KBinsDiscretizer

????????將連續型變量劃分為分類變量,能夠將連續型變量排序后 按順序分箱 后編碼。

① n_bins

????????默認 5。每個特征中分箱的個數,即一次會被運用到所有導入的特征。

② encode

????????默認 “ onehot ”。編碼的方式。

????????“onehot”:做啞變量,之后返回一個稀疏矩陣,每一列是一個特征中的一個類別,含有該類別的樣本表示為1,不含的表示為0。

????????“ordinar”:每個特征的每個箱都被編碼為一個 整數,返回 每一列是一個特征,每個特征下含有 不同整數編碼的 箱的 矩陣。

????????“onehot-dense”:做啞變量,之后返回一個密集數組。

③ strategy

????????默認“quantile”。用來定義箱寬的方式。

????????“uniform”:表示等寬分箱,即每個特征中的每個箱的最大值之間的差為(特征.max()- 特征.min())/(n_bins)。

????????“quantile”:表示等位分箱,即每個特征中的 每個箱內的樣本數量 都相同。

????????“kmeans”:表示按聚類分箱,每個箱中的值到 最近的一維 k均值聚類 的簇心 得距離 都相同。

from sklearn.preprocessing import KBinsDiscretizerest = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')
est.fit_transform(x)

四、特征選擇

????????涉及包:feature_selection

????????從所有的特征中,選擇出有意義,對模型有幫助的特征,以避免必須將所有特征都導入模型去訓練的情況。有四種方法可以用來選擇特征:過濾法、嵌入法、包裝法和降維算法

1. Filter過濾法

????????過濾方法通常用作預處理步驟,特征選擇完全 獨立于任何機器 學習算法。它是 根據各種統計檢驗中的分數以及相關性的各項指標來選擇特征。

????????過濾法的主要對象是:需要遍歷特征或升維的算法們。

????????過濾法的主要目的是:在維持算法表現的前提下,幫助算法們降低計算成本。

(1)方差過濾

????????sklearn 中通過 VarianceThreshold 實現。

????????重要參數:threshold。表示方差的 閾值,表示舍棄所有方差小于 threshold的特征,不填默認為 0,即 刪除所有的記錄都相同的 特征。

(2)相關性過濾

????????我們希望 選出與標簽相關且有 意義的特征,因為這樣的特征能夠為 我們提 供大量信息。如果特征 與標簽無關,那只會 白白浪費我們的計算內存,可能還會給模型帶來噪音。在sklearn當中,有三種 常用的方法來 評判特征與標簽之間 的相關性:卡方、F檢驗、互信息

① 卡方過濾

????????卡方過濾是專門針對離散型標簽(即分類問題) 的相關性過濾卡方檢驗類feature_selection.chi2 計算每個非負特征 和標簽之間的 卡方統計量,并依照卡方統計量由高到低為特征排名。再結合 feature_selection.SelectKBest 這個可以輸入 “評分標準” 來選出前 K 個分數最高的 特征的類,我們可以 借此除去最可能獨立 于標簽,與我們 分類目的無關的特征。

????????卡方檢驗的本質是推測 兩組數據之間的 差異,其 檢驗的原假設是 “ 兩組數據是相互獨立的 ”。卡方檢驗 返回 卡方值和 P值 兩個統計量,其中卡方值很 難界定有效的范圍,而 p值,我們一般使用 0.01 或 0.05 作為顯著性水平,即 p值判斷的 邊界。

② F檢驗

????????F檢驗,又稱ANOVA,方差 齊性檢驗,是用來捕捉每個特征與標簽之間的線性關系的過濾方法。它即可以做回歸也 可以做分類,因此包含 feature_selection.f.classif(F檢驗分類)和feature_selection.f.regression(F檢驗回歸)兩個類。其中 F 檢驗分類 用于標簽是 離散型變量的數據,而 F 檢驗回歸 用于標簽是連續型變量 的數據。和卡方檢驗一樣,這兩個類需要和類SelectKBest 連用。

????????需要注意的是,F 檢驗在數據 服從正態分布時效果會 非常穩定,因此如果使用 F 檢驗過濾,我們會 先將數據轉換 成服從正態分布的方式。

????????F 檢驗的 本質是尋找 兩組數據之問的 線性關系,其原假設是 “ 數據不存在顯著的線性關系 ”。它返回 F 值和 P 值 兩個統計量。和 卡方過濾一樣,我們希望選取 p 值 小于 0.05或0.01 的特征,這些 特征與標簽時顯 著線性相關的,而 p 值大于 0.05 或 0.01 的特征 則被我們 認為是 和 標簽 沒有顯著線性 關系的 特征,應該被刪除。

③ 互信息法

????????互信息法是用來捕捉每個特征與標簽之間的任意關系(包括線性和非線性關系)的過濾方法。和 F 檢驗相似,它既可以 做回歸 也可以做分類,并且 包含兩個類feature_selection.mutual_info_classif(互信息分類)和feature_selection.mutual_info_regression(互信息回歸)。這兩個類的用法和參數都和 F 檢驗一模一樣,不過互信息法比 F 檢驗 更加強大,F 檢驗只能 夠找出 線性關系,而 互信息法可以找出任意關系。

????????互信息法不返回 P 值 或 F 值 類似的統計量,它返回 “ 每個特征與目標之間的互信息量的估計 ”,這個估計量在[0, 1]之間取值,為 0 則表示 兩個變量獨立,為 1 則表示 兩個變量完全相關。

2. Embedded嵌入法

????????嵌入法是一種 讓算法自己決定使用哪些特征的方法,即特征選擇和算法訓練同時進行

????????在使用嵌入法時,我們 先 使用某些機器學習的算法和模型 進行訓練,得到各個特征的權值系數,根據權值系數 從大到小選擇特征。這些權值系數 往往代表了特征對于模型的 某種貢獻或某種重要性,我們 可以列出各個特征 對樹的建立的貢獻,我們就 可以基于這種貢獻的評估,找 出對模型建立最有用的特征。

????????相比于過濾法,嵌入法 的結果會 更加精確 到模型的 效用本身,對于 提高模型效力有更好的 效果。并且,由于 考慮特征對模型 的貢獻,因此 無關的特征(需要 相關性過濾 的特征)和無區分度的特征(需要方差過濾的特征)都會因為缺乏 對模型的貢獻而 被刪除掉,可謂是 過濾法的 進化版。

????????sklearn 中通過 SelectFromModel 實現。

????????這是一個元變換器,可以與任何在擬合后具有coef_,feature_importances_屬性或參數中可選懲罰項的評估器一起使用。

????????對于有 feature_importances_ 的模型來說,若重要性 低于提供的 閾值參數,則認為 這些特征 不重要并 被移除。feature_importances_ 的取值范圍是 [0, 1],如果設置閾值 很小,比如 0.001,就 可以刪除那些對 標簽預測完全 沒貢獻的特征。如果 設置得很接近 1,可能只 有一兩個特征能夠被留下。

????????class sklearn.feature_selection.SelectFromModel(estimator, threshold=None, prefit=False, norm_order=1, max_features=None)

3. Wrapper包裝法

????????包裝法也是一個 特征選擇和算法訓練同時進行的方法,與嵌入法十分相似,它也是依賴于算法自身的選擇,但不同的是,我們往往 使用一個 目標函數作為黑盒來幫助我們 選取特征,而不是自己輸入 某個評估指標或統計量的 閾值。

????????包裝法在初始特征集上 訓練評估器,并且通過 coef_ 屬性或 通過 feature_importances_ 屬性獲得每個特征的 重要性。然后,從當前的一組特征中 修剪最 不重要的特征。在 修剪的 集合上 遞歸地 重復該過程,直到 最終到達所需數量的 要選擇的特征。

????????區別于過濾法和嵌入法的一次訓練解決 所有問題,包裝法 要使用特征 子集進行 多次訓練,因此它所需要的計算成本是最高的。

????????注:在這個圖中的 "算法”? ,指的不 是我們最終用來 導入數據的分類 或 回歸算法,而是專業的數據挖掘算法,即 我們的 目標函數。這些數據挖掘算法的 核心功能 就是選取 最佳特征子集。

????????最典型的目標函數是遞歸特征消除法 (Recursive feature elimination,簡寫為RFE),即sklearn中的 feature selection.RFE

????????class sklearn.feature_selection.RFE(estimator, n_features_to_select=None, step=1, verbose=0)

? ? ① estimator:需要填寫的實例化后的評估器。

? ? ② n_features_to_select:想要選擇的特征個數。

? ? ③ step:表示每次迭代中希望移除的特征個數。

RFE類的兩個很重要的屬性:

? ? ① .support_:返回所有的特征是否被選中的布爾矩陣。

? ? ② .ranking_:返回特征的按數次迭代中綜合重要性的。

4. 總結+補充

????????① 大多數機器學習算法中,會選擇 StandardScaler 來進行 特征縮放,因為 MinMaxScaler 對異常值 非常敏感。MinMaxScaler 在不涉及距離 度量、梯度、協方差計算以及數據 需要被時使用廣泛。

????????② 在嵌入法下,我們 很容易就能夠實現 特征選擇的目標:減少計算量,提升模型表現。因此,比起要思考 很多統計量的 過濾法來說,嵌入法 可能是更有效的一種方法。然而,在 算法本身很復雜的時候,過濾法的 計算遠遠比嵌入法要快,所以大型數據中,我們還是會優先考慮過濾法。

????????③ 經驗來說,過濾法更快速,但更粗糙。包裝法和嵌入法 更精確,比較適合具體到算法去調整,但計算量比較大,運行時間長。當數據量很大的時候,優先使用方差過濾和互信息法調整,再上其他特征選擇方法。使用邏輯回歸時,優先使用嵌入法。使用支持向量機時,優先使用包裝法。迷茫的時候,從過濾法走起,看具體數據具體分析。

????????④ 特征選擇只是 特征工程中的第一步。真正的高手,往往使用特征創造或特征提取來尋找高級特征。

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

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

相關文章

【網絡安全】PostMessage:分析JS實現XSS

未經許可,不得轉載。 文章目錄 前言示例正文 前言 PostMessage是一個用于在網頁間安全地發送消息的瀏覽器 API。它允許不同的窗口(例如,來自同一域名下的不同頁面或者不同域名下的跨域頁面)進行通信,而無需通過服務器…

【Arduino IDE】安裝及開發環境、ESP32庫

一、Arduino IDE下載 二、Arduino IDE安裝 三、ESP32庫 四、Arduino-ESP32庫配置 五、新建ESP32-S3N15R8工程文件 樂鑫官網 Arduino官方下載地址 Arduino官方社區 Arduino中文社區 一、Arduino IDE下載 ESP-IDF、MicroPython和Arduino是三種不同的開發框架,各自適…

定制開發AI智能名片商城微信小程序在私域流量池構建中的應用與策略

摘要 在數字經濟蓬勃發展的今天,私域流量已成為企業競爭的新戰場。定制開發AI智能名片商城微信小程序,作為私域流量池構建的創新工具,正以其獨特的優勢助力企業實現用戶資源的深度挖掘與高效轉化。本文深入探討了定制開發AI智能名片商城微信…

.NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 簡介及區別

簡述 在軟件開發的宇宙中,.NET是一個不斷擴展的星系,每個版本都像是一顆獨特的星球,擁有自己的特性和環境。作為技術經理,站在選擇的十字路口,您需要一張詳盡的星圖來導航。本文將作為您的向導,帶您穿越從.…

AIoTedge智能物聯網邊緣計算平臺:引領未來智能邊緣技術

引言 隨著物聯網技術的飛速發展,我們正步入一個萬物互聯的時代。AIoTedge智能物聯網邊緣計算平臺,以其創新的邊云協同架構,為智能設備和系統提供了強大的數據處理和智能決策能力,開啟了智能物聯網的新篇章。 智能邊緣計算平臺的核…

LLaMA-Factory

文章目錄 一、關于 LLaMA-Factory項目特色性能指標 二、如何使用1、安裝 LLaMA Factory2、數據準備3、快速開始4、LLaMA Board 可視化微調5、構建 DockerCUDA 用戶:昇騰 NPU 用戶:不使用 Docker Compose 構建CUDA 用戶:昇騰 NPU 用戶&#xf…

【Java項目筆記】01項目介紹

一、技術框架 1.后端服務 Spring Boot為主體框架 Spring MVC為Web框架 MyBatis、MyBatis Plus為持久層框架,負責數據庫的讀寫 阿里云短信服務 2.存儲服務 MySql redis緩存數據 MinIO為對象存儲,存儲非結構化數據(圖片、視頻、音頻&a…

推薦一款處理TCP數據的架構--EasyTcp4Net

EasyTcp4Net是一個基于c# Pipe,ReadonlySequence的高性能Tcp通信庫,旨在提供穩定,高效,可靠的tcp通訊服務。 基礎的消息通訊 重試機制 超時機制 SSL加密通信支持 KeepAlive 流量背壓控制 粘包和斷包處理 (支持固定頭處理,固定長度處理,固定字符處理) 日志支持Pipe &…

Spring MVC 的常用注解

RequestMapping 和 RestController注解 上面兩個注解,是Spring MCV最常用的注解。 RequestMapping , 他是用來注冊接口的路由映射。 路由映射:當一個用戶訪問url時,將用戶的請求對應到某個方法或類的過程叫做路由映射。 Reques…

定制QCustomPlot 帶有ListView的QCustomPlot 全網唯一份

定制QCustomPlot 帶有ListView的QCustomPlot 文章目錄 定制QCustomPlot 帶有ListView的QCustomPlot摘要需求描述實現關鍵字: Qt、 QCustomPlot、 魔改、 定制、 控件 摘要 先上效果,是你想要的,再看下面的分解,順便點贊搜藏一下;不是直接右上角。 QCustomPlot是一款…

基于springboot+vue+uniapp的駕校預約平臺小程序

開發語言:Java框架:springbootuniappJDK版本:JDK1.8服務器:tomcat7數據庫:mysql 5.7(一定要5.7版本)數據庫工具:Navicat11開發軟件:eclipse/myeclipse/ideaMaven包&#…

認識AOP--小白可看

AOP(Aspect-Oriented Programming,面向切面編程)是一種軟件開發范式,旨在通過橫切關注點(cross-cutting concerns)的方式來解耦系統中的各個模塊。橫切關注點指的是那些不屬于業務邏輯本身,但是…

Apache Sqoop

Apache Sqoop是一個開源工具,用于在Apache Hadoop和關系型數據庫(如MySQL、Oracle、PostgreSQL等)之間進行數據的批量傳輸。其主要功能包括: 1. 數據導入:從關系型數據庫(如MySQL、Oracle等)中將…

WPF設置歡迎屏幕,程序啟動過度動畫

當主窗體加載時間過長,這時候基本都會想添加一個等待操作來響應用戶點擊,提高用戶體驗。下面我記錄兩個方法,一點拙見,僅供參考。 方法1:在App類中使用SplashScreen類。 protected override void OnStartup(StartupEventArgs e)…

35.UART(通用異步收發傳輸器)-RS232(2)

(1)RS232接收模塊visio框圖: (2)接收模塊Verilog代碼編寫: /* 常見波特率: 4800、9600、14400、115200 在系統時鐘為50MHz時,對應計數為: (1/4800) * 10^9 /20 -1 10416 …

【作業】 貪心算法1

Tips:三題尚未完成。 #include <iostream> #include <algorithm> using namespace std; int a[110]; int main(){int n,r,sum0;cin>>n>>r;for(int i0;i<n;i){cin>>a[i];}sort(a0,an);for(int i0;i<n;i){if(i>r){a[i]a[i-r]a[i];}suma[…

[USACO18JAN] Cow at Large P

題解都說了&#xff0c;當統計 u u u為根節點的時候&#xff0c;答案就是滿足以下條件的 i i i的數量&#xff1a; d i ≥ g i d_i≥g_i di?≥gi?且 d f a i < g f a i d_{fa_i}<g_{fa_i} dfai??<gfai??&#xff0c;設這個數量為 a n s ans ans。以下嚴格證明 …

Solana開發資源都有哪些

Solana是一個高性能的區塊鏈平臺&#xff0c;吸引了大量開發者構建去中心化應用&#xff08;dApps&#xff09;。以下是一些有用的Solana開發教程和資源&#xff1a; 官方資源 Solana 官方文檔&#xff1a; Solana Documentation: 這是最全面的資源&#xff0c;包括快速入門、…

[實踐篇]13.29 QNX下的系統性能監控工具 - sysMonAppQNX(二)

2.7 getinfo: 獲取 DSP 的詳細信息 getinfo 可用選項 (如果沒有參數,則使用默認值) --q6 (默認選擇處理器: ADSP): adsp - 選擇的處理器為 ADSPsdsp - 選擇的處理器為傳感器 DSPcdsp - 選擇的處理器為計算 DSP示例: ./sysMonApp getinfo --q6 cdsp - 獲取計算 DSP 的詳細信…

大氣熱力學(8)——熱力學圖的應用之一(氣象要素求解)

本篇文章源自我在 2021 年暑假自學大氣物理相關知識時手寫的筆記&#xff0c;現轉化為電子版本以作存檔。相較于手寫筆記&#xff0c;電子版的部分內容有補充和修改。筆記內容大部分為公式的推導過程。 文章目錄 8.1 復習斜 T-lnP 圖上的幾種線8.1.1 等溫線和等壓線8.1.2 干絕熱…