Python 文本分类中的特征选择与约简
我目前正在做一个项目,一个简单情绪分析器,这样在单独的案例中会有2和3个类。我正在使用一个非常丰富的语料库,通过独特的单词(大约200.000)。我使用单词袋方法进行特征选择,为了减少独特特征的数量,由于出现频率的阈值进行了消除。最后一组特征包括大约20000个特征,这实际上是90%的减少,但是不足以达到预期的测试预测精度。我依次使用LibSVM和SVM-light进行训练和预测(包括线性和RBF核),通常也使用Python和Bash 迄今为止观察到的最高准确率约为75%,而我至少需要90%。这是二元分类的情况。对于多类培训,准确率降至~60%。在这两种情况下,我都需要至少90%,但我不知道如何增加它:通过优化训练参数或通过优化特征选择 我读过关于文本分类中特征选择的文章,我发现使用了三种不同的方法,它们之间实际上有着明显的相关性。这些方法如下:Python 文本分类中的特征选择与约简,python,nlp,svm,sentiment-analysis,feature-extraction,Python,Nlp,Svm,Sentiment Analysis,Feature Extraction,我目前正在做一个项目,一个简单情绪分析器,这样在单独的案例中会有2和3个类。我正在使用一个非常丰富的语料库,通过独特的单词(大约200.000)。我使用单词袋方法进行特征选择,为了减少独特特征的数量,由于出现频率的阈值进行了消除。最后一组特征包括大约20000个特征,这实际上是90%的减少,但是不足以达到预期的测试预测精度。我依次使用LibSVM和SVM-light进行训练和预测(包括线性和RBF核),通常也使用Python和Bash 迄今为止观察到的最高准确率约为75%,而我至少需要90%。这
- 单词袋的频率方法(鞠躬)
- 信息增益(IG)
- X^2统计数据(CHI)
- @larsmans:频率阈值:我在示例中查找唯一单词的出现情况,这样,如果一个单词在不同示例中出现的频率足够高,它将作为唯一特征包含在功能集中
- @TheManWithNoName:首先,感谢您为解释文档分类的一般问题所做的努力。我检查并试验了你提出的所有方法和其他方法。我发现比例差法(PD)是特征选择的最佳方法,其中特征为单图,权重为术语存在(TP)(我不明白为什么您标记了术语频率逆文档频率(TF-IDF))作为一种索引方法,我认为它是一个<强>特征加权方法>。strong>预处理也是您提到的这项任务的一个重要方面。我使用了某些类型的字符串消除来细化数据,以及形态分析和词干分析。还请注意,我正在学习土耳其语,与英语相比,土耳其语具有不同的特点。最后,我成功地实现了二进制分类的~88%准确率(f-measure),以及多类分类的~84%准确率。这些价值观是我使用的模型成功的有力证明。这就是我到目前为止所做的。现在正在研究聚类和约简模型,已经尝试了LDA和LSI,然后转向moVMF和可能的球形模型(LDA+moVMF),这似乎在具有客观性质的语料库(如新闻语料库)上效果更好。如果您对这些问题有任何信息和指导,我将不胜感激。我需要信息,尤其是在功能空间降维方法(LDA、LSI、moVMF等)和聚类方法(k-means、分层等)之间建立接口(面向python、开源)
所有这些方法都有相当标准的实现,您可以访问并运行它们——如果您让我们知道您使用的是哪种语言,我或其他人将能够为您指出正确的方向。这可能有点晚了,但是 正如Bee指出的,您已经意识到,如果您已经在分类之前的阶段丢失了信息,那么使用SVM作为分类器是浪费的。然而,文本分类的过程需要更多的步骤,而不仅仅是几个阶段,每个阶段对结果都有显著的影响。所以之前
from TextFeatureSelection import TextFeatureSelection
#Multiclass classification problem
input_doc_list=['i am very happy','i just had an awesome weekend','this is a very difficult terrain to trek. i wish i stayed back at home.','i just had lunch','Do you want chips?']
target=['Positive','Positive','Negative','Neutral','Neutral']
fsOBJ=TextFeatureSelection(target=target,input_doc_list=input_doc_list)
result_df=fsOBJ.getScore()
print(result_df)
#Binary classification
input_doc_list=['i am content with this location','i am having the time of my life','you cannot learn machine learning without linear algebra','i want to go to mars']
target=[1,1,0,1]
fsOBJ=TextFeatureSelection(target=target,input_doc_list=input_doc_list)
result_df=fsOBJ.getScore()
print(result_df)
from TextFeatureSelection import TextFeatureSelectionGA
#Input documents: doc_list
#Input labels: label_list
getGAobj=TextFeatureSelectionGA(percentage_of_token=60)
best_vocabulary=getGAobj.getGeneticFeatures(doc_list=doc_list,label_list=label_list)