1. 程式人生 > >使用隨機森林和mRMR進行特徵選擇

使用隨機森林和mRMR進行特徵選擇

演算法效能的好壞跟資料是密不可分的,因此找到一組更具代表性的特徵子集顯得更加重要。在實際專案中,因為有的特徵對模型而言是冗餘的,它對演算法的效能會產生負面影響,此時就需要做特徵選擇。特徵選擇的目的就是從一組特徵集合中去除冗餘或不相關的特徵從而達到降維的目的。說到降維,它不僅包括特徵選擇,還包括了特徵提取,而本文主要介紹兩種常用的特徵選擇方法。

對於一個包含n個特徵的特徵集合,搜尋空間高達2n1

種可能的子集,所以如果是使用窮舉法,不得不說下,窮舉法的結果確實很好,特徵少的時候或許可以考慮,但特徵多的時候必將帶來不可估量的計算量。所以我們需要找一種相對摺衷的方法。也就是下面談到的RF和mRMR。

Random Forest

注意:隨機森林使用的CART演算法的方法增長樹,也就是使用Gini指數來劃分。Gini指數度量的是資料分割槽或訓練集D的不純度(注意,這裡是不純度,跟熵有點不同)。基尼不純度表示的是一個隨機選中的樣本在子集中被分錯的可能性。基尼不純度為這個樣本被選中的概率乘上它被分錯的概率。當一個節點中所有樣本都是一個類時,基尼不純度為零。 定義為:

$$Gini(D) = 1 - \sum_{i=1}^m p_i^2$$

假設A有v個不同的值出現在特徵D中,它的二元劃分有2v2

種(除去自己和空集)。當考慮二元劃分裂時,計算每個結果分割槽的不純度加權和。比如A有兩個值,則特徵D被劃分成D1和D2,這時Gini指數為:

$$Gini_A(D) = \frac{D_1}{D} Gini(D_1) + \frac{D_2}{D} Gini(D_2)$$

Gini指數偏向於多值屬性,並且當類的數量很大時會有困難,而且它還傾向於導致相等大小的分割槽和純度。但實踐效果不錯。

如果訓練資料集有m維,樣本個數為n,則 CART演算法的時間複雜度為O(mnlogn2)

互資訊是條件概率與後驗概率的比值,化簡之後就可以得到資訊增益。所以說互資訊其實就是資訊增益。計算方法【互資訊=熵-條件熵】。熵描述的是不確定性。熵越大,不確定性就越大,條件熵H(B|A)描述的是在A給定的條件下B的不確定性,如果條件熵越小,表示不確定性就越小,那麼B就越容易確定結果。所以使用熵減去條件熵,就得到了資訊增益,他描述的不確定性的降低程度,可以用來度量兩個變數的相關性。比如,在給定一個變數的條件下,另一個變數它的不確定性能夠降低多少,如果不確定性降低得越多,那麼它的確定性就越大,就越容易區分,兩者就越相關。

IG(D,A)=H(D)H(D|A)

隨機森林對於每一棵決策樹,首先對列(特徵)進行取樣,然後計算當前的Gini指數,隨後進行全分裂過程,每棵樹的非葉節點都有一個Gini指數,一棵樹建立之後可以得到該樹各個節點的重要性,通過對其按照Gini指數作為特徵相關性來排序,接著一次建立多棵決策樹,並且生成多個特徵相關性排名,最後對這些特徵選平均值,得到最終排好序的特徵重要性排名。

隨機森林OOB特徵選擇:

  • 首先建立m棵決策樹,然後分別計算每棵樹的OOB袋外誤差errOOBj。
  • 計算特徵xi
的重要性。隨機的修改OOB中的每個特徵xi的值,再次計算它的袋外誤差errOOBi;xi=errOOBierrOOBjNtree
  • .
  • 按照特徵的重要性排序,然後剔除後面不重要的特徵;
  • 然後重複以上步驟,直到選出m個特徵。

在scikit-learn中封裝了random forest特徵選擇方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
import numpy as np
#Load boston housing dataset as an example
boston = load_boston()
X = boston["data"]
Y = boston["target"]
names = boston["feature_names"]
rf = RandomForestRegressor()
rf.fit(X, Y)
print "Features sorted by their score:"
print sorted(zip(map(lambda x: round(x, 4), rf.feature_importances_), names), 
             reverse=True)

