我们正在完成一项有关文本分类的任务,我们使用了一种无监督的机器学习模型。
在进行文本聚类之前,数据集必须经历几个步骤,例如从停用词中清除数据集,从文本中提取词干,然后获得功能选择。
关于特征选择,有几种方法可用于特征选择,例如信息增益,基尼系数和互惠信息。
我想知道这些方法的性质以及我如何在编码部分中实现它们,是否可以使用任何库来执行这些任务。
您不应该选择功能。
文本遵循幂定律,因此没有可以跳过的“不常用词”或未使用的功能。信息隐藏在分布的末尾,而不是最常用的单词中。
如果您确实想限制维度以提高计算效率(对于文本来说,路透社认为很小),则应部署基于散列的方法。
使用功能选择可以帮助文本分类,具体取决于应用程序域。在主题(基于主题的类别)中,例如经济,政治,体育等方面,词干,中止列表和选择单词和单词n-gram的效果通常很好。在其他问题中,例如垃圾邮件检测,在表示中使用停用词可以提高准确性。
问题是:文本样式在应用程序领域中很重要?如果是,则应保留停用词并避免词干,但您始终可以使用例如那些具有最高信息增益得分的功能。
您可以通过StringToWordVector
过滤器在WEKA中执行停止列表和阻止。您可以通过搜索方法AttributeSelection
和评估指标Ranker
使用InfoGainAttributeEval
过滤器将WEKA用于特征选择。在Text Mining with WEKA的页面上获取更多详细信息(对不起,SSP)。
首先我们必须生成arff文件。
<< [arff文件格式如下:
@RELATION section
将包含preprocessing
之后整个文档中存在的所有单词。每个单词都将是实数类型,因为tfidf值是实数。@data section
将包含它们在preprocessing。
期间计算出的tfidf值,例如,第一个将包含tfidf值,该值出现在第一个文档中,而最后一个列是文档categary。@RELATION filename
@ATTRIBUTE word1 real
@ATTRIBUTE word2 real
@ATTRIBUTE word3 real
.
.
.
.so on
@ATTRIBUTE class {cacm,cisi,cran,med}
@data
0.5545479562,0.27,0.554544479562,0.4479562,cacm
0.5545479562,0.27,0.554544479562,0.4479562,cacm
0.55454479562,0.1619617,0.579562,0.5542,cisi
0.5545479562,0.27,0.554544479562,0.4479562,cisi
0.0,0.2396113617,0.44479562,0.2,cran
0.5545479562,0.27,0.554544479562,0.4479562,carn
0.5545177444479562,0.26196113617,0.0,0.0,med
0.5545479562,0.27,0.554544479562,0.4479562,med
生成此文件后,您可以将该文件作为输入InfoGainAttributeEval.java
。这对我有用。
python
库用于功能选择TextFeatureSelection
。该库以分数的形式为每个单词标记,二元组,三字母组等提供区分能力。那些了解机器学习中特征选择方法的人,它基于
包装器方法,并且为ML工程师提供了所需的工具,以提高其NLP和深度学习模型中的分类准确性。它具有4种方法,分别是Chi-square,Mutual information,Proportional Difference和Information gain,以帮助选择单词作为特征,然后再输入到机器学习分类器中。
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)