feture selection
F-score:
對第i個屬性, 有xi+, xi_, xi; 分別表示正類樣本中該屬性的均值、 負類樣本中該屬性的均值, 所有樣本中該屬性的均值
n+表示正類樣本個數, n-表示負類樣本個數
?????????????????? (xi+? -? xi)^2??? +???? (xi_ - xi)^2
F(i) = ------------------------------------------------------------
????????? 1?????????????????????????????????????????? 1
??????? ----- * sigma(x(k,i) - xi+)^2 + ------ * sigma(x(k,i) - xi_)^2
??????? n+ - 1??????????????????????????????????? ?n- - 1
???????
文字描述:
分子是正類樣本均值與總體樣本均值差的平方, 加上 負類樣本均值與總體樣本均值差的平方
分母是正類中樣本方差 與 負類中樣本方差 之和
分子衡量的是該屬性的正類值集合與負類值集合的離散程度(類間)
分母衡量的是該屬性值在類內的離散程度
因此, F值越大, 說明該屬性的區分作用越明顯。
缺點是沒有揭露屬性之間的互信息。
使用F-score 與 svm進行特征提取
1) 計算每個屬性的F值
2) 人為選擇某些閥值
3) 對每個選擇的閥值
3.1) 丟棄F-score低于該閥值的屬性
3.2) 將訓練數據分成 Xtrian與Xvalid兩類
3.3) 用Xtrain訓練得到model;使用該model來predictXvalid
3.4)重復3.2-3.4 5次,計算平均的Xvalid error
4) 選擇步驟3中, 平均Xvalid error最小的閾值。 以此來作為特征選擇的閾值
5) 然后再進行svm分類
?
?
?
?
?
?
?
Random forest
將訓練數據分為兩部分, A與B。 用A來訓練、用B來檢測該模型的準確性
然后隨機改變B中該屬性值的排列, 再次檢測該模型的準確性。 兩次之差表明了該屬性的重要程度。
data: working set, training set(A + B)
算法過程:
1) 將training set分為A B兩部分, 用A得到模型, 用B得到準確度。
針對每個屬性, 隨機改變B中該屬性值的排列, 得到新的準確度; 二者之差表明該屬性值的重要程度。
因此得到了屬性的重要性排序
2) 使用該model, 對working set進行5折交叉驗證
3) 移除不重要的一半屬性, 然后進行步驟2. 如果屬性個數太少則停止
4) 選擇上述步驟中交叉驗證錯誤最少的屬性集作為最終結果
Random forest只適合屬性個數較少的情況。 因此在開始之前可以使用F-score進行一次初始選擇
?
Term frequency
使用樣本集中特征出現的次數。 直觀上認為在樣本集中該特征出現的次數越多, 該特征就越重要
===主要用來刪除低頻特征
Document frequency
樣本集中包含該特征的文檔樹越少, 表明該特征越稀有。
其理論假設為稀有詞條或者對分類作用不大,或者是噪聲, 可以被刪除。
Term frequency * Inverse Document frequency
見上。
Document frequency越大的特征, 其分類作用也不明顯。 因此 inverse document frequency
?
特征熵 term entropy
計算第k個特征tk的特征熵:
Entropy(tk) = -sigma(P(ci|tk) * log(p(ci|tk))
P(ci|tk), 表示類ci中包含tk的樣本數 除以 總體樣本中包含tk的樣本數
熵越小, 對分類作用越大。 特征選擇時, 選擇熵小的特征。
【熵越小, 表示率屬于某類的概率越大; 因此對分類作用就越大】
e=-sigma(plogp)
abcd概率各0.25, 那么為表示abcd需要2個bit, 如00表示a,01表示b, 10表示c, 11表示d. 理論上也是需要2個bit
abcd概率分別為0.7,0.1,0.1,0.1
====直接編碼, 也需要2個bit。同上。
====haffman編碼:0表示a, 10表示b, 110表示c, 111表示d。 平均長度0.7*1+0.1*2+0.1*3*2 = 1.5(bit)
====理論上需要多少bit? -(0.7*log0.7 + 3*0.1*log0.1) = 0.46(bit) 。。。???
由此可見, 概率分布越不均勻, 熵越小; 熵越小,特征在各個類中的概率越不均勻, 該特征對分類的作用越大
?
?
互信息 mutual information
分析特征tk與ci的互信息
??????????????????????? P(tk, ci)
MI(tk, ci) = log------------ = logP(tk|ci) - logP(tk)
?????????????????????? P(tk)*P(ci)
P(tk|ci)表示ci中包含tk的樣本數 除以 ci中的總樣本數
P(tk) 使用全概率計算: sigma P(tk|ci)*p(ci)
全局互信息MI(tk) = sigma(MI(tk,ci))
MI表明tk與ci的相關程度。mi越大說明tk與ci越相關。
MI有利于低頻特征,容易引起過學習
?
信息增益 information gain
IG(tk) = - sigma(P(ci) * logP(ci))????????????????????? //總的信息熵
???????? + P(tk) * sigma(P(ci|tk)logP(ci|tk)????????? //減去 出現該特征時的系統的熵
???????? + P(tk_) * sigma(P(ci|tk_)logP(ci|tk_)?????? //減去 不出現該特征時的系統的熵
結果就是這個特征存在時帶來的信息增益
????????
P(ci|tk_) 表示ci中不包含特征tk的樣本數除以總樣本中不包含特征tk的樣本數
信息增益越大的特征越重要。 選擇信息增益大的特征。
機器學習領域應用較為廣泛
?
?
?
?
叉方統計量 chi-square
????????????? n [P(tk, ci)*P(tk_,ci_) - P(tk,ci_)*P(tk_,ci)]^2
Chi(tk, ci) = --------------------------------------------------
????????????????? P(tk) * P(ci) * P(tk_) * P(ci_)
n為樣本總數
P(tk_,ci_)為樣本中不屬于類ci的且不包含特征tk的樣本數除以樣本總數
Chi(tk, ci)度量了特征tk和ci之間的相關程度, Chi越大,表明閱相關, tk越依賴于ci
全局Chi(tk) = sigma(Chi(tk, ci))
另一個改進的全局Chi(tk) = max(Chi(tk, ci))
特征選擇時, 選擇Chi越大的特征
?
?
?
相關系數 correlation coefficient
將Chi(tk, ci)開方。 選擇cc值大的特征。
?
期望交叉熵
???????????????????????????????????????????????????? P(ci|tk)
ECE(tk) = P(tk) * sigmaP(ci|tk)log---------
?????????????????????????????????????????????????????? P(ci)
反映了文本類別的概率分布、以及在出現某特定詞條時文本概率分布之間的距離
ECE大, 說明tk與ci越相關
?
?
?
?
?
TODO:
1 計算P(tk) 時, 是包含tk的樣本數除以總樣本數, 還是使用全概率計算呢? 應該使用全概率吧?
2 實現。。。
總結
以上是生活随笔為你收集整理的feture selection的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: libsvm
- 下一篇: android 安装步骤