成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用Sklearn進行數據挖掘

大數據
我們使用sklearn進行虛線框內的工作(sklearn也可以進行文本特征提取)。通過分析sklearn源碼,我們可以看到除訓練,預測和評估以外,處理其他工作的類都實現了3個方法:fit、transform和fit_transform。從命名中可以看到,fit_transform方法是先調用fit然后調用transform,我們只需要關注fit方法和transform方法即可。

1 使用sklearn進行數據挖掘

1.1 數據挖掘的步驟

數據挖掘通常包括數據采集,數據分析,特征工程,訓練模型,模型評估等步驟。使用sklearn工具可以方便地進行特征工程和模型訓練工作,在《使用sklearn做單機特征工程》中,我們***留下了一些疑問:特征處理類都有三個方法fit、transform和fit_transform,fit方法居然和模型訓練方法fit同名(不光同名,參數列表都一樣),這難道都是巧合?

[[208176]]

顯然,這不是巧合,這正是sklearn的設計風格。我們能夠更加優雅地使用sklearn進行特征工程和模型訓練工作。此時,不妨從一個基本的數據挖掘場景入手:

使用sklearn進行數據挖掘

我們使用sklearn進行虛線框內的工作(sklearn也可以進行文本特征提取)。通過分析sklearn源碼,我們可以看到除訓練,預測和評估以外,處理其他工作的類都實現了3個方法:fit、transform和fit_transform。從命名中可以看到,fit_transform方法是先調用fit然后調用transform,我們只需要關注fit方法和transform方法即可。

transform方法主要用來對特征進行轉換。從可利用信息的角度來說,轉換分為無信息轉換和有信息轉換。無信息轉換是指不利用任何其他信息進行轉換,比如指數、對數函數轉換等。有信息轉換從是否利用目標值向量又可分為無監督轉換和有監督轉換。無監督轉換指只利用特征的統計信息的轉換,統計信息包括均值、標準差、邊界等等,比如標準化、PCA法降維等。有監督轉換指既利用了特征信息又利用了目標值信息的轉換,比如通過模型選擇特征、LDA法降維等。通過總結常用的轉換類,我們得到下表:

使用sklearn進行數據挖掘

