特征篩選:
當特征非常多的時候,可能存在冗余,特征越多,可能噪音越多,同時特征越多,模型效率越低,可以考慮進行特征篩選來去掉無效的信息,看看是否可以提高模型的準確度。既可以提升模型的泛化能力,也能夠減少模型運行的時間
特征篩選的方法,在對測試集進行篩選的時候,使用的是通過訓練集訓練之后的模型進行篩選
在特征篩選的方法中,以下方法一到四的效果(單變量特征篩選方法)不如方法五和方法六的效果好
方法一:方差過濾,單變量特征篩選方法
一般來說方差大,所包含的信息量也大
首先計算出每個特征的方差,如果方差小于0.05,就刪掉,反之保留
from sklearn.feature_selection import VarianceThreshold:通過這個包進行方差過濾
使用參數threshold,進行方差的閾值設置
樹模型中可能不會用到全部的特征值,可能只會用到部分特征值,所以樹模型構建的時間比較快
get_support,是一個函數,可以查看到原數據集中刪除掉的特征值是哪些,返回的是True和False的數組
variances_,記錄的是每個特征的方差
相關性過濾方法,有可能三個方法都需要去試一下,或者將三個方法串聯起來使用。三個方法的結果可能是差異不大,如果差異很大的話那么就需要使用Embedded或者Wrapper這兩種方法
方法二:相關性過濾之卡方檢驗,單變量特征篩選方法
查看每個特征和標簽之間的相關性,如果沒有相關則刪除
卡方檢驗檢驗的就是特征是否與標簽之間獨立,獨立的特征刪掉
如果模型的解釋性要求沒有那么高,可以使用卡方檢驗來篩選特征,也可以使用互信息過濾
方法三:相關性過濾之F檢驗,檢驗特征和標簽之前是否有線性關系
方差為0的特征不能進行F檢驗
如果需要構建可解釋模型,可以使用線性回歸、邏輯回歸等,這個時候可以使用F檢驗來進行相關的特征選取,也可以使用互信息過濾來進行特征選擇
方法四:相關性過濾之互信息過濾,檢驗特征和標簽之前是否有非線性關系
這種方法找了很多種非線性關系,所以很耗時
方法五:Embedded嵌入法
通過模型擬合出來的效果,feature_importance特征重要性來進行特征的篩選
可以通過參數threshold來進行閾值的設置
這個方法的缺點是threshold參數的值沒有明確的標準進行設置,除非使用學習曲線或者網格搜索
這個模型只跑了一遍,而不一樣的數據集在模型中的表現可能不一樣,可能導致嵌入法選擇的特征是有偏的
方法六:包裝法
使用遞歸的形式來找到最優(yōu)的特征,例如使用遞歸特征消除法
這個方法耗時很長,但是效果很好
每次刪掉一部分最不重要的特征,導入模型進行下一次的迭代,此時重新生成特征重要性,再刪除最不重要的一部分特征,直到特征數量為我們自己設置的數量為止。這個過程中,特征重要性的計算也會原來越準確
這個方法中需要設置保留特征值的個數,只能通過業(yè)務來確認或者通過學習曲線來確認
ranking_中可以看到每個特征的重要性,ranking_越小,特征越重要,否則越不重要
所有特征篩選中的方法,都可以使用get_support來查看選中的是哪些特征
特征選擇的方法即是刪除掉部分特征,這個方法比較危險,會刪除特征,也會刪除特征間的相關性
樹模型算法傾向卡方過濾(決策樹,隨機森林);使用線性回歸類的算法傾向F檢驗(線性回歸,邏輯回歸, SVM);這些方法都沒有RFE好
降維算法:
PCA,手動實現該算法之前首先要進行去中心化,方便后面的計算
計算原來矩陣協(xié)方差矩陣(原矩陣去中心化后(減去均值)得到的矩陣的轉置乘以去中心化后的矩陣)的特征值和特征向量,用特征向量中的值分別乘以原矩陣的列向量,則構造出新的特征
新構造出的特征兩兩獨立,新特征的方差正好是對應的特征值
1. PCA使用線性代數的方法,對數據集的空間進行了變化
2. 計算協(xié)方差矩陣,了解到,非對角線上是非0 ,如果直接刪某一個特征的,會一并將非對角線上的值刪除
3. 同PCA的方法,計算方差矩陣的特征向量,使用特征向量對空間進行變化。換一句話來說,使用原來所有P個老的特征,借助特征向量通過線性組合,得到P個新特征
4. 新的P個特征的特點,每一個新特征都是由所有老的特征通過線性組合的得到了。并且所有的新的特征兩兩獨立!
5. 新的空間下,PCA保證得到的新特征兩兩獨立,這樣的話,就可以輕松無憂無慮來進行方差過濾了
PCA的實現過程
為什么新的特征的方差為方差矩陣的特征向量
協(xié)方差矩陣長這樣
PCA的缺點:不能解釋,每一個新的特征都是由原來所有的老特征通過線性組合得到,每一個特征都不可以解釋,且PCA只能針對連續(xù)型的變量
pca模型中可以通過極大似然方法,讓模型自己選擇最好的個數








暫無數據