特征选择---文本分类:叉方统计量
counts:計數。 記錄樣本集中每個樣本的每個屬性的在每個類中出現的加權次數
counts[data.numAttributes()][numValues + 1][numClasses + 1]
?
m_ChiSquareds[data.numAttributes];? //記錄每個屬性的叉方值
for(int i = 0; i < data.numAttributes(); i++)
??? m_ChiSquareds[i] = chiVal(counts[i]);
?
chiVal:nrows = matrix.length; //行數ncols = matrix[0].length; //列數rtotal = new double [nrows]; //行和ctotal = new double [ncols]; //列和for (row = 0; row < nrows; row++) {for (col = 0; col < ncols; col++) {rtotal[row] += matrix[row][col];ctotal[col] += matrix[row][col];n += matrix[row][col]; //計算每行之和、每列之和、所有和n}}df = (nrows - 1)*(ncols - 1); //自由度if (df <= 0) {return 0;}chival = 0.0;for (row = 0; row < nrows; row++) {if (Utils.gr(rtotal[row], 0)) {for (col = 0; col < ncols; col++) {if (Utils.gr(ctotal[col], 0)) {//大于0expect = (ctotal[col] * rtotal[row]) / n; //該cell的期望值chival += chiCell (matrix[row][col], expect);}}}}return chival;chiCell://freq 【in 第一個參數】//exptcted【in 第二個參數】// Cell in empty row and column?if (Utils.smOrEq(expected, 0)) { //expteced與0很接近return 0;}// Compute difference between observed and expected valuedouble diff = Math.abs(freq - expected);// Return chi-value for the cellreturn (diff * diff / expected);
?
?
假設chiVal的輸入有3行3列, 如下:
1? 2? 3
4? 2? 1
2? 3? 3
則計算行和列和總和之后為
1? 2? 3???? 6
4? 2? 1???? 7
2? 3? 3???? 8
?
7? 7? 7???? 21
那么e[0][0]的期望值是多少呢? 已知行和分別為6、7、8, 列和分別為7、7、7的情況下。
e[0][0] = r[0] * c[0] / n,?? diff[i][j] = |??? [i][j] - e[i][j]???? |
那么該cell的chiVal值就是? diff[i][j]^2/e[i][j]
整個矩陣的chiVal就是各cell的chiVal之和
?
?
那么, 這個chiVal衡量的是什么東西呢, 如何用來做特征選擇?
http://www.blogjava.net/zhenandaci/archive/2008/08/31/225966.html
?
diff衡量的是觀測頻度與期望頻度的差
diff^2衡量的是方差
diff^2/E, 類似于相對方差
?
?
?
開方檢驗最基本的思想就是通過觀察實際值與理論值的偏差來確定理論的正確與否。具體做的時候常常先假設兩個變量確實是獨立的(行話就叫做“原假設”),然后觀察實際值(也可以叫做觀察值)與理論值(這個理論值是指“如果兩者確實獨立”的情況下應該有的值)的偏差程度,如果偏差足夠小,我們就認為誤差是很自然的樣本誤差,是測量手段不夠精確導致或者偶然發生的,兩者確確實實是獨立的,此時就接受原假設;如果偏差大到一定程度,使得這樣的誤差不太可能是偶然產生或者測量不精確所致,我們就認為兩者實際上是相關的,即否定原假設,而接受備擇假設。
?
在文本分類問題的特征選擇階段,我們主要關心一個詞t(一個隨機變量)與一個類別c(另一個隨機變量)之間是否相互獨立?如果獨立,就可以說詞t對類別c完全沒有表征作用,即我們根本無法根據t出現與否來判斷一篇文檔是否屬于c這個分類。但與最普通的開方檢驗不同,我們不需要設定閾值,因為很難說詞t和類別c關聯到什么程度才算是有表征作用,我們只想借用這個方法來選出一些最最相關的即可。
此時我們仍然需要明白對特征選擇來說原假設是什么,因為計算出的開方值越大,說明對原假設的偏離越大,我們越傾向于認為原假設的反面情況是正確的。我們能不能把原假設定為“詞t與類別c相關“?原則上說當然可以,這也是一個健全的民主主義社會賦予每個公民的權利(笑),但此時你會發現根本不知道此時的理論值該是多少!你會把自己繞進死胡同。所以我們一般都使用”詞t與類別c不相關“來做原假設。選擇的過程也變成了為每個詞計算它與類別c的開方值,從大到小排個序(此時開方值越大越相關),取前k個就可以(k值可以根據自己的需要選,這也是一個健全的民主主義社會賦予每個公民的權利)。
文本特征選擇中, 計算每個屬性的叉方值, 取最大的前k個
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的特征选择---文本分类:叉方统计量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: trie 树
- 下一篇: 特征选择--文本分类: 信息增益