当前位置:   article > 正文

三十七、利用支持向量机做文本分类_支持向量机进行文本分类

支持向量机进行文本分类


从上一节提取出的全部特征中选取出关键的特征,并利用支持向量机对测试样本做回归计算,判断准确率

请尊重原创,转载请注明来源网站www.shareditor.com以及原始链接地址

选取出关键特征

通过tf-idf计算出来的数值是某个特征(词)对于这篇文档的权重,不代表这个特征(词)在文本分类中的权重。这很容易理解,比如某一个特征(词)在多个分类中的tf-idf是不一样的,但是这个特征对于这个分类问题的权重肯定是一个定值。

选取重要的特征的方法可以是:1.)按tf-idf排序从大到小选topN;2)按特征的普遍性选取(在多个类别中出现过);3)按特征在不同文档中tf-idf的差距选择;

我们这次采取结合的形式:在至少2个类别中tf-idf大于0,同时在多个类别中第一名高于第二名10%以上。这么选择的原因是:我的总类别一共5种比较少,所以2个类别以上就说明具有普遍性了,你可以根据你的类别数目调整,第一名高于第二名10%表示这个特征具有一定的区分度。

修改我们的feature_extract.py如下:

  1. def feature_dump():
  2. cursor = conn.cursor()
  3. category={}
  4. category[0] = 'isTec'
  5. category[1] = 'isSoup'
  6. category[2] = 'isMR'
  7. category[3] = 'isMath'
  8. category[4] = 'isNews'
  9. corpus=[]
  10. for index in range(0, 5):
  11. sql = "select segment from CrawlPage where " + category[index] + "=1"
  12. print sql
  13. cursor.execute(sql)
  14. line = ""
  15. for result in cursor.fetchall():
  16. segment = result[0]
  17. line = line + " " + segment
  18. corpus.append(line)
  19. conn.commit()
  20. conn.close()
  21. vectorizer=CountVectorizer()
  22. csr_mat = vectorizer.fit_transform(corpus)
  23. transformer=TfidfTransformer()
  24. tfidf=transformer.fit_transform(csr_mat)
  25. word=vectorizer.get_feature_names()
  26. print tfidf.toarray()
  27. for index in range(0, 5):
  28. f = file("tfidf_%d" % index, "wb")
  29. for i in np.argsort(-tfidf.toarray()[index]):
  30. if tfidf.toarray()[index][i] > 0:
  31. f.write("%f %s\n" % (tfidf.toarray()[index][i], word[i]))
  32. f.close()
  33. def feature_extraction():
  34. d = {}
  35. for index in range(0, 5):
  36. f = file("tfidf_%d" % index, "r")
  37. lines = f.readlines()
  38. for line in lines:
  39. word = line.split(' ')[1][:-1]
  40. tfidf = line.split(' ')[0]
  41. if d.has_key(word):
  42. d[word] = np.append(d[word], tfidf)
  43. else:
  44. d[word] = np.array(tfidf)
  45. f.close();
  46. f = file("features.txt", "wb")
  47. for word in d:
  48. if d[word].size >= 2:
  49. index = np.argsort(d[word])
  50. if float(d[word][index[d[word].size-0-1]]) - float(d[word][index[d[word].size-1-1]]) > 0.01:
  51. f.write("%s %s\n" % (word, d[word]))
  52. f.close()
  53. if __name__ == '__main__':
  54. #get_segment();
  55. feature_dump();
  56. feature_extraction();

请尊重原创,转载请注明来源网站www.shareditor.com以及原始链接地址

最终输出的features.txt中有809个特征供我们使用,如下:

  1. 集群 ['0.027741' '0.014016' '0.010606']
  2. 分类器 ['0.002870' '0.045052' '0.000943']
  3. 中心 ['0.008167' '0.001647' '0.004274' '0.006954' '0.031360']
  4. 首席 ['0.003015' '0.017036']
  5. fit ['0.016885' '0.000284']
  6. 懂得 ['0.035888' '0.001629' '0.003064']
  7. 密度 ['0.002414' '0.002106' '0.015073' '0.001586']
  8. master ['0.021045' '0.002002' '0.000471']
  9. 对方 ['0.002414' '0.020451' '0.001684' '0.003569']
  10. 物品 ['0.020088' '0.001158' '0.001414']
  11. ……

 

研究scikit-learn SVM的使用

利用支持向量机模型可以直接使用scikit-learn,下一节我们再来研究一下scikit-learn的支持向量机怎么用

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/53485
推荐阅读
相关标签
  

闽ICP备14008679号