機器學習中的特征工程

1 特征工程概述

特征工程是機器學習中的一個關鍵步驟,在機器學習領域中占有非常重要的地位,是機器學習中不可或缺的一部分,下圖展示了一個常規的機器學習流程:

特征工程涉及從原始數據中提取、選擇和轉換特征,以改善模型的性能。特征工程對于構建有效的機器學習模型至關重要,因為模型的質量和性能很大程度上取決于輸入數據的質量。特征工程通常包括特征選擇、數據預處理、降維等環節。如下圖所示:

1.1 定義

  • 特征工程(Feature Engineering)特征工程是將原始數據轉化成更好的表達問題本質的特征的過程,使得將這些特征運用到預測模型中能提高對不可見數據的模型預測精度。

  • 特征工程簡單講就是發現對因變量y有明顯影響作用的特征,通常稱自變量x為特征,特征工程的目的是發現重要特征。

  • 如何能夠分解和聚合原始數據,以更好的表達問題的本質?這是做特征工程的目的。 “feature engineering is manually designing what the input x’s should be.” “you have to turn your inputs into things the algorithm can understand.”

  • 特征工程是數據挖掘模型開發中最耗時、最重要的一步。

1.2 意義

  • 特征工程是一個包含內容很多的主題,也被認為是成功應用機器學習的一個很重要的環節。如何充分利用數據進行預測建模就是特征工程要解決的問題! “實際上,所有機器學習算法的成功取決于如何呈現數據。” “特征工程是一個看起來不值得在任何論文或者書籍中被探討的一個主題。但是他卻對機器學習的成功與否起著至關重要的作用。機器學習算法很多都是由于建立一個學習器能夠理解的工程化特征而獲得成功的。”——ScottLocklin,in “Neglected machine learning ideas”

  • 數據中的特征對預測的模型和獲得的結果有著直接的影響。可以這樣認為,特征選擇和準備越好,獲得的結果也就越好。這是正確的,但也存在誤導。預測的結果其實取決于許多相關的屬性:比如說能獲得的數據、準備好的特征以及模型的選擇。

2 特征選擇

當數據預處理完成后,我們需要選擇有意義的特征輸入機器學習的算法和模型進行訓練。不同的特征對模型的影響程度不同,我們要自動地選擇出對問題重要的一些特征,移除與問題相關性不是很大的特征,這個過程就叫做特征選擇。特征的選擇在特征工程中十分重要,往往可以直接決定最后模型訓練效果的好壞。

通常來說,從兩個方面考慮來選擇特征:特征是否發散:如果一個特征不發散,例如方差接近于0,也就是說樣本在這個特征上基本上沒有差異,這個特征對于樣本的區分并沒有什么用。特征與目標的相關性:這點比較顯見,與目標相關性高的特征,應當優選選擇。

常用的特征選擇方法有:過濾式(filter)、包裹式(wrapper)、嵌入式(embedding)。

2.1 過濾式

過濾式特征選擇是通過評估每個特征和結果的相關性,來對特征進行篩選,留下相關性最強的幾個特征。核心思想是:先對數據集進行特征選擇,然后再進行模型的訓練。過濾式特征選擇的優點是思路簡單,往往通過Pearson相關系數法、方差選擇法、互信息法等方法計算相關性,然后保留相關性最強的N個特征,就可以交給模型訓練;缺點是沒有考慮到特征與特征之間的相關性,從而導致模型最后的訓練效果沒那么好。

2.2 包裹式

包裹式特征選擇是把最終要使用的機器學習模型、評測性能的指標作為特征選擇的重要依據,每次去選擇若干特征,或是排除若干特征。通常包裹式特征選擇要比過濾式的效果更好,但由于訓練過程時間久,系統的開銷也更大。最典型的包裹型算法為遞歸特征刪除算法,其原理是使用一個基模型(如:隨機森林、邏輯回歸等)進行多輪訓練,每輪訓練結束后,消除若干權值系數較低的特征,再基于新的特征集進行新的一輪訓練。

2.3 嵌入式

嵌入式特征選擇法是根據機器學習的算法、模型來分析特征的重要性,從而選擇最重要的N個特征。與包裹式特征選擇法最大的不同是,嵌入式方法是將特征選擇過程與模型的訓練過程結合為一體,這樣就可以快速地找到最佳的特征集合,更加高效、快捷。常用的嵌入式特征選擇方法有基于正則化項(如:L1正則化)的特征選擇法和基于樹模型的特征選擇法(如:GBDT)。

在選擇特征時,還包含如下方法:

  • 組合特征: 結合兩個或多個特征,創建新的特征,以捕捉數據中的復雜關系。

  • 基于領域知識的特征構造: 利用專業知識構建更具表現力的特征。

?

3 數據預處理

