1. 程式人生 > >資料探勘的一般流程

資料探勘的一般流程

資料探勘的一般流程

介紹資料探勘的一般流程。尚未明瞭的地方綠字標註,繼續學習。

資料探勘是從大量資料中挖掘出有趣模式和知識的過程。資料來源一般是資料庫、資料倉庫、Web等,得到的資料稱為資料集(dataset)。其中資料倉庫是data mining獨有內容,是從多個數據源收集的資訊儲存庫。按照William H.Inmon的說法,“資料倉庫是一個面向主題的、整合的、時變的、非易失的資料集合,支援管理者的決策過程”。

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


2.資料獲取:根據資料探勘任務的具體要求,從相關資料來源中抽取相關資料集。

    一般資料集是已經存在的或者至少知道如何獲得的(訪問某個資料庫,網上過濾抓取需要的資料,問卷調查手動收集等)。資料集的選取對資料探勘模式是否有趣起決定作用。一般的資料探勘模式有頻繁模式,用於預測分析的分類和迴歸模式,聚類分析模式等,代表著資料探勘的某種目的。最開始做實驗的時候並不知道自己想要做什麼(一般都是現有資料集或者想法,再有資料探勘),於是檢視一些常見的資料集網站(下附),尋找自己感興趣的資料集,畢竟興趣是最好的老師,興趣有了,資料探勘才能開心地做下去。

    UCI機器學習和智慧系統  https://archive.ics.uci.edu/ml/datasets/

    kdd 2015預測學堂線上退課率   https://www.kddcup2015.com/information.html

    資料探勘 資料集下載蒐集整理版 http://blog.sina.com.cn/s/blog_5c9288aa01014a56.html

Linux與SQL的相關知識)


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

一般來說,在獲得了原始資料之後,不能直接開始進行統計分析等操作。因為通常我們獲得的資料都是「髒」資料,在分析之前需要進行資料的清洗。對於清潔的資料(tidy data)的定義為: 
- 每個變數各佔一列  
- 每個觀測值各佔一行  
- 每個表格或者檔案只儲存一種觀測值的資料 
對於資料清洗,Python中著名的pandas包可以進行十分方便的處理([具體可見這篇博文])。而在R中,也有dplyr包以及tidyr包用來進行資料的整理。

(1)資料清理

        忽略元祖

        人工填寫缺失值

        使用屬性的中心度量填充

        給定同一類所有樣本的屬性均值或中位數填充

        最可能的值填充

    (2)資料整合

        實體識別

        冗餘和相關分析(卡方檢驗,相關係數,協方差等,用spss比較方便)

    (3)資料歸約

        維規約(小波變換和主成分分析,最常用)

        數量規約(較小的資料替代原始資料)

        資料壓縮(有損無損兩種,尤其對於影象視訊等多媒體常用)

    (4)資料變換和資料離散化

        資料變換:光滑,屬性構造,聚集,規範化,離散化和概念分層。


                                                                                                圖3 資料規範化常見方法 


                                                                                              圖4 資料離散化

 Eg:3-4-5規則,根據最高有效位個數分:

            分為3類:最高有效位個數為 3 6 7 9

                 4                            2 4 8

                 5                            1 5

        一般步驟:取min5%,max95%;根據3-4-5規則分段;根據兩端調整分段

 

5.特徵選擇

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

a.嵌入式選擇:將特徵選擇和學習器結合,讓模型訓練過程中自動進行特徵選擇,比如各種樹模型;

嵌入式特徵選擇是將特徵選擇過程與學習器訓練過程融為一體,兩者在同一個優化過程中完成,即在學習器訓練過程中自動地進行了特徵選擇。 
sklearn提供了SelectFromModel來實現嵌入式特徵提取。SelectFromModel使用外部提供的estimator來工作。estimator必須有coef_或feature_importances屬性。 

原型為 
class sklearn.feature_selection.SelectFromModel(estimator,threshold=None,prefit=False) 

b.包裹式選擇:以模型最終的學習效能作為特徵集的評估準則,選擇好的特徵集,但因為需要訓練多個模型,開銷很大,不推薦;

包裹式特徵選擇直接把最終要使用的學習器的效能作為特徵子集的評價準則。 
包裹式特徵選擇的目的就是為給定學習器選擇最有利於其效能,“量身定做”的特徵子集。 
由於包裹式特徵選擇方法直接針對給定學習器進行優化,因此從最終學習器效能看,包裹式特徵選擇比過濾式特徵選擇更好。 
另一方面,特徵選擇過程中需多次訓練學習器,因此包裹式特徵選擇的計算開銷通常比過濾式特徵選擇大得多。

1.遞迴特徵消除RFE

  • 首先:學習器在初始特徵集合以及初始的權重上訓練。

  • 然後:學習器學得每個特徵的權重,剔除當前權重最小的那個特徵,構成新的訓練集。
  • 再將學習器在新的訓練集上訓練,直到剩下的特徵數量滿足條件為止。 
    sklearn提供的RFE類原型為 
    class sklearn.feature_selection.RFE(estimator,n_features_to_select=None,step=1,estimator_params=None,verbose=0)

2.RFECV

sklearn還提供了RFECV類,它是RFE的一個變體,它執行一個交叉驗證來尋找最優的剩餘特徵數量,因此不需要指定保留多少個特徵。原型為 
class sklearn.feature_selection.RFECV(estimator,step=1,cv=None,scoring=None,estimator_params=None,verbose=0)

c.過濾式選擇:計算每個特徵與相應變數的相關性,過濾掉相關性較低的特徵,但實際應用中,一般會逐個特徵分析與預測變數的關係,在Pandas中有很多相關函式(describe,value_counts()等等)可以很清晰的表示出兩者關係,也可以通過畫圖。

相當於先用特徵選擇過程個對初始特徵進行“過濾”,再用過濾後的特徵來訓練模型。

1.方差閾值選擇

方差很小的屬性,意味著該屬性的識別能力很差。極端情況下,方差為0,意味著該屬性在所有樣本上的值都是一個常數。 
sklearn庫提供feature_selection.VarianceThreshold(threshold=0.0)方法可以通過計算各個屬性上的方差過濾掉小於指定閾值的屬性。

2.單變數特徵提取

通過計算每個特徵的某個統計指標,然後根據該指標來選取特徵。 
sklearn庫提供feature_selection.SelectKBestfeature_selection.SelectPercentile方法可保留在指定統計指標上得分最高的k個特徵或百分之k個特徵。 
sklearn提供的統計指標函式有

  • sklearn.feature_selection.f_regression:基於線性迴歸分析來計算統計指標。適用於迴歸問題
  • sklearn.feature_selection.chi2:計算卡方統計量,適合分類問題
  • sklearn.feature_selection.f_classif:根據方差分析(Analysis of variance,ANOVA)的原理,依靠F-分佈為概率分佈的依據,利用平方和與自由度計算的組間與組內均方估計出F值,適用於分類問題

d.降維,用相關演算法處理資料集,對特徵重要性進行排序,取重要性大的特徵,例如PCA等。

 


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


7.模型建立:

(1)資料歸一化:一般的模型都需要歸一化,原因:將資料維度都調整到某範圍內。注意點:訓練集歸一化的時候要計算最大值和最小值,測試集歸一化的時候也要用訓練集的最大和最小值進行歸一化。

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

(3)建模:開源的機器學習包,Sklearn.

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

 

 

參考連結:

[1]https://blog.csdn.net/cppjava_/article/details/76820427