成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

使用Sklearn進(jìn)行數(shù)據(jù)挖掘的步驟

本篇內(nèi)容介紹了“使用Sklearn進(jìn)行數(shù)據(jù)挖掘的步驟”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè)與策劃設(shè)計,花溪網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:花溪等地區(qū)?;ㄏ鼍W(wǎng)站價格咨詢:18982081108

1 使用sklearn進(jìn)行數(shù)據(jù)挖掘

1.1 數(shù)據(jù)挖掘的步驟

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

顯然,這不是巧合,這正是sklearn的設(shè)計風(fēng)格。我們能夠更加優(yōu)雅地使用sklearn進(jìn)行特征工程和模型訓(xùn)練工作。此時,不妨從一個基本的數(shù)據(jù)挖掘場景入手:

使用Sklearn進(jìn)行數(shù)據(jù)挖掘的步驟

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

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

使用Sklearn進(jìn)行數(shù)據(jù)挖掘的步驟

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

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

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

1.2 數(shù)據(jù)初貌

在此,我們?nèi)匀皇褂肐RIS數(shù)據(jù)集來進(jìn)行說明。為了適應(yīng)提出的場景,對原數(shù)據(jù)集需要稍微加工:

from numpy import hstack, vstack, array, median, nan from numpy.random import choice from sklearn.datasets import load_iris  #特征矩陣加工 #使用vstack增加一行含缺失值的樣本(nan, nan, nan, nan) #使用hstack增加一列表示花的顏色(0-白、1-黃、2-紅),花的顏色是隨機(jī)的,意味著顏色并不影響花的分類 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))))) #目標(biāo)值向量加工 #增加一個目標(biāo)值,對應(yīng)含缺失值的樣本,值為眾數(shù) iris.target = hstack((iris.target, array([median(iris.target)])))

1.3 關(guān)鍵技術(shù)

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

2 并行處理

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

2.1 整體并行處理

pipeline包提供了FeatureUnion類來進(jìn)行整體并行處理:

from numpy import log1p from sklearn.preprocessing import FunctionTransformer from sklearn.preprocessing import Binarizer from sklearn.pipeline import FeatureUnion   #新建將整體特征矩陣進(jìn)行對數(shù)函數(shù)轉(zhuǎn)換的對象 step2_1 = ('ToLog', FunctionTransformer(log1p)) #新建將整體特征矩陣進(jìn)行二值化類的對象 step2_2 = ('ToBinary', Binarizer()) #新建整體并行處理對象 #該對象也有fit和transform方法,fit和transform方法均是并行地調(diào)用需要并行處理的對象的fit和transform方法 #參數(shù)transformer_list為需要并行處理的對象列表,該列表為二元組列表,***元為對象的名稱,第二元為對象  step2 = ('FeatureUnion', FeatureUnion(transformer_list=[step2_1, step2_2, step2_3]))

2.2 部分并行處理

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

View Code

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

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

3 流水線處理

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

根據(jù)本文提出的場景,結(jié)合并行處理,構(gòu)建完整的流水線的代碼如下:

  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. #新建將部分特征矩陣進(jìn)行定性特征編碼的對象 

  15. step2_1 = ('OneHotEncoder', OneHotEncoder(sparse=False)) 

  16. #新建將部分特征矩陣進(jìn)行對數(shù)函數(shù)轉(zhuǎn)換的對象 

  17. step2_2 = ('ToLog', FunctionTransformer(log1p)) 

  18. #新建將部分特征矩陣進(jìn)行二值化類的對象 

  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. #新建邏輯回歸的對象,其為待訓(xùn)練的模型作為流水線的***一步 

  29. step6 = ('LogisticRegression', LogisticRegression(penalty='l2')) 

  30. #新建流水線處理對象 

  31. #參數(shù)steps為需要流水線處理的對象列表,該列表為二元組列表,***元為對象的名稱,第二元為對象 

  32. pipeline = Pipeline(steps=[step1, step2, step3, step4, step5, step6]) 

4 自動化調(diào)參

網(wǎng)格搜索為自動化調(diào)參的常見技術(shù)之一,grid_search包提供了自動化調(diào)參的工具,包括GridSearchCV類。對組合好的對象進(jìn)行訓(xùn)練以及調(diào)參的代碼如下:

  1. from sklearn.grid_search import GridSearchCV 
    #新建網(wǎng)格搜索對象 

  2. #***參數(shù)為待訓(xùn)練的模型 

  3. #param_grid為待調(diào)參數(shù)組成的網(wǎng)格,字典格式,鍵為參數(shù)名稱(格式“對象名稱__子對象名稱__參數(shù)名稱”),值為可取的參數(shù)值列表 

  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. #訓(xùn)練以及調(diào)參 

  6. grid_search.fit(iris.data, iris.target) 

5 持久化

externals.joblib包提供了dump和load方法來持久化和加載內(nèi)存數(shù)據(jù):

#持久化數(shù)據(jù) #***個參數(shù)為內(nèi)存中的對象 #第二個參數(shù)為保存在文件系統(tǒng)中的名稱 #第三個參數(shù)為壓縮級別,0為不壓縮,3為合適的壓縮級別 dump(grid_search, 'grid_search.dmp', compress=3) #從文件系統(tǒng)中加載數(shù)據(jù)到內(nèi)存中 grid_search = load('grid_search.dmp')

6 回顧

使用Sklearn進(jìn)行數(shù)據(jù)挖掘的步驟

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

“使用Sklearn進(jìn)行數(shù)據(jù)挖掘的步驟”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

網(wǎng)站名稱:使用Sklearn進(jìn)行數(shù)據(jù)挖掘的步驟
文章來源:http://jinyejixie.com/article38/ipjssp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、企業(yè)建站、網(wǎng)站策劃軟件開發(fā)、網(wǎng)站設(shè)計、網(wǎng)站設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
乐陵市| 罗定市| 五峰| 阿坝| 马鞍山市| 宁蒗| 灵寿县| 厦门市| 大新县| 会泽县| 改则县| 德钦县| 定结县| 贵德县| 崇州市| 夹江县| 图们市| 新建县| 汾阳市| 云南省| 新安县| 西盟| 陕西省| 阜阳市| 丹阳市| 红河县| 襄樊市| 鄂托克旗| 和政县| 丰城市| 嘉峪关市| 象山县| 汝城县| 临泽县| 博客| 遂川县| 凤山市| 吕梁市| 繁昌县| 浦江县| 贵溪市|