06_特征选择,特征选择的原因,sklearn特征选择API
1、特征選擇
在現實生活中,一個對象往往具有很多屬性(以下稱為特征),這些特征大致可以被分成三種主要的類型:
1、相關特征: 對于學習任務(例如分類問題)有幫助,可以提升學習算法的效果;
2、無關特征: 對于我們的算法沒有任何幫助,不會給算法的效果帶來任何提升;
3、冗余特征: 不會對我們的算法帶來新的信息,或者這種特征的信息可以由其他的特征推斷出
但是對于一個特定的學習算法來說,哪一個特征是有效的是未知的。因此,需要從所有特征中選擇出對于學習算法有益的相關特征。而且在實際應用中,經常會出現維度災難問題,尤其是在文本處理中。例如,可以把一篇文檔表示成一個詞向量,但是往往會使用所有的單詞作為字典,因此對于一篇可能僅僅包含100或者200個單詞的文檔,可能需要上萬的維度(也就是特征)。如果可以從中選擇一部分相關特征構建模型,這個問題就可以得到一定程度的解決。所以,特征選擇和降維有一定的相似之處。另外,從上面的例子中可以發現,如果只選擇所有特征中的部分特征構建模型,那么可以大大減少學習算法的運行時間,也可以增加模型的可解釋性。
因此,進行特征選擇的主要目的:
1、降維
2、降低學習任務的難度
3、提升模型的效率
定義:
從N個特征中選擇其中M(M<N)個子特征,并且在M個子特征中,準則函數可以達到最優解。
特征選擇想要做的是:選擇盡可能少的子特征,模型的效果不會顯著下降,并且結果的類別分布盡可能的接近真實的類別分類
特征選擇的過程:
對于一個有N個特征的對象,可以產生2^N個特征子集,特征選擇就是從這些子集中選出對于特定任務最好的子集。特征選擇主要包括四個過程:
生成過程其實是一個搜索過程,這個過程可以從以下幾種情況開始:
1、沒有特征
2、所有特征
3、隨機特征子集。
在前兩種情況下,每次迭代可以增加、刪除特征;但是在最后一種情況下,每次迭代隨機增加或者刪除特征。
評價函數用來評價生成過程中生成的特征子集,產生一個值用來比較當前特征子集和當前最有特征子集,如果這個特征子集更好,那么就取代當前最優子集。
停止條件用來決定迭代過程什么時候停止,生成過程和評價函數可能會對于怎樣選擇停止條件產生影響。停止條件有以下四種選擇:
1、達到預定義的最大迭代次數;
2、達到預定義的最大特征數
3、增加(刪除)任何特征不會產生更好的特征子集;
4、根據評價函數,產生最優特征子集。
驗證過程并不是特征選擇本身的一部分,但是選擇出的特征必須是有效。因此,需要使用不同的測試集、學習方法驗證選擇出來的特征子集,然后比較這些驗證結果。
生成過程:
生成過程是一個搜索過程,這個過程主要有以下三個策略:
1、完全搜索:根據評價函數做完全搜索。完全搜索主要有兩種:窮舉搜索和非窮舉搜索;
2、啟發式搜索:根據一些啟發式規則在每次迭代時,決定剩下的特征是應該被選擇還是被拒絕。這種方法很簡單并且速度很快,因為它的搜索空間是O(n^2);
3、隨機搜索:每次迭代時會設置一些參數,參數的選擇會影響特征選擇的效果。由于會設置一些參數(例如最大迭代次數),所以搜索空間也遠遠小于O(2^n)
評價函數:
評價函數主要用來評價選出的特征子集的好壞,一個特征子集是最優的往往指相對于特定的評價函數來說的。評價函數主要用來度量一個特征(或者特征子集)可以區分不同類別的能力。根據具體的評價方法主要有三類:
1、過濾式(filter): 先進行特征選擇,然后去訓練學習器,所以特征選擇的過程與學習器無關。相當于先對于特征進行過濾操作,然后用特征子集來訓練分類器。
2、包裹式(wrapper): 直接把最后要使用的分類器作為特征選擇的評價函數,對于特定的分類器選擇最優的特征子集。
3、Filter和Wrapper組合式算法: 先使用Filter進行特征選擇,去掉不相關的特征,降低特征維度;然后利用Wrapper進行特征選擇。
4、嵌入式(embedding): 把特征選擇的過程與分類器學習的過程融合一起,在學習的過程中進行特征選擇。最常見的使用L1正則化進行特征選擇。
一般有5中比較常見的評價函數:
1、距離度量: 如果 X 在不同類別中能產生比 Y 大的差異,那么就說明 X 要好于 Y;
2、信息度量: 主要是計算一個特征的信息增益(度量先驗不確定性和期望后驗不確定性之間的差異);
3、依賴度量: 主要用來度量從一個變量的值預測另一個變量值的能力。最常見的是相關系數:用來發現一個特征和一個類別的相關性。如果 X 和類別的相關性高于 Y與類別的相關性,那么X優于Y。對相關系數做一點改變,用來計算兩個特征之間的依賴性,值代表著兩個特征之間的冗余度。
4、一致性度量: 對于兩個樣本,如果它們的類別不同,但是特征值是相同的,那么它們是不一致的;否則是一致的。找到與全集具有同樣區分能力的最小子集。嚴重依賴于特定的訓練集和 最小特征偏見(Min-Feature bias)的用法;找到滿足可接受的不一致率(用戶指定的參數)的最小規模的特征子集。
5、誤分類率度量: 主要用于Wrapper式的評價方法中。使用特定的分類器,利用選擇的特征子集來預測測試集的類別,用分類器的準確率來作為指標。這種方法準確率很高,但是計算開銷較大。
以上摘自:
https://blog.csdn.net/hren_ron/article/details/80914491
1.1 特征選擇原因
冗余:部分特征的相關度高,容易消耗計算性能
噪聲:部分特征對預測結果有負影響
1.1 特征選擇是什么?
特征選擇就是單純地從提取到的所有特征中選擇部分特征作為訓練集特征,特征在選擇前和選擇后可以改變值、也不改變值,但是選擇后的特征維數肯定比選擇前小,畢竟我們只選擇了其中的一部分特征。
主要方法(三大武器):Filter(過濾式):VarianceThreshold
Embedded(嵌入式):正則化、決策樹
Wrapper(包裹式)
1.2 sklearn特征選擇API
sklearn.feature_selection.VarianceThreshold
VarianceThreshold語法:
VarianceThreshold(threshold = 0.0)A:刪除所有低方差特征B:Variance.fit_transform(X,y) 1、X:numpy array格式的數據[n_samples,n_features]2、返回值:訓練集差異低于threshold的特征將被刪除。3、默認值是保留所有非零方差特征,即刪除所有樣本4、中具有相同值的特征。VarianceThreshold流程(代碼演示)
1、初始化VarianceThreshold,指定閥值方差
2、調用fit_transform
例如處理:
[[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]] from sklearn.feature_selection import VarianceThresholddef var():"""特征選擇--刪除低方差的特征:return: None"""var = VarianceThreshold(threshold=1.0)data = var.fit_transform([[0,2,0,3],[0,1,4,3],[0,1,1,3]])print(data)return Noneif __name__ == "__main__":var()輸出結果為:
[[0][4][1]]我們發現在三組數據里,我們發現第一列,(注意是觀察每一列的數據)全是0,第二列方差小于1,第四列也是相同的值,那么這些列的區分度就會很微弱,也就不具備分析的價值了
總結
以上是生活随笔為你收集整理的06_特征选择,特征选择的原因,sklearn特征选择API的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 今天有回滕州市的私家客车吗?
- 下一篇: 08_sklearn数据集,数据集划分t