數據預處理是特征工程中最為重要的一個環節,良好的數據預處理可以使模型的訓練達到事半功倍的效果。數據預處理旨在通過歸一化、標準化、正則化等方式改進不完整、不一致、無法直接使用的數據。通過特征提取,我們能得到未經處理的特征,這時的特征可能有以下問題:

  • 不屬于同一量綱:即特征的規格不一樣,不能夠放在一起比較。無量綱化可以解決這一問題。

  • 信息冗余:對于某些定量特征,其包含的有效信息為區間劃分,例如學習成績,假若只關心“及格”或不“及 格”,那么需要將定量的考分,轉換成“1”和“0”表示及格和未及格。二值化可以解決這一問題。

  • 定性特征不能直接使用:某些機器學習算法和模型只能接受定量特征的輸入,那么需要將定性特征轉換為定 量特征。最簡單的方式是為每一種定性值指定一個定量值,但是這種方式過于靈活,增加了調參的工作。通 常使用啞編碼的方式將定性特征轉換為定量特征:假設有N種定性值,則將這一個特征擴展為N種特征,當原 始特征值為第i種定性值時,第i個擴展特征賦值為1,其他擴展特征賦值為0。啞編碼的方式相比直接指定的方 式,不用增加調參的工作,對于線性模型來說,使用啞編碼后的特征可達到非線性的效果。

  • 存在缺失值:缺失值需要補充。

  • 信息利用率低:不同的機器學習算法和模型對數據中信息的利用是不同的,之前提到在線性模型中,使用對 定性特征啞編碼可以達到非線性的效果。類似地,對定量變量多項式化,或者進行其他的轉換,都能達到非 線性的效果。
    我們使用sklearn中的preproccessing庫來進行數據預處理,可以覆蓋以上問題的解決方案

數據預處理具體方法如下:

3.1 歸一化

歸一化是對數據集進行區間縮放,縮放到[0,1]的區間內,把有單位的數據轉化為沒有單位的數據,即統一數據的衡量標準,消除單位的影響。這樣方便了數據的處理,使數據處理更加快速、敏捷。Skearn中最常用的歸一化的方法是:MinMaxScaler。此外還有對數函數轉換(log),反余切轉換等。

3.2 標準化

標準化是在不改變原數據分布的前提下,將數據按比例縮放,使之落入一個限定的區間,使數據之間具有可比性。但當個體特征太過或明顯不遵從高斯正態分布時,標準化表現的效果會比較差。標準化的目的是為了方便數據的下一步處理,比如:進行的數據縮放等變換。常用的標準化方法有z-score標準化、StandardScaler標準化等。

3.3 離散化

離散化是把連續型的數值型特征分段,每一段內的數據都可以當做成一個新的特征。具體又可分為等步長方式離散化和等頻率的方式離散化,等步長的方式比較簡單,等頻率的方式更加精準,會跟數據分布有很大的關系。 代碼層面,可以用pandas中的cut方法進行切分。總之,離散化的特征能夠提高模型的運行速度以及準確率。

3.4 二值化

特征的二值化處理是將數值型數據輸出為布爾類型。其核心在于設定一個閾值,當樣本書籍大于該閾值時,輸出為1,小于等于該閾值時輸出為0。我們通常使用preproccessing庫的Binarizer類對數據進行二值化處理。

3.5 啞編碼

我們針對類別型的特征,通常采用啞編碼(One_Hot Encodin)的方式。所謂的啞編碼,直觀的講就是用N個維度來對N個類別進行編碼,并且對于每個類別,只有一個維度有效,記作數字1 ;其它維度均記作數字0。但有時使用啞編碼的方式,可能會造成維度的災難,所以通常我們在做啞編碼之前,會先對特征進行Hash處理,把每個維度的特征編碼成詞向量。

以上為大家介紹了幾種較為常見、通用的數據預處理方式,但只是浩大特征工程中的冰山一角。往往很多特征工程的方法需要我們在項目中不斷去總結積累比如:針對缺失值的處理,在不同的數據集中,用均值填充、中位數填充、前后值填充的效果是不一樣的;對于類別型的變量,有時我們不需要對全部的數據都進行啞編碼處理;對于時間型的變量有時我們有時會把它當作是離散值,有時會當成連續值處理等。所以很多情況下,我們要根據實際問題,進行不同的數據預處理。

?

4 數據降維

如果拿特征選擇后的數據直接進行模型的訓練,由于數據的特征矩陣維度大,可能會存在數據難以理解、計算量增大、訓練時間過長等問題,因此我們要對數據進行降維。降維是指把原始高維空間的特征投影到低維度的空間,進行特征的重組,以減少數據的維度。降維與特征最大的不同在于,特征選擇是進行特征的剔除、刪減,而降維是做特征的重組構成新的特征,原始特征全部“消失”了,性質發生了根本的變化。常見的降維方法有:主成分分析法(PCA)和線性判別分析法(LDA)。

