文本挖掘预处理和朴素贝叶斯分类器(Python)

这项作业是为了根据提供的研究论文来了解如何在业务中使用文本分类。 通过应用文本预处理和Naive Bayes分类器的概念,在Python中实现了Naive Bayes算法。

数据集

该项目使用的数据集是“电影评论数据”,其中包含与康奈尔大学计算机科学系的电影评论有关的数据。

主页| 计算机科学系

康奈尔大学计算机科学系和康奈尔技术学院将邀请来自……的高中生团队

www.cs.cornell.edu

这项作业的目标

  • 创建数据转换和分类的“管道”
  • 使用朴素贝叶斯分类器将电影数据分为正面情绪和负面情绪
  • 使用6倍交叉验证

配置

首先,设置导入功能以及提取影片查看数据。 该项目将在Numpy和Pandas上使用scikit-learn(朴素贝叶斯,MultinomialNB,CountVectorizer,TfidfTransformer,管道,KFold,混淆矩阵和f1分数)作为数据帧;

从语料库读取文档时,还使用Unicode文本编码,并且忽略了处理过程中的任何错误,以确保处理的流畅性;

将语料库放入数据框格式以使操作更容易;

读取语料库数据以及随机化;

创建数据转换和分类管道

为了使用scikit-learn及其功能(朴素贝叶斯,MultinomialNB,CountVectorizer,TfidfTransformer,管道),我在每个功能上尝试了不同的参数混合。

在管道中对数据转换和分类的参数进行操作可以提高准确性。 为了达到我尝试的最佳精度,使用了这些参数。

对于每个管道,出于自己的原因,我从每个管道中仅选择和使用了几个参数。

CountVectorizer(stop_words =’english’和小写= True)
预处理小写字母(通过数据集将所有大写字母转换为小写字母)可以避免过度拟合(例如对一个被算作两个单词的单词(分别计算为大写字母和小写字母)进行重复计算),从而达到最佳准确性。 并且通过使用stop_words =’english’从文档中删除所有停用词,整个文档中被计数的单词数将减少。 换句话说,通过相对突出更有意义的单词,我们可以获得更好的准确性。

TfidfTransformer(use_idf = True和smooth_idf = True)
use_idf = True的参数通过获取文档总数与接触该术语的文档数之比的对数来启用文档频率逆加权。 而且smooth_idf = True将文档频率加1以避免被零除,因此我们可以确定地测量文档中术语的频率。

多项式NB(alpha = 1)
通过使用alpha = 1(拉普拉斯平滑),它在分子上加1(给定文档中特定单词出现的次数),其中| V |。 (所有文档的唯一词数)(关于条件概率的分母)(给定文档中词的总数),最终将具有更大的分子和分母。 它使分类的预测更加清晰,这意味着更好的准确性。

每个管道的更多参数和属性

CountVectorizer
将文本文档的集合转换为令牌计数矩阵。 此实现使用scipy.sparse.csr_matrix生成计数的稀疏表示。

sklearn.feature_extraction.text.CountVectorizer – scikit-learn 0.19.1文档

sklearn.feature_extraction.text类。 CountVectorizer(输入=’内容’,编码=’UTF-8’,解码错误=’严格’…

scikit-learn.org

多项式
朴素贝叶斯分类器用于多项模型。 多项式朴素贝叶斯分类器适用于具有离散特征的分类(例如,用于文本分类的字数统计)。 多项式分布通常需要整数特征计数。 但是,实际上,小数计数(例如tf-idf)也可能起作用。

sklearn.naive_bayes.MultinomialNB – scikit-learn 0.19.1文档

多项式朴素贝叶斯分类器适用于具有离散特征的分类(例如,…的字数统计)

scikit-learn.org

TfidfTransformer
将计数矩阵转换为标准化的tf或tf-idf表示形式。

Tf表示术语频率,而tf-idf表示术语频率乘以文档频率的倒数。 这是信息检索中的常用术语加权方案,也已在文档分类中找到了很好的用途。

在给定文档中使用tf-idf代替令牌出现的原始频率的目的是缩小在给定语料库中非常频繁出现的令牌的影响,因此,从经验上讲,其作用少于在文档中出现的特征。训练语料库的一小部分。

sklearn.feature_extraction.text.TfidfTransformer – scikit-learn 0.19.1文档

使用tf-idf代替给定文档中令牌出现的原始频率的目的是缩小规模…

scikit-learn.org

K折交叉验证和混淆矩阵

除管线外,还使用K折交叉验证,混淆矩阵和得分来表示和审查分类的准确性和混淆矩阵;

K折交叉验证

交叉验证(有时称为轮转估计)或样本外测试是各种类似的模型验证技术中的任何一种,用于评估统计分析的结果将如何概括为一个独立的数据集。

它主要用于目标是预测的环境中,并且人们想要估计预测模型在实践中的执行准确性。

–维基百科

K折交叉验证可提供训练/测试索引,以分割训练测试集中的数据。 将数据集拆分为k个连续的折叠(默认情况下不进行混洗)。

然后,将每一个折叠用作验证集,而剩下的k-1个折叠形成训练集。

sklearn.cross_validation.KFold – scikit-learn 0.19.1文档

以前的sklearn.neigh…sklearn.neighbors.LSHForest

scikit-learn.org

打印出分类的准确性和混乱度矩阵

我通过上面的更新代码获得的最佳精度和混淆矩阵;

分数:0.94,混淆矩阵:[[1551 236] [7 1867]]。

参考

本文还引用了研究论文“评估基于在线社区的健康论坛中的订单影响”,该论文将Naive Bayes应用于解决业务问题。

“在基于社区的在线健康论坛中评估秩序影响”,R。Mousavi,TS Raghu,Keith Frey,第三十六届国际信息系统会议,2015年。