上數據挖掘課的時候算過GINI指數,在尋找降維算法的時候突然看到了信息增益算法,突然發現信息增益算法和課上算的GINI指數很相似,於是就用在這次文本分類實驗當中。總的來說信息增益算法是為了求特征t對於分類的貢獻大小。貢獻大則稱信息增益大、貢獻小信息增益小。文本分類自然是找那些對分類貢獻大的詞匯了。。。
在信息增益算法當中關鍵要求的是條件熵,即固定特征t之后系統的熵,公式如下
代碼如下
1 def get_conditional_entropy(word): 2 sum1, sum2, word_total= 0, 0, 0 3 4 for k,v in cate_word.items(): 5 word_total += cate_word[k][word]
6 for k,v in cate_word.items(): 7 sum1 += cate_word[k][word] / word_total * math.log((cate_word[k][word] + 1) / word_total,2)
8 p_t = word_total / text_total 9 p_t_ = (text_total - word_total) / text_total 10 11 for k,v in cate_word.items(): 12 # print("(text_total - word_total) is",str((text_total - word_total))) 13 # print("(cate_text_count[k] - cate_word[k][word]) is" ,str((cate_text_count[k] - cate_word[k][word]))) 14 # print("cate_text_count[k] is",str(cate_text_count[k])) 15 # print("cate_word[k][word] is",str(cate_word[k][word])) 16 # print(k) 17 # print(word) 18 sum2 += (cate_text_count[k] - cate_word[k][word] + 1)/(text_total - word_total + 1) * math.log((cate_text_count[k] - cate_word[k][word] + 1)/(text_total - word_total + 1),2) 19 20 return p_t * sum1 + p_t_ * sum2