最後輸出的是:

Features sorted by their score:
[(0.5298, ‘LSTAT’), (0.4116, ‘RM’), (0.0252, ‘DIS’), (0.0172, ‘CRIM’), (0.0065, ‘NOX’), (0.0035, ‘PTRATIO’), (0.0021, ‘TAX’), (0.0017, ‘AGE’), (0.0012, ‘B’), (0.0008, ‘INDUS’), (0.0004, ‘RAD’), (0.0001, ‘CHAS’), (0.0, ‘ZN’)]

mRMR

最大相關最小冗餘(mRMR),顧名思義,我們可以知道,它不僅考慮到了特徵和label之間的相關性,還考慮到了特徵和特徵之間的相關性。度量標準使用的是互資訊(Mutual information)。對於mRMR方法,特徵子集與類別的相關性通過各個特徵與類別的資訊增益的均值來計算,而特徵與特徵的冗餘使用的是特徵和特徵之間的互資訊加和再除以子集中特徵個數的平方,因為I(xi,xj)計算了兩次。

No.1 最大相關性

目的:保證特徵和類別的相關性最大。

$$max \ D(S, c),\  D = \frac{1}{|S|} \sum_{x_i \epsilon S } I(x_i; c)$$

No.2 最小冗餘性

目的:確保特徵之間的冗餘性最小。

min\ R(S, c),\ \ R = \frac{1}{|S|^2} \sum_{x_i,x_j \epsilon S } I(x_i; x_j)

兩個式子中,S表示已經選擇的特徵子集,c表示classs_label,x表示特徵。最後選擇標準是:

maxΦ(D,R),Φ=DR

相關推薦

使用隨機森林mRMR進行特徵選擇

演算法效能的好壞跟資料是密不可分的,因此找到一組更具代表性的特徵子集顯得更加重要。在實際專案中,因為有的特徵對模型而言是冗餘的,它對演算法的效能會產生負面影響,此時就需要做特徵選擇。特徵選擇的目的就是從一組特徵集合中去除冗餘或不相關的特徵從而達到降維的目的。說到降維,它不

利用隨機森林進行特徵選擇

例子是wine資料集: http://archive.ics.uci.edu/ml/machine-learning-databases/wine/ 之所以可以利用隨即森立來進行特徵篩選是由於決策樹的特性,因此我們可以利用所有決策樹得到的平均不純度(基尼係數)

【Machine Learning】使用隨機森林進行特徵選擇

一、特徵選擇         在我們做特徵工程時,當我們提取完特徵後,可能存在並不是所有的特徵都能分類起到作用的問題,這個時候就需要使用特徵選擇的方法選出相對重要的特徵用於構建分類器。此外,使用特徵選擇這一步驟也大大減少了訓練的時間,而且模型的擬合能力也不會出現很大的降低問

利用隨機森林梯度替身決策樹對titanic資料進行分類,並對結果進行分析

import pandas as pd from sklearn.cross_validation import train_test_split from sklearn.feature_extraction import DictVectorizer from skle

機器學習知識點查漏補缺(隨機森林extraTrees)

efault 生成 xtra lac use sample strategy default lin 隨機森林 對數據樣本及特征隨機抽取,進行多個決策樹訓練,防止過擬合,提高泛化能力 一般隨機森林的特點: 1、有放回抽樣(所以生成每棵樹的時候,實際數據集會有重復),

隨機森林決策樹調參

