Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 文本分类中的特征选择与约简_Python_Nlp_Svm_Sentiment Analysis_Feature Extraction - Fatal编程技术网

Python 文本分类中的特征选择与约简

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%。这

我目前正在做一个项目,一个简单情绪分析器,这样在单独的案例中会有2和3个类。我正在使用一个非常丰富的语料库,通过独特的单词(大约200.000)。我使用单词袋方法进行特征选择,为了减少独特特征的数量,由于出现频率的阈值进行了消除。最后一组特征包括大约20000个特征,这实际上是90%的减少,但是不足以达到预期的测试预测精度。我依次使用LibSVMSVM-light进行训练和预测(包括线性RBF核),通常也使用PythonBash

迄今为止观察到的最高准确率约为75%,而我至少需要90%。这是二元分类的情况。对于多类培训,准确率降至~60%。在这两种情况下,我都需要至少90%,但我不知道如何增加它:通过优化训练参数或通过优化特征选择

我读过关于文本分类中特征选择的文章,我发现使用了三种不同的方法,它们之间实际上有着明显的相关性。这些方法如下:

  • 单词袋的频率方法(鞠躬)
  • 信息增益(IG)
  • X^2统计数据(CHI)
第一种方法已经是我使用的方法,但我使用它非常简单,需要更好地使用它的指导,以获得足够高的精度。我还缺乏关于IGCHI的实际实施的知识,并在寻求任何帮助以这种方式指导我

非常感谢,如果你需要任何额外的帮助信息,请告诉我


  • @larsmans:频率阈值:我在示例中查找唯一单词的出现情况,这样,如果一个单词在不同示例中出现的频率足够高,它将作为唯一特征包含在功能集中

  • @TheManWithNoName:首先,感谢您为解释文档分类的一般问题所做的努力。我检查并试验了你提出的所有方法和其他方法。我发现比例差法(PD)是特征选择的最佳方法,其中特征为单图,权重为术语存在(TP)(我不明白为什么您标记了术语频率逆文档频率(TF-IDF))作为一种索引方法,我认为它是一个<强>特征加权方法>。strong>预处理也是您提到的这项任务的一个重要方面。我使用了某些类型的字符串消除来细化数据,以及形态分析词干分析。还请注意,我正在学习土耳其语,与英语相比,土耳其语具有不同的特点。最后,我成功地实现了二进制分类的~88%准确率(f-measure),以及多类分类的~84%准确率。这些价值观是我使用的模型成功的有力证明。这就是我到目前为止所做的。现在正在研究聚类和约简模型,已经尝试了LDALSI,然后转向moVMF和可能的球形模型(LDA+moVMF),这似乎在具有客观性质的语料库(如新闻语料库)上效果更好。如果您对这些问题有任何信息和指导,我将不胜感激。我需要信息,尤其是在功能空间降维方法(LDA、LSI、moVMF等)和聚类方法(k-means、分层等)之间建立接口(面向python、开源)


对于高维特征,建议使用线性支持向量机。根据我的经验,支持向量机精度的极限取决于正负“特征”。您可以进行网格搜索(或者在线性支持向量机的情况下,您可以只搜索最佳成本值)以找到最佳参数以获得最大精度,但最终您会受到特征集可分性的限制。事实上,你没有得到90%的分数,这意味着你还有一些工作要做,找到更好的特征来描述你的类成员。

我建议降维而不是特征选择。考虑一下,或者更好地考虑它是为词的表示袋定制的。这将允许您在概念上保留包含所有单词的表示,但通过利用它们之间的相似性(甚至同义类型)关系将它们压缩到更少的维度


所有这些方法都有相当标准的实现,您可以访问并运行它们——如果您让我们知道您使用的是哪种语言,我或其他人将能够为您指出正确的方向。

这可能有点晚了,但是

正如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)