4.1 主成分分析法

主成分分析法(PCA)是最常見的一種線性降維方法,其要盡可能在減少信息損失的前提下,將高維空間的數據映射到低維空間中表示,同時在低維空間中要最大程度上的保留原數據的特點。主成分分析法本質上是一種無監督的方法,不用考慮數據的類標,它的基本步驟大致如下:

  • 數據中心化(每個特征維度減去相應的均值)

  • 計算協方差矩陣以及它的特征值和特征向量

  • 將特征值從大到小排序并保留最上邊的N個特征

  • 將高維數據轉換到上述N個特征向量構成的新的空間中

此外,在把特征映射到低維空間時要注意,每次要保證投影維度上的數據差異性最大(也就是說投影維度的方差最大)。

算法詳見:https://blog.csdn.net/lsb2002/article/details/131815123

4.2 線性判別分析法

線性判別分析法(LDA)也是一種比較常見的線性降維方法,但不同于PCA的是,它是一種有監督的算法,也就是說它數據集的每個樣本會有一個輸出類標。線性判別算法的核心思想是,在把數據投影到低維空間后,希望同一種類別數據的投影點盡可能的接近,而不同類別數據的類別中心之間的距離盡可能的遠。也就是說LDA是想讓降維后的數據點盡可能地被區分開。

算法詳見:https://blog.csdn.net/lsb2002/article/details/131843006

?

5 特征工程的挑戰

  • 自動化: 盡管有些特征工程步驟可以自動化,但很多任務仍需要專業知識和經驗判斷。

  • 復雜性和計算成本: 特征工程可以非常復雜且耗時,特別是在處理大型數據集時。

  • 模型依賴性: 不同的模型可能對特征的需求不同,因此特征工程需要針對特定的模型進行調整。

5 總結

特征工程是構建高效機器學習模型的關鍵。它包括一系列技術和步驟,旨在通過提取、選擇和轉換特征來優化模型的輸入數據。盡管特征工程是一個復雜且需要大量專業知識的過程,但它對于提高模型性能和準確性至關重要。隨著機器學習領域的發展,特征工程的方法和工具也在不斷進步,使得這一過程更加高效和自動化。

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

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

相關文章

Lombok 處理異常@SneakyThrows 注解

文章目錄 注解的介紹具體示例 注解的介紹 SneakyThrows 是 Lombok 框架提供的一個注解,它可以用于在方法中拋出受檢異常時,不用顯式地對異常進行處理,而是將異常包裝成 RuntimeException 拋出 使用 SneakyThrows 注解后,編譯器會…

“輕松管理文件,一鍵導出表格,讓您的歸檔工作井井有條“

在忙碌的工作中,我們經常會被大量的文件和數據所困擾。如何有效地管理和整理這些資料,成為了一個讓人頭疼的問題。今天,我們向您介紹一款強大的文件管理工具——一鍵導出表格,幫助您輕松解決這個問題。 第一步,首先我們…

區塊鏈實驗室(30) - 區塊鏈期刊:Distributed Ledger Technologies: Research and Practice

區塊鏈涉及多學科及技術,眾多期刊接收區塊鏈文章。Distributed Ledger Technologies: Research and Practice是ACM出版集團的一本期刊。 Distributed Ledger Technologies: Research and Practice創刊歷史很短,始于2022年,出版期數也不多。 載…

力扣面試150題 | 多數元素

力扣面試150題 | 多數元素 題目描述解題思路代碼實現 題目描述 給定一個大小為 n 的數組 nums ,返回其中的多數元素。多數元素是指在數組中出現次數 大于 ? n/2 ? 的元素。 你可以假設數組是非空的,并且給定的數組總是存在多數元素。 示…

Leetcode 劍指 Offer II 056. 兩數之和 IV - 輸入二叉搜索樹

題目難度: 簡單 原題鏈接 今天繼續更新 Leetcode 的劍指 Offer(專項突擊版)系列, 大家在公眾號 算法精選 里回復 劍指offer2 就能看到該系列當前連載的所有文章了, 記得關注哦~ 題目描述 給定一個二叉搜索樹的 根節點 root 和一個整數 k , 請判斷該二叉…

Java 使用oshi獲取當前服務器狀態cpu、內存、存儲等核心信息

文章目錄 簡介相關資料maven依賴oshi-官方示例獲取CUP信息代碼獲取內存信息獲取磁盤信息 簡介 OSHI 是基于 JNA 的(本地)操作系統和硬件信息庫。它不需要安裝任何其他額外的本地庫,旨在提供一種跨平臺的實現來檢索系統信息,例如操…

[ROS2] --- action

1 action介紹 ROS通信機制也會被常常用到——那就是動作。從這個名字上就可以很好理解這個概念的含義,這種通信機制的目的就是便于對機器人某一完整行為的流程進行管理。 1.1 客戶端/服務器模型 動作和服務類似,使用的也是客戶端和服務器模型&#xf…

