人们倾向于知道他人是如何看待他们和他们的业务的,不管是什么东西,不管是汽车,饭店等产品还是服务本身。如果你知道你的客户如何看待你,那么你可以保持或改善甚至改变你的策略,以提高客户满意度。你可以借助收集他们发送给你的电子邮件,并使用一些方法根据他们使用的文字来分类他们的意见。此外,情绪分析还有在工业上的其他研究应用。
在下图中,在训练集上有关于特定句子的样本,并根据其内容分配正面或负面的标志。然后,我们在右部分放上测试数据集,其正面性或负面性对于我们来说是有意义的,并且应该通过如朴素贝叶斯分类器的一些方法来计算得到。
曼彻斯特大学的一个项目分析了15000个小鼠样本,却没有他们的性别和年龄信息,这对研究结果已经产生不良影响,而且得出了模棱两可的结论。但借助文本挖掘工具和扫描文档技术,现在可以填补这一空白,并根据基于小鼠性别和年龄的新信息改进研究。[*]
不同的人对同一个主题有不同的反应,你可以衡量对于一个具体的主体,有多少人在何种程度上对其表示同意。这个问题可以用自然语言处理解决。但是还有另一种用朴素贝叶斯分类器解决的方法。
朴素贝叶斯是分类和解释数据最适用的数据挖掘算法之一。该算法通过给出每个事件的概率来帮助统计并给出解释。
简单定义:根据比特定的C.发生的更早的一些条件(x 1,x 2, x 3,..., x n),找出事件(C 1,C 2, ...,C n)发生的概率
如图,给出了训练数据集,并根据一些因素对这些数据进行分类。在上面的例子中,有文字确定他们的内容是正面的还是负面的。作为一个测试数据集,有两个句子,其内容方向正负面性是模棱两可的。我们的目标是通过学习训练集找到他们的方向。使用最适用于文本和意见挖掘的朴素贝叶斯分类器是问题的适当的解决方案。
为了达到我们的目的,我们应该知道或回顾关于统计和概率科学的一些概念。对于一些基本的定义,解释如下:
当一个事件发生时,我们仔细考察,统计发生在特定的事件上所有可能性,并称之为Sample Space(样本空间),然后计算可能发生多少次。如果我们扔一枚硬币,我们的样本空间是两个,因为我们有S = {正面,反面},当我们扔硬币时,正常状态下只有一个事件,硬币只可能是正面或反面。但是投掷骰子时则有六种可能性作为样本空间。S = {1,2,3,4,5,6},也是在骰子中,只有一个发生。概率将通过事件总数除以总采样空间来计算,例如1号落骰的概率是1/6。还有其他事件不止一次发生。从上表可以看出,有8个样本空间。发生事件“正面”的概率是4/8 = 0.5,因为8次共发生4次正面事件;对于“负面”事件也是一样的。
发生一个事件时发生的另一个事件P(A | B)的概率称为条件概率,读作“B条件下A的概率”。例如,一名患者首先有高血糖,即“B”,然后测量发生糖尿病的概率为“A”,因此我们测量P(A = 糖尿病| B = 葡萄糖)。在上面的例子中,(体现为)在“正面”条件下发生“好”的概率有多少。
在好事件的那一列中,有三个以蓝色表示的正面事件,它们是好事件和正面事件的组合,而在最后一栏中正面事件发生了四次,所以条件概率为三比上四得0.75。
对于其他一些问题,我们有几种事件,也有几种(分类方法不同的)类别,某些特定种类的事件属于特定的类别。然后在研究过去的信息之后,我们要把新的条件分类。在上面的例子中,不同的句子有正面或负面的。然后我们要根据以前的分类对新的句子进行分类。P(新的句子 | 负面)或P(新的句子 | 正面)表示新句子是正面还是负面(的条件概率)。由于句子包含不同的单词,因此应该用朴素贝叶斯分类器来解决。
根据下面的十个公式,我证明了从条件概率公式中提取了多少朴素贝叶斯。首先,句子应该被不同的单词分开,然后依次根据正面和负面的状态来计算概率。最后把两个值从负值和正值进行比较,不管哪个值越大,句子就属于这个类别。在下面的例子中,“It is good”是大于0.047的0.28,因此是“正确”的句子。
在上面的方程中,c有很高的百分比发生,并且是全部假设的一个子集,因为P(x)与h无关,P(x)的存在将会减少,最终我们移除P(x)。
朴素贝叶斯分类器
该方法与神经网络和决策树一样实用,适用于文本分类和医学诊断。朴素贝叶斯是当我们有大量数据样本时的一种方法,但是他们从一组相互独立的特征中选取有限的值。假设f是目标函数,x将从中选取值的范围,我们的目标是计算最大概率。
计算说明
如果你想免费使用一个舒适的IDE和专业编辑器,且不需要安装库,你可以使用Anaconda&Spider
然后从星号打开Anaconda Navigator(导航)并选择“Spyder”(编译器):
from textblob.classifiers import NaiveBayesClassifier
from textblob import TextBlob
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)
print("Accuracy: {0}".format(NB.accuracy(test)))
print(NB.classify('I feel good about spring')) # '正面的'
print(NB.classify('I feel bad about dark')) # '负面的'
#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." # '负面的'
"I feel good about spring. " # '正面的'
"finally darkness is bad." # '负面的'
, classifier=NB) #sum up='负面的'
print(blob)
print(blob.classify())
for sentence in blob.sentences:
print(sentence)
print(sentence.classify())
print(sentence.sentiment.polarity)
贝叶斯方法
优点
缺点