上数据挖掘课的时候算过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