不難看到,只有有信息的轉換類的fit方法才實際有用,顯然fit方法的主要工作是獲取特征信息和目標值信息,在這點上,fit方法和模型訓練時的fit方法就能夠聯系在一起了:都是通過分析特征和目標值,提取有價值的信息,對于轉換類來說是某些統計量,對于模型來說可能是特征的權值系數等。另外,只有有監督的轉換類的fit和transform方法才需要特征和目標值兩個參數。fit方法無用不代表其沒實現,而是除合法性校驗以外,其并沒有對特征和目標值進行任何處理,Normalizer的fit方法實現如下:

 

  1. def fit(self, X, y=None): 
  2. """Do nothing and return the estimator unchanged 
  3. This method is just there to implement the usual API and hence 
  4. work in pipelines. 
  5. ""
  6. X = check_array(X, accept_sparse='csr'
  7. return self 

基于這些特征處理工作都有共同的方法,那么試想可不可以將他們組合在一起?在本文假設的場景中,我們可以看到這些工作的組合形式有兩種:流水線式和并行式。基于流水線組合的工作需要依次進行,前一個工作的輸出是后一個工作的輸入;基于并行式的工作可以同時進行,其使用同樣的輸入,所有工作完成后將各自的輸出合并之后輸出。sklearn提供了包pipeline來完成流水線式和并行式的工作。

1.2 數據初貌

在此,我們仍然使用IRIS數據集來進行說明。為了適應提出的場景,對原數據集需要稍微加工:

 

  1. from numpy import hstack, vstack, array, median, nan 
  2. from numpy.random import choice 
  3. from sklearn.datasets import load_iris  
  4. #特征矩陣加工 
  5. #使用vstack增加一行含缺失值的樣本(nan, nan, nan, nan) 
  6. #使用hstack增加一列表示花的顏色(0-白、1-黃、2-紅),花的顏色是隨機的,意味著顏色并不影響花的分類 
  7. iris.data = hstack((choice([0, 1, 2], size=iris.data.shape[0]+1).reshape(-1,1), vstack((iris.data, array([nan, nan, nan, nan]).reshape(1,-1))))) 
  8. #目標值向量加工 
  9. #增加一個目標值,對應含缺失值的樣本,值為眾數 
  10. iris.target = hstack((iris.target, array([median(iris.target)]))) 

1.3 關鍵技術

并行處理,流水線處理,自動化調參,持久化是使用sklearn優雅地進行數據挖掘的核心。并行處理和流水線處理將多個特征處理工作,甚至包括模型訓練工作組合成一個工作(從代碼的角度來說,即將多個對象組合成了一個對象)。在組合的前提下,自動化調參技術幫我們省去了人工調參的反鎖。訓練好的模型是貯存在內存中的數據,持久化能夠將這些數據保存在文件系統中,之后使用時無需再進行訓練,直接從文件系統中加載即可。

2 并行處理

并行處理使得多個特征處理工作能夠并行地進行。根據對特征矩陣的讀取方式不同,可分為整體并行處理和部分并行處理。整體并行處理,即并行處理的每個工作的輸入都是特征矩陣的整體;部分并行處理,即可定義每個工作需要輸入的特征矩陣的列。

2.1 整體并行處理

pipeline包提供了FeatureUnion類來進行整體并行處理:

 

  1. from numpy import log1p 
  2. from sklearn.preprocessing import FunctionTransformer 
  3. from sklearn.preprocessing import Binarizer 
  4. from sklearn.pipeline import FeatureUnion  
  5.  #新建將整體特征矩陣進行對數函數轉換的對象 
  6. step2_1 = ('ToLog', FunctionTransformer(log1p)) 
  7. #新建將整體特征矩陣進行二值化類的對象 
  8. step2_2 = ('ToBinary', Binarizer()) 
  9. #新建整體并行處理對象 
  10. #該對象也有fit和transform方法,fit和transform方法均是并行地調用需要并行處理的對象的fit和transform方法 
  11. #參數transformer_list為需要并行處理的對象列表,該列表為二元組列表,***元為對象的名稱,第二元為對象 
  12.  step2 = ('FeatureUnion', FeatureUnion(transformer_list=[step2_1, step2_2, step2_3])) 

2.2 部分并行處理

整體并行處理有其缺陷,在一些場景下,我們只需要對特征矩陣的某些列進行轉換,而不是所有列。pipeline并沒有提供相應的類(僅OneHotEncoder類實現了該功能),需要我們在FeatureUnion的基礎上進行優化:

View Code

在本文提出的場景中,我們對特征矩陣的第1列(花的顏色)進行定性特征編碼,對第2、3、4列進行對數函數轉換,對第5列進行定量特征二值化處理。使用FeatureUnionExt類進行部分并行處理的代碼如下:

 

  1. from numpy import log1p 
  2. from sklearn.preprocessing import OneHotEncoder 
  3. from sklearn.preprocessing import FunctionTransformer 
  4. from sklearn.preprocessing import Binarizer  
  5. #新建將部分特征矩陣進行定性特征編碼的對象 
  6. step2_1 = ('OneHotEncoder', OneHotEncoder(sparse=False)) 
  7. #新建將部分特征矩陣進行對數函數轉換的對象 
  8. step2_2 = ('ToLog', FunctionTransformer(log1p)) 
  9. #新建將部分特征矩陣進行二值化類的對象 
  10. step2_3 = ('ToBinary', Binarizer()) 
  11. #新建部分并行處理對象 
  12. #參數transformer_list為需要并行處理的對象列表,該列表為二元組列表,***元為對象的名稱,第二元為對象 
  13. #參數idx_list為相應的需要讀取的特征矩陣的列 
  14. step2 = ('FeatureUnionExt', FeatureUnionExt(transformer_list=[step2_1, step2_2, step2_3], idx_list=[[0], [1, 2, 3], [4]])) 

3 流水線處理

pipeline包提供了Pipeline類來進行流水線處理。流水線上除***一個工作以外,其他都要執行fit_transform方法,且上一個工作輸出作為下一個工作的輸入。***一個工作必須實現fit方法,輸入為上一個工作的輸出;但是不限定一定有transform方法,因為流水線的***一個工作可能是訓練!

根據本文提出的場景,結合并行處理,構建完整的流水線的代碼如下:

 

  1. from numpy import log1p 
  2. from sklearn.preprocessing import Imputer 
  3. from sklearn.preprocessing import OneHotEncoder 
  4. from sklearn.preprocessing import FunctionTransformer 
  5. from sklearn.preprocessing import Binarizer 
  6. from sklearn.preprocessing import MinMaxScaler 
  7. from sklearn.feature_selection import SelectKBest 
  8. from sklearn.feature_selection import chi2 
  9. from sklearn.decomposition import PCA 
  10. from sklearn.linear_model import LogisticRegression 
  11. from sklearn.pipeline import Pipeline 

  12. #新建計算缺失值的對象 
  13. step1 = ('Imputer', Imputer()) 
  14. #新建將部分特征矩陣進行定性特征編碼的對象 
  15. step2_1 = ('OneHotEncoder', OneHotEncoder(sparse=False)) 
  16. #新建將部分特征矩陣進行對數函數轉換的對象 
  17. step2_2 = ('ToLog', FunctionTransformer(log1p)) 
  18. #新建將部分特征矩陣進行二值化類的對象 
  19. step2_3 = ('ToBinary', Binarizer()) 
  20. #新建部分并行處理對象,返回值為每個并行工作的輸出的合并 
  21. step2 = ('FeatureUnionExt', FeatureUnionExt(transformer_list=[step2_1, step2_2, step2_3], idx_list=[[0], [1, 2, 3], [4]])) 
  22. #新建無量綱化對象 
  23. step3 = ('MinMaxScaler', MinMaxScaler()) 
  24. #新建卡方校驗選擇特征的對象 
  25. step4 = ('SelectKBest', SelectKBest(chi2, k=3)) 
  26. #新建PCA降維的對象 
  27. step5 = ('PCA', PCA(n_components=2)) 
  28. #新建邏輯回歸的對象,其為待訓練的模型作為流水線的***一步 
  29. step6 = ('LogisticRegression', LogisticRegression(penalty='l2')) 
  30. #新建流水線處理對象 
  31. #參數steps為需要流水線處理的對象列表,該列表為二元組列表,***元為對象的名稱,第二元為對象 
  32. pipeline = Pipeline(steps=[step1, step2, step3, step4, step5, step6]) 

4 自動化調參

網格搜索為自動化調參的常見技術之一,grid_search包提供了自動化調參的工具,包括GridSearchCV類。對組合好的對象進行訓練以及調參的代碼如下:

 

  1. from sklearn.grid_search import GridSearchCV 
    #新建網格搜索對象 
  2. #***參數為待訓練的模型 
  3. #param_grid為待調參數組成的網格,字典格式,鍵為參數名稱(格式“對象名稱__子對象名稱__參數名稱”),值為可取的參數值列表 
  4. grid_search = GridSearchCV(pipeline, param_grid={'FeatureUnionExt__ToBinary__threshold':[1.0, 2.0, 3.0, 4.0], 'LogisticRegression__C':[0.1, 0.2, 0.4, 0.8]}) 
  5. #訓練以及調參 
  6. grid_search.fit(iris.data, iris.target) 

5 持久化

externals.joblib包提供了dump和load方法來持久化和加載內存數據:

 

  1. #持久化數據 
  2. #***個參數為內存中的對象 
  3. #第二個參數為保存在文件系統中的名稱 
  4. #第三個參數為壓縮級別,0為不壓縮,3為合適的壓縮級別 
  5. dump(grid_search, 'grid_search.dmp', compress=3) 
  6. #從文件系統中加載數據到內存中 
  7. grid_search = load('grid_search.dmp'

6 回顧

使用sklearn進行數據挖掘

注意:組合和持久化都會涉及pickle技術,在sklearn的技術文檔中有說明,將lambda定義的函數作為FunctionTransformer的自定義轉換函數將不能pickle化。

7 總結

2015年我設計了一個基于sklearn的自動化特征工程的工具,其以Mysql數據庫作為原始數據源,提供了“靈活的”特征提取、特征處理的配置方法,同時重新封裝了數據、特征和模型,以方便調度系統識別。說靈活,其實也只是通過配置文件的方式定義每個特征的提取和處理的sql語句。但是純粹使用sql語句來進行特征處理是很勉強的,除去特征提取以外,我又造了一回輪子,原來sklearn提供了這么優秀的特征處理、工作組合等功能。所以,我在這個博客中先不提任何算法和模型,先從數據挖掘工作的***步開始,使用基于Python的各個工具把大部分步驟都走了一遍(抱歉,我暫時忽略了特征提取),希望這樣的梳理能夠少讓初學者走彎路吧。

責任編輯:未麗燕 來源: 36大數據
相關推薦

2009-03-16 10:29:45

數據挖掘過濾器Access

2011-10-14 14:24:26

Ruby

2019-09-30 10:12:21

機器學習數據映射

2009-09-08 16:50:12

使用LINQ進行數據轉

2022-11-02 14:45:24

Python數據分析工具

2024-11-12 07:36:39

Python編程數據挖掘

2017-02-16 08:41:09

數據Vlookup匹配

2023-10-18 18:38:44

數據校驗業務

2023-08-15 16:20:42

Pandas數據分析

2022-03-28 14:08:02

Python數據清洗數據集

2017-09-26 19:02:09

PythonInstagram數據分析

2023-02-15 08:24:12

數據分析數據可視化

2009-07-16 14:46:48

jdbc statem

2023-09-27 15:34:48

數據編程

2021-11-09 08:15:18

Grafana 數據可視化運維

2022-04-08 11:25:58

數據庫操作AbilityData

2024-01-30 01:01:48

數據集核模型高斯過程機器學習

2021-12-27 09:50:03

JavaScript開發數據分組

2011-03-09 14:18:37

SQL數據累加

2023-05-05 19:16:22

Python數據清洗
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 少妇一区二区三区 | 9999国产精品欧美久久久久久 | 日本成人福利视频 | 欧美视频日韩 | 黄色毛片免费看 | 亚洲精品一区二区三区在线观看 | 国产精品久久久久久久久久三级 | 成人激情免费视频 | 午夜影院| 操久久 | 国产一区二区在线视频 | 精品国产1区2区3区 在线国产视频 | 久久高清亚洲 | 中文字幕在线不卡 | 国产日韩欧美一区二区在线播放 | 中文字幕在线观看视频网站 | 污视频免费在线观看 | 九九综合九九 | 亚洲欧美日韩久久久 | 久久久国产一区二区三区 | 日韩在线视频精品 | 久草网址| 国产亚洲精品久久久久久豆腐 | 亚洲手机视频在线 | 国产综合久久久 | 久久综合一区 | 免费一级欧美在线观看视频 | 中午字幕在线观看 | 日韩中文字幕在线观看 | www日本在线播放 | 欧美在线色视频 | 国产精品毛片一区二区在线看 | 在线观看免费av片 | 九九久久国产 | 99这里只有精品视频 | 国产高清免费 | 午夜a√ | 久久久区| 午夜视频在线 | 男女搞网站 | 国产精品一区二区三区在线播放 |