摘要:本次練習,採用了三個數據集,generate_data,breast cancer以及癲癇數據集,對於feature bagging ,使用breast cancer數據集,探索提高基分類器的個數,發現測試集的precision @ n 的精度先升高後下降,後來針對基分類器的個數,畫出了breast cancer數據集的曲線。該開始沒有控制train_test_split的random_state,沒有單一變量,所以結果不對,但是後來發現,控制完以後,每次的結果也是不一樣的。但是大部分情況下,曲線是比較穩定的,偶爾會有一個小的上衝,隨後下降。基分類器的數目,只要影響的是訓練集的precision @ n所以,基本上,選擇默認的個數就可以了,也可能存在一定概率會有更好的可能性。random_state會影響最後的結果,尤其對於異常數目較少的數據。
1.筆記
1.1 簡介
這一節主要講的是,高維數據的異常檢測,包含三個部分:簡介維度詛咒,以及兩種方法(Feature Bagging和Isolation Forests)的詳細論述。
1.1.1 維度詛咒
這部分講述了維度詛咒的含義,以及解決方案。
1.2 Feature Bagging
這部分主要講解了簡介、基檢測器以及組合的方法
1.2.1簡介
主要簡介集成方法的分類,方差與偏差
1.2.2 基檢測器
主要講述常用算法以及通用算法流程
1.2.3 組合方法
主要有兩種方法,第一種是廣度優先的方法,第二種是平均法。第一種理解起來比較有難度,建議看原文,在本文最後附件裏面。
- 主要就是,某種算法算出所有樣本的異常得分之後,是進行了排序的
- 然後依次選出異常得分最大的樣本(已經選出的,不再選),直到選出數據集樣本數目個樣本。也相當於把所有算法得出的異常分數,進行降序排列,依次選擇,選過的樣本不再選,每一個異常得分都會對應一個異常的索引,索引到原始數據集裏面的對應樣本。
- 字符有時候容易搞混,建議帶入具體數值進行理解
1.3 Isolation Forests
1.3.1 簡介
1.3.2 原理
路徑的計算,是在經過多少次分類的次數+調整值,調整值是如果樹的高度達到上限了,那麼這個調整值代表的就是還沒有建立的樹所對應的路徑。
1.3.3 步驟
2.練習
2.1 feature bagging
畫圖均採用前兩個維度的數據,因此,有的圖,可能有的奇怪
2.1.1 Generate data
2.1.2 breast cancer(10 abnormal)
提高基分類器的個數,可以提高測試集的精度,之前大概0.6左右,現在可以0.8,偶爾1.0(極端情況,測試集就一個異常值),但是再增高的話,精度反而降低了
n_estimators 從10到100,間隔10,roc,precision @ n,在訓練集和測試集上面的表現。每個estimator,做三次實驗,取平均值。發現取值爲30的時候是precision @ n最好的時候。這次結果錯誤的原因是,沒有控制train_test_split的random_state,控制好以後,結果大致是穩定的,n_estimator=100做了兩次,小數據集,受到random_state的應先還是比較大的,尤其是異常的個數很少的時候,受到n_estimator影響較小。
2.1.3 癲癇數據集
2.2 Isolation Forests
2.2.1 generate data
2.2.2 breast cancer(10 abnormal)
2.2.3癲癇數據集
n_estimators影響很小,從100-1000間隔100
2.3 思考題:feature bagging爲什麼可以降低方差?
因爲變量之間具備相關性,不是完全獨立的
爲什麼說bagging是減少variance,而boosting是減少bias? - 過擬合的回答 - 知乎
2.4 思考題:feature bagging存在哪些缺陷,有什麼可以優化的idea?
超高維度的話,有些維度,也可能是一直不被選中的;
從d/2到d-1之間不再是隨機的了,採用二分法進行
評估的算法,沒有規定。
可以使用不同類型的算法,也可以針對數據集,採取某些算法
3.附件
特徵選擇原文(英文)
孤立森林原文(英文)
思維導圖.xmind
feature bagging jupyter 代碼
iForest jupyter 代碼