資料探勘一般流程(資料清洗,特徵提取,建模,調參)

西電校草發表於2017-08-07

最近一直在實習,好長時間沒更新部落格了。哎,懶惰之心不可有啊!!

實習的崗位是資料探勘相關的,所以正好把到目前為止實習期間遇到的一些問題、學到的一些東西總結一下,並參考了一些部落格,自我提升。嘿嘿嘿~


資料探勘的一般流程:


1.問題定義:屬於分類問題還是迴歸問題


2.資料獲取:根據資料探勘任務的具體要求,從相關資料來源中抽取相關資料集。(以前在實驗室的時候用到的都是現成的資料,直接拿過來用就行了,到公司發現想要獲取資料還需要掌握LINUXSQL的相關知識,於是抓緊時間惡補了一番,掌握了一些LINUX和SQL的基本命令和操作)


3.資料清洗:清除重複樣本,清除疑似錯誤異常的樣本,清除偏離樣本整體分佈的樣本。(這一步對建立線性模型來說尤為重要,感覺這一步基本靠人肉)


4.缺失值處理:

(1)樣本缺失值較少時,使用均值/眾數值填充,當樣本順序與時間相關的話,填充可以參考相關時間資訊;

(2)把是否缺失直接當作一種特徵輸入到模型中,比如說各種樹模型;

(3)缺失樣本較多時,可以考慮直接清洗掉這些樣本。(實習專案 預測的是價格,出現了好多價格的缺失值,所以直接刪除,美滋滋~)


5.特徵選擇:

(1)意義:避免維度災難,降低模型複雜度,提高模型的可解釋性。

(2)a.嵌入式選擇:將特徵選擇和學習器結合,讓模型訓練過程中自動進行特徵選擇,比如各種樹模型;b.包裹式選擇:以模型最終的學習效能作為特徵集的評估準則,選擇好的特徵集,但因為需要訓練多個模型,開銷很大,不推薦;c.過濾式選擇:計算每個特徵與相應變數的相關性,過濾掉相關性較低的特徵,但實際應用中,一般會逐個特徵分析與預測變數的關係,在Pandas中有很多相關函式(describe,value_counts()等等)可以很清晰的表示出兩者關係,也可以通過畫圖,美滋滋~d.降維,用相關演算法處理資料集,對特徵重要性進行排序,取重要性大的特徵,例如PCA等。


6.資料集劃分:測試集和訓練集(實習中用到的資料與時間相關,所以資料集順序不能打亂,一般訓練:測試比例在7:3  6:4  都行)


7.模型建立:

(1)資料歸一化:一般的模型都需要歸一化,原因:將資料維度都調整到某範圍內。注意點:訓練集歸一化的時候要計算最大值和最小值,測試集歸一化的時候也要用訓練集的最大和最小值進行歸一化。(很重要!!實習過程中犯的第一大錯誤,包括後續要產生某些新特徵時,測試集一定要以訓練集的指標劃分!)

(2)模型選擇:不管怎麼樣先用隨機森林(Random Forest)試試,效果總不會太差,可以以這個為度量來評估後續模型的好壞。一般越複雜的模型效果越高,GBDT,XGBOOST等,但如果需求是解釋性模型較高時,還是線性模型好;

(3)建模:這個就很easy了,尤其是現在各種開源的機器學習包,建模也就幾行程式碼的事兒,推薦Sklearn,不能更方便;

(4)調參:交叉驗證!先大範圍的調,然後再小範圍的調參,直到找到相對較好的引數。


8.學習總結:

(1)Python:由一知半解到有一個整體的認識,包括程式碼的規範書寫(等號兩邊空格,變數常量命名規範等等)、類的定義使用、函式的封裝等等;

(2)Pandas:資料分析工具,分析特徵間、特徵與預測變數間的關係,整理資料,包括切片、聯合等等,常用的函式crosstab、groupby、join等等,產生新特徵(dummy特徵);

(3)Sklearn:簡單模型(線性迴歸)、複雜模型(GBDT,Random Forest)的使用,調參(交叉驗證等),構造新特徵(利用GBDT每棵樹的葉子節點的狀態作為某個樣本的新特徵,與線性迴歸特徵結合訓練);


先到這裡吧,還得繼續幹活了,以後有時間隨時更!Mua~

相關文章