数据挖掘的一般流程
數據挖掘的一般流程
介紹數據挖掘的一般流程。尚未明了的地方綠字標注,繼續學習。
數據挖掘是從大量數據中挖掘出有趣模式和知識的過程。數據源一般是數據庫、數據倉庫、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.SelectKBest和feature_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
總結
- 上一篇: ERP主要软件品牌对比
- 下一篇: 001-unity2D游戏随机生成地图