现有大概1500左右的高维数据,要根据文本进行分类,已经做好的tf-idf,由于维度太高,用朴素贝叶斯分类是计算出来的概率实在是太小了,挤在一堆分不出来。如何改进才能使得NBC有效呢?已经尝试取了对数,可是还是分不出来。能够用tf-idf进行筛选么?如何筛选和如何降维?如果用PCA降维效果如何?


1.我觉得你是不是可以先做一下聚类分析(比如Kmeans,Hierarchical clustering),然后再分别研究下每个cluster。

2.你的feature不一定都有用,可以用random forest先算下feature importance,选重要的feature。

3.降维不一定要一定要PCA,也可以尝试下supervised的方法,比如PLS。

4.朴素贝叶斯效果一般也说不上太好,如果你觉得模型的解释性重要,可以考虑逻辑回归+L1或L2惩罚。如果你觉得精度重要,那gradient boost tree是比较好的选择。

1500维算不算『维度太高』,要看你样本量有多少。样本足够多,1500维其实没啥问题。

把你会用的模型都试一遍,没必要非得用朴素贝叶斯。


你最终目的是什么?提高分类的精确度么?如果是这样朴素贝叶斯似乎在大多数情况下都是效果比较弱的分类器(当然具体问题具体分析)。一般比较多见是上SVM,效果都是有一定保证的。

至于你说的降维,你不妨先用一些简单的特征选择方法(例如卡方,互信息之类的)。没必要一下子就pca啥的,pca涉及矩阵运算,不太适合于大数据量。不过1500维在大多数情况下其实也不算大数据

关键还是要看你的样本有多少,各个类怎么分布,比如中文100亿文本的二分类,如果90亿文本正例10亿文本反例那么df(频次)低于100的词我看就可以不要了,这样100万的词大概可以过滤到10万左右吧。然后再用卡方检验选出前n(N取你能接受的最大值)个跟结果最相关的词做feature。

不过你一共才1500个词,估计样本不多,直接做卡方检验吧。
关键在于你有多少样本量,脱离这个,你的几条问题都无法回答。


这个纬度不算太多,如果样本量足够。,如果想单纯降纬,可以用下,pca或者简单算下卡方,具体要看目前的效果


推荐阅读:
相关文章