机器学习 - 朴素贝叶斯分类器的意见和文本挖掘





5.00/5 (21投票s)
基于朴素贝叶斯分类器的意见和文本挖掘的最佳实践。
要求:机器学习
情感分析
人们倾向于想知道别人对他们和他们的业务的看法,无论是产品(如汽车、餐厅)还是服务。如果你知道你的客户对你的看法,那么你就可以保持、改进甚至改变你的策略,以提高客户满意度。这可以通过收集他们发给你的电子邮件,并使用一些方法根据他们使用的词语来分类他们的意见。此外,它在工业和科学研究中还有其他应用。
- 它重启了营销。
- 办公室文档分类。
- 为客户或您的公司制作推荐列表。
在下图中,训练集上有关于特定句子的样本,并根据其内容将其标记为正面或负面。然后右侧是测试数据,其正面性或负面性对我们来说是模糊的,需要通过朴素贝叶斯分类器等方法进行计算。
科学研究中的文本挖掘
曼彻斯特大学的一个项目分析了15,000项小鼠研究,这些研究没有性别和年龄信息,这严重影响了研究结果,导致输出模糊。但借助文本挖掘工具和文档扫描,现在可以弥补这一空白,并根据小鼠的性别和年龄的新信息改进研究。[*]
意见挖掘
不同的人对一个主题有不同的反应,你可以衡量有多少人同意某个特定主题以及同意程度。这可以通过自然语言处理解决方案来实现。但还有另一种方法是使用朴素贝叶斯分类器。
朴素贝叶斯
朴素贝叶斯是分类和解释数据最适用的数据挖掘算法之一。该算法通过为每个事件提供概率来帮助进行统计解释。
简单定义:根据某些条件(x1, x2, x3, …, xn)的发生,找出事件种类(C1, C2, ..., Cn)发生的概率,这些条件在特定C之前已经发生。
给定训练数据集并根据某些因素进行分类。在上面的例子中,有文本将其内容分为正面或负面。然后作为测试数据集,有两个句子,其内容方向是正面还是负面是模糊的。我们的目标是通过研究训练集来找出它们的意向。适当的解决方案是使用朴素贝叶斯分类器,它在文本和意见挖掘中最适用。
为了达到我们的目的,我们应该了解或回顾一些关于统计和概率科学的概念。以下是一些我将解释的基本定义。
概率
当一个事件发生时,我们仔细观察它,我们计算一个特定事件发生的所有可能性,并称之为样本空间,然后计算它可能发生多少次。如果我们抛一枚硬币,我们的样本空间是两个,因为我们有 S = {正面,反面},当我们抛硬币时,只有一次发生或事件,要么正面要么反面,在正常情况下,硬币只会落到这两个中的一个。但是当我们投掷骰子时,样本空间有六种可能性。S = {1, 2, 3, 4, 5, 6},同样在投掷骰子时,也只发生一次。概率将通过事件计数除以总样本空间计算,例如,骰子落在数字1的概率是1/6。还有其他事件发生不止一次。在上面的表格中,您可以看到样本空间有8个。事件“正面”发生的概率是4/8=0.5,因为正面在总共8次中发生了4次,“负面”也是如此,它在8次中发生了4次,负面发生的概率等于正面,都是0.5。
条件概率
一个事件基于另一个事件发生的概率P(A|B)被称为条件概率,读作“在B条件下A的概率”。例如,一个病人首先血糖高,这是“B”,然后我们测量发生糖尿病的概率,这是“A”,所以我们测量P(A=糖尿病 | B=血糖)。在上面的例子中,“好”在“正面”条件下发生的概率是多少。
在好这一列中,有三个“是”用蓝色表示,这是好作为正面的组合,而最后一列的正面出现了四次,因此三除以四是0.75。
贝叶斯理论
在其他一些问题中,我们有一些事件和一些不同的类别,其中一些特定类型的事件属于特定类别。然后,在研究了过去的信息之后,我们希望将新条件分类到这些类别中。在上面的例子中,有不同的句子具有正面或负面情绪。然后我们想根据之前的分类来分类新句子。P(新句子 | 负面)或 P(新句子 | 正面)意味着新句子是正面的还是负面的。因为句子包含不同的词语,所以应该用朴素贝叶斯分类器来解决。
根据下面的十个公式,我证明了朴素贝叶斯是如何从条件概率公式中提取出来的。首先,句子应该根据不同的词进行划分,然后应该计算根据正面和负面状态的概率。然后比较负面和正面这两个值,哪个更大,句子就属于哪个类别。在下面的例子中,“It is good”是0.28,大于0.047,所以这是一个正面句子。
在上述方程中,c 发生的百分比很高,并且是总假设的子集,因为 P(x) 独立于 h 且 P(x) 的存在会减小,最终我们移除了 P(x)。
朴素贝叶斯分类器
该方法与神经网络和决策树一样实用,适用于文本分类和医学诊断。朴素贝叶斯是一种方法,当我们有大量数据样本时,它们从相互独立且联结的特征集中选择有限的值。假设 f 是目标函数,x 将从范围中选取值,我们的目标是计算最大概率。
计算说明
代码
下载 Python
如果您想要一个舒适的 IDE 和专业的编辑器,而无需安装库,可以使用 Anaconda & Spider。
然后从开始菜单打开 Anaconda Navigator 并选择“Spider”
朴素贝叶斯
朴素贝叶斯分类器的 Python 实现
步骤1:打开“Anaconda Prompt”
步骤2:安装“textblob”以获取必要的库
步骤3:下载语料库
步骤4:导入重要的库,如 textblob 和 textblob.classifiers
from textblob.classifiers import NaiveBayesClassifier
from textblob import TextBlob
步骤5:导入训练集和测试集并使用朴素贝叶斯
train = [
('It is good', 'positive'),
('I feel good about it', 'positive'),
('It is bad', 'negative'),
('It is good', 'positive'),
('It is bad', 'negative'),
('I feel bad about it', 'negative'),
('I feel it is not bad about', 'positive'),
('I feel not good about', 'negative')
]
test = [
('It is good', 'positive'),
('I feel bad about it', 'negative')
]
NB = NaiveBayesClassifier(train)
步骤6:准确性计算
print("Accuracy: {0}".format(NB.accuracy(test)))
步骤7:用不同的句子测试算法
print(NB.classify('I feel good about spring')) # 'positive'
print(NB.classify('I feel bad about dark')) # 'negative'
步骤8:对单个文档而非句子进行意见挖掘或文本挖掘
#Put collect of text in one textblob
#and textblob gives the result by sum up wach result of sentence
#Classify a TextBlob
blob = TextBlob("I feel bad about dark." # 'negative'
"I feel good about spring. " # 'positive'
"finally darkness is bad." # 'negative'
, classifier=NB) #sum up='negative'
print(blob)
print(blob.classify())
for sentence in blob.sentences:
print(sentence)
print(sentence.classify())
print(sentence.sentiment.polarity)
结论
贝叶斯方法
- 收集关于数据集的现有可能性数据和知识
- 为这些数据分配它们的概率、概率分布、独立假设
- 我们在不观察那个未知参数的情况下,根据我们的判断执行上述步骤
- 从环境中收集原始数据
- 观察数据并与数据集进行比较
- 计算次级概率分布
- 根据次级概率的平均值进行预测
- 做出决策以减少结果中的错误
优势
- 对每个样本的观察可能会使我们的假设准确性产生偏差
- 通过结合先前的知识和新样本获得新的假设
- 贝叶斯方法能够以概率方式预测情况
- 通过对多个假设的权重合成来分类新样本
- 在某些情况下,如果贝叶斯方法不起作用,它们是评估其他方法的好尺度
缺点
- 几乎完整的先决条件数据集(大量数据)
- 在没有这个训练数据集的情况下,我们必须估计概率
- 这个估计是基于先前的观察、经验……
- 进行这种近似非常昂贵
反馈
欢迎您随时对本文发表任何反馈;很高兴看到您的意见和对本代码的投票。如果您有任何问题,请随时在此处向我提问。
历史
- 2017年7月21日:初始版本