
使用sklearn優雅地進行數據挖掘
1 使用sklearn進行數據挖掘
1.1 數據挖掘的步驟
數據挖掘通常包括數據采集,數據分析,特征工程,訓練模型,模型評估等步驟。使用sklearn工具可以方便地進行特征工程和模型訓練工作,在《使用sklearn做單機特征工程》中,我們最后留下了一些疑問:特征處理類都有三個方法fit、transform和fit_transform,fit方法居然和模型訓練方法fit同名(不光同名,參數列表都一樣),這難道都是巧合?
顯然,這不是巧合,這正是sklearn的設計風格。我們能夠更加優雅地使用sklearn進行特征工程和模型訓練工作。此時,不妨從一個基本的數據挖掘場景入手:
我們使用sklearn進行虛線框內的工作(sklearn也可以進行文本特征提?。?。通過分析sklearn源碼,我們可以看到除訓練,預測和評估以外,處理其他工作的類都實現了3個方法:fit、transform和fit_transform。從命名中可以看到,fit_transform方法是先調用fit然后調用transform,我們只需要關注fit方法和transform方法即可。
transform方法主要用來對特征進行轉換。從可利用信息的角度來說,轉換分為無信息轉換和有信息轉換。無信息轉換是指不利用任何其他信息進行轉換,比如指數、對數函數轉換等。有信息轉換從是否利用目標值向量又可分為無監督轉換和有監督轉換。無監督轉換指只利用特征的統計信息的轉換,統計信息包括均值、標準差、邊界等等,比如標準化、PCA法降維等。有監督轉換指既利用了特征信息又利用了目標值信息的轉換,比如通過模型選擇特征、LDA法降維等。通過總結常用的轉換類,我們得到下表:
包 | 類 | 參數列表 | 類別 | fit方法有用 | 說明 |
sklearn.preprocessing | StandardScaler | 特征 | 無監督 | Y | 標準化 |
sklearn.preprocessing | MinMaxScaler | 特征 | 無監督 | Y | 區間縮放 |
sklearn.preprocessing | Normalizer | 特征 | 無信息 | N | 歸一化 |
sklearn.preprocessing | Binarizer | 特征 | 無信息 | N | 定量特征二值化 |
sklearn.preprocessing | OneHotEncoder | 特征 | 無監督 | Y | 定性特征編碼 |
sklearn.preprocessing | Imputer | 特征 | 無監督 | Y | 缺失值計算 |
sklearn.preprocessing | PolynomialFeatures | 特征 | 無信息 | N | 多項式變換(fit方法僅僅生成了多項式的表達式) |
sklearn.preprocessing | FunctionTransformer | 特征 | 無信息 | N | 自定義函數變換(自定義函數在transform方法中調用) |
sklearn.feature_selection | VarianceThreshold | 特征 | 無監督 | Y | 方差選擇法 |
sklearn.feature_selection | SelectKBest | 特征/特征+目標值 | 無監督/有監督 | Y | 自定義特征評分選擇法 |
sklearn.feature_selection | SelectKBest+chi2 | 特征+目標值 | 有監督 | Y | 卡方檢驗選擇法 |
sklearn.feature_selection | RFE | 特征+目標值 | 有監督 | Y | 遞歸特征消除法 |
sklearn.feature_selection | SelectFromModel | 特征+目標值 | 有監督 | Y | 自定義模型訓練選擇法 |
sklearn.decomposition | PCA | 特征 | 無監督 | Y | PCA降維 |
sklearn.lda | LDA | 特征+目標值 | 有監督 | Y | LDA降維 |
不難看到,只有有信息的轉換類的fit方法才實際有用,顯然fit方法的主要工作是獲取特征信息和目標值信息,在這點上,fit方法和模型訓練時的fit方法就能夠聯系在一起了:都是通過分析特征和目標值,提取有價值的信息,對于轉換類來說是某些統計量,對于模型來說可能是特征的權值系數等。另外,只有有監督的轉換類的fit和transform方法才需要特征和目標值兩個參數。fit方法無用不代表其沒實現,而是除合法性校驗以外,其并沒有對特征和目標值進行任何處理,Normalizer的fit方法實現如下:
基于這些特征處理工作都有共同的方法,那么試想可不可以將他們組合在一起?在本文假設的場景中,我們可以看到這些工作的組合形式有兩種:流水線式和并行式?;诹魉€組合的工作需要依次進行,前一個工作的輸出是后一個工作的輸入;基于并行式的工作可以同時進行,其使用同樣的輸入,所有工作完成后將各自的輸出合并之后輸出。sklearn提供了包pipeline來完成流水線式和并行式的工作。
1.2 數據初貌
在此,我們仍然使用IRIS數據集來進行說明。為了適應提出的場景,對原數據集需要稍微加工:
1.3 關鍵技術
并行處理,流水線處理,自動化調參,持久化是使用sklearn優雅地進行數據挖掘的核心。并行處理和流水線處理將多個特征處理工作,甚至包括模型訓練工作組合成一個工作(從代碼的角度來說,即將多個對象組合成了一個對象)。在組合的前提下,自動化調參技術幫我們省去了人工調參的反鎖。訓練好的模型是貯存在內存中的數據,持久化能夠將這些數據保存在文件系統中,之后使用時無需再進行訓練,直接從文件系統中加載即可。
2 并行處理
并行處理使得多個特征處理工作能夠并行地進行。根據對特征矩陣的讀取方式不同,可分為整體并行處理和部分并行處理。整體并行處理,即并行處理的每個工作的輸入都是特征矩陣的整體;部分并行處理,即可定義每個工作需要輸入的特征矩陣的列。
2.1 整體并行處理
pipeline包提供了FeatureUnion類來進行整體并行處理:
2.2 部分并行處理
整體并行處理有其缺陷,在一些場景下,我們只需要對特征矩陣的某些列進行轉換,而不是所有列。pipeline并沒有提供相應的類(僅OneHotEncoder類實現了該功能),需要我們在FeatureUnion的基礎上進行優化:
在本文提出的場景中,我們對特征矩陣的第1列(花的顏色)進行定性特征編碼,對第2、3、4列進行對數函數轉換,對第5列進行定量特征二值化處理。使用FeatureUnionExt類進行部分并行處理的代碼如下:
3 流水線處理
pipeline包提供了Pipeline類來進行流水線處理。流水線上除最后一個工作以外,其他都要執行fit_transform方法,且上一個工作輸出作為下一個工作的輸入。最后一個工作必須實現fit方法,輸入為上一個工作的輸出;但是不限定一定有transform方法,因為流水線的最后一個工作可能是訓練!
根據本文提出的場景,結合并行處理,構建完整的流水線的代碼如下:
網格搜索為自動化調參的常見技術之一,grid_search包提供了自動化調參的工具,包括GridSearchCV類。對組合好的對象進行訓練以及調參的代碼如下:
externals.joblib包提供了dump和load方法來持久化和加載內存數據:
包 | 類或方法 | 說明 |
sklearn.pipeline | Pipeline | 流水線處理 |
sklearn.pipeline | FeatureUnion | 并行處理 |
sklearn.grid_search | GridSearchCV | 網格搜索調參 |
externals.joblib | dump | 數據持久化 |
externals.joblib | load | 從文件系統中加載數據至內存 |
注意:組合和持久化都會涉及pickle技術,在sklearn的技術文檔中有說明,將lambda定義的函數作為FunctionTransformer的自定義轉換函數將不能pickle化。
7 總結2015年我設計了一個基于sklearn的自動化特征工程的工具,其以Mysql數據庫作為原始數據源,提供了“靈活的”特征提取、特征處理的配置方法,同時重新封裝了數據、特征和模型,以方便調度系統識別。說靈活,其實也只是通過配置文件的方式定義每個特征的提取和處理的sql語句。但是純粹使用sql語句來進行特征處理是很勉強的,除去特征提取以外,我又造了一回輪子,原來sklearn提供了這么優秀的特征處理、工作組合等功能。所以,我在這個博客中先不提任何算法和模型,先從數據挖掘工作的第一步開始,使用基于Python的各個工具把大部分步驟都走了一遍(抱歉,我暫時忽略了特征提?。?,希望這樣的梳理能夠少讓初學者走彎路吧。
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25在當今數字化時代,數據分析師的重要性與日俱增。但許多人在踏上這條職業道路時,往往充滿疑惑: 如何成為一名數據分析師?成為 ...
2025-04-24以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《劉靜:10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda ...
2025-04-23