數據結構中處理散列沖突的四種方法

1 開放定址法 1.1 定義 開放定址法就是一旦發生了沖突,就去尋找下一個空的散列地址 1.2 要求 只要散列表足夠大 空的散列地址總能找到,并將記錄存入 1.3 線性探測法 使用該公式用于解決沖突的開放定址法稱為線性探測法 對于線性探測法&#xff0c…

【異常】SpringBoot3.2.0 Description: Failed to configure a DataSource: ‘url‘ att

mybatisPlus 多數據源導致 異常 Description:Failed to configure a DataSource: url attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suitable driver classAction:Consider the following:If you want an embed…

通過kubeadm方式安裝k8s

虛擬機最少是 2 core,master內存最小3G,node內存最小2G. 要求的Docker版本是18.03,如果不是安裝的docker ce,版本是過舊的,可以選擇刪除后重新安裝; 也可以重新創建一個虛擬機執行以下命令。 簡單方法&am…

線性代數基礎【1】行列式

第一節 行列式的基本概念和性質 一、基本概念 ①逆序 1,2和2,1是一對逆序 ②逆序數 1,2,3,5,4的逆序數為1;1,3,2,5,4逆序數為4; ③行列式 ④余子數和代數余子數 行列式挖掉一個數(例如aij),將原行列式去掉i行j列的行列式M,則M為余子數,代數余子數記為Aij,如果(ij)為偶數…

云LIS實驗室信息管理系統源碼——實驗室信息管理解決方案

云LIS(Cloud Laboratory Information System)是一種為區域醫療提供臨床實驗室信息服務的計算機應用程序,其主要功能是協助區域內所有臨床實驗室相互協調并完成日常檢驗工作,對區域內的檢驗數據進行集中管理和共享,通過…

uniapp引入插件市場echarts圖表(l-echart)實現小程序端圖表,并修改源碼簡化使用

使用的uniapp插件:l-echart https://ext.dcloud.net.cn/plugin?id4899 注意事項 1.因為小程序有主包分包大小限制,并且uni_modules中的包也會算在主包體積中,而我項目中的圖表是在分包中使用的,所以我移動uni_modules中的l-echart圖表組件…

Python 的list是...

對 Python list遺憾 sum 對列表執行正確的操作幾乎是不可能的。 my_list list(range(1, 100001))能夠執行 sum()、min() 和 max() 的情況非常罕見。 sum(my_list)5000050000比如mean(), std() ,這些也不行。 mean(my_list)----------------------------------…

高通CRM的v4l2驅動模型

概述下crm中v4l2框架的初始化創建流程: 對于CRM主設備的v4l2框架創建過程: 1、分配和初始化v4l2 device對象 2、分配和初始化media device對象,然后將v4l2 device中mdev綁定到media device上 3、分配和初始化video device對象&#xff0c…

Python:核心知識點整理大全9-筆記

目錄 ?編輯 5.2.4 比較數字 5.2.5 檢查多個條件 1. 使用and檢查多個條件 2. 使用or檢查多個條件 5.2.6 檢查特定值是否包含在列表中 5.2.7 檢查特定值是否不包含在列表中 banned_users.py 5.2.8 布爾表達式 5.3 if 語句 5.3.1 簡單的 if 語句 5.3.2 if-else 語句 …

Java中sleep() 和 wait() 有什么區別?

Java中sleep() 和 wait() 有什么區別? sleep() 和 wait() 是兩個在 Java 中用于線程控制的方法,它們有一些重要的區別: 關聯對象: sleep() 是 Thread 類的靜態方法,它讓當前線程休眠指定的時間,不釋放對象…

YOLOv8改進 | 2023 | RCS-OSA替換C2f實現暴力漲點(減少通道的空間對象注意力機制)

一、本文介紹 本文給大家帶來的改進機制是RCS-YOLO提出的RCS-OSA模塊,其全稱是"Reduced Channel Spatial Object Attention",意即"減少通道的空間對象注意力"。這個模塊的主要功能是通過減少特征圖的通道數量,同時關注空…

Android Studio APK打包指定包名

在最近寫的一個案列中嘗試用最新版的Android studio對項目進行打包測試,想要指定打包的包名這樣便于區分的時候發現以前的許多方法都過時了,查了很多資料才弄明白each被拋棄了。本教程建議先看第三步。 目錄 一、配置根目錄下gradle.build 二、通過bui…

Billu_b0x

信息收集 #正常進行信息收集就好Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-18 22:07 CST Nmap scan report for 192.168.182.142 (192.168.182.142) Host is up (0.00073s latency).PORT STATE SERVICE 22/tcp open ssh 80/tcp open http | http-cookie-flags:…