blog 每次 抽樣 單獨的數 回歸 函數 現在 推薦 訓練 隨機森林 隨機森林的“隨機”體現在兩個部分: 使用boostrap隨機抽樣(通俗點說就是有放回的隨機抽樣),假設原先數據集有N個樣本,每次仍然抽出來N個樣本,進行M次抽樣,組成M個數據集(也就是抽M次,

sklearn學習之使用sklearn進行特徵選擇

在本節中我們將使用sklearn.feature_selection模組中的類在高維度的樣本集上進行特徵選擇、降維來提升估計器的效能。 1. Removing features with low variance方差選擇法 sklearn.feature_se

隨機森林Adaboost區別

不同點: Adaboost是基於Boosting的演算法,個體學習器之間存在強依賴關係,須序列連線。每一輪的訓練集不變,只是訓練集中每個樣例在分類器中的權重發生變化。而權值是根據上一輪的分類結果進行調整,根據錯誤率不斷調整樣例的權值,錯誤率越大則權重越大。 隨機森林是基於Bagging的演算

隨機森林GBDT的幾個核心問題

隨機森林random forest的pro和con是什麼?優勢是accuracy高,但缺點是速度會降低,並且解釋性interpretability會差很多,也會有overfitting的現象。 為什麼要最大化information gain?從root到leaf,使得各c

如何進行特徵選擇

>>> from sklearn.ensembleimport ExtraTreesClassifier>>>from sklearn.datasetsimport load_iris>>>from sklearn.feature_selection

【機器學習】特徵選擇之最小冗餘最大相關性(mRMR)與隨機森林(RF)

特徵選擇之最小冗餘最大相關性(mRMR) 最小冗餘最大相關性(mRMR)是一種濾波式的特徵選擇方法,由Peng et.al提出。主要用途有機器學習,影象識別等。 一種常用的特徵選擇方法是最大化特徵與分類變數之間的相關度,就是選擇與分類變數擁有最高相關度的前k個變數。但是,在特徵選擇中,

機器學習 scikit-learn9 - 預測貸款使用者是否會逾期 - 特徵篩選 IV 隨機森林

特徵挑選 1 說明 2 程式碼使用方法 3 核心程式碼說明 3.1 IV值挑選特徵 3.2 隨機森林挑選特徵 3.3 將 IV值 和 隨機森林的特徵結合 3.4 訓練模型輸出結果 4 結果對比 5

客戶逾期貸款預測[8] - 特徵選擇(iv值、隨機森林)

任務        分別用IV值和隨機森林挑選特徵,再構建模型,進行模型評估   1 利用iv值挑選特徵        這次暫時先用學長計算好的iv值挑選特徵,之後再嘗試自己計算iv值。選擇iv

利用隨機森林特徵重要性進行評估

前言 隨機森林是以決策樹為基學習器的整合學習演算法。隨機森林非常簡單,易於實現,計算開銷也很小,更令人驚奇的是它在分類和迴歸上表現出了十分驚人的效能,因此,隨機森林也被譽為“代表整合學習技術水平的方法”。 本文是對隨機森林如何用在特徵選擇上做一個簡單的介紹。

隨機森林進行特徵選取

在隨機森林中某個特徵x的重要性的計算方式如下: 首先是對隨機森林的每一顆決策樹,使用對應的OOB(袋外資料)資料來進行計算他的袋外的資料誤差,記做error1 這樣每個決策樹都可以得到一個error1,K顆數就有K個error1. 然後就是要遍歷所有的特徵,來考察該特徵的重

R包 randomForest 進行隨機森林分析

分類器 屬於 成功 and 分類 新的 nts class 散點 randomForest 包提供了利用隨機森林算法解決分類和回歸問題的功能;我們這裏只關註隨機森林算法在分類問題中的應用 首先安裝這個R包 install.packages("randomForest")

機器學習(十三) 集成學習隨機森林(上)

討論 隨機 分享圖片 inf nbsp 集成學習 bsp image mage 一、什麽是集成學習 二、Soft Voting Classifier 更合理的投票,應該有的權值 三、

機器學習(十三) 集成學習隨機森林(下)

img over 是你 trees https info 入門級 一點 競賽 五、隨機森林和 Extra-Trees 六、Ada Boosting 和 Gradient Boosting 七、Stacking

Spark_Mllib系列之二———提取,轉化特徵選擇

Extracting, transforming and selecting features 這部分將會講到特徵的演算法,粗略的分為一下幾個部分: 特徵的提取 TF-IDF 詞條頻率-逆向檔案頻率是一種被廣泛使用在文字提取的向量化特徵的方法,反映了一個詞條對一篇語料庫

特徵選擇(2):mRMR特徵選擇演算法(matlab程式碼實現)

mRMR是什麼 是基於最大相關最小冗餘的特徵選擇方法。 要點:1.相關是特徵列與類標的相關性,也可以值特徵之間的相關性,通常來說,特徵與類標相關性越高,說明這個特徵越重要。則選擇這個特徵,這就是最大相關。 2.最小冗餘:特徵選擇的目的就是減少分類器的負擔,減少不需要的特徵。而兩個特徵之間