我发现很难理解朴素贝叶斯的过程中,我想知道,如果有人可以用英语简单的一步一步的过程解释。 我的理解是需要通过时间的比较发生的概率,但我不知道训练数据如何与实际的数据集。
请给我什么样的作用训练集播放的解释。 我给水果一个很简单的例子在这里,如香蕉例如
training set---
round-red
round-orange
oblong-yellow
round-red
dataset----
round-red
round-orange
round-red
round-orange
oblong-yellow
round-red
round-orange
oblong-yellow
oblong-yellow
round-red
Answer 1:
你的问题我的理解它分为两个部分,第一部分是你需要更好地了解朴素贝叶斯分类器和第二部分是围绕训练集的混乱。
一般而言,所有的机器学习算法的需要进行培训,像分类,预测等监督学习任务或像集群无监督的学习任务。
在训练步骤中,算法被教导与特定的输入数据集(训练集),以便以后我们可以测试它们对未知输入(他们从未见过的),用于它们可以分类或预测等(在箱子的监督学习)基于他们的学习。 这是大多数的机器学习技术,如神经网络,SVM,贝叶斯等都是基于。
所以,在一般的机器学习项目基本上你必须将你的输入设置为开发集(训练套装+开发,测试仪)测试集(或评估组)。 记住你的基本目标将是您的系统学习和分类,他们从来没有在任何开发设置或测试集之前看到新的投入。
该测试通常设置有相同的格式作为训练集。 如果我们简单地重复使用训练集作为测试集,然后简单地记住它的输入模式,而无需学习如何推广到新的例子,将收到误导:但是,测试集是从训练语料不同是非常重要的高分数。
一般来说,对于一个例子,我们的数据的70%可以作为训练集的情况。 还记得分区原设定到训练和测试将随机设置。
现在我来给你关于朴素贝叶斯等问题。
为了证明朴素贝叶斯分类的概念,考虑如下的例子:
如图所示,对象可以被分类为GREEN
或RED
。 我们的任务是新病例归类为他们到达时,即决定他们属于哪一类标签,基于当前现有的对象。
因为有两倍多的GREEN
物体为RED
,这是有理由相信,新的情况下(这还没有被发现还)是两倍,可能有会员GREEN
而不是RED
。 在贝叶斯分析,这种信念被称为先验概率。 先验概率基于以往的经验,在这种情况下的百分比GREEN
和RED
的物体,并经常被用来预测的结果才真正发生。
因此,我们可以这样写:
的先验概率GREEN
: number of GREEN objects / total number of objects
的先验概率RED
: number of RED objects / total number of objects
由于存在总共60
对象40
可放置GREEN
和20 RED
,先前对类别成员概率为:
事先概率GREEN
: 40 / 60
事先概率RED
: 20 / 60
已经制定了我们的先验概率,我们现在已经准备好(一个新的对象进行分类WHITE
在下图中圆圈)。 由于对象都能很好地聚集,这是合理的假设,更GREEN
(或RED
)在X附近的物体,就越有可能的是,新的案件属于那个特定的颜色。 为了测量这个可能性,我们周围绘制X的圆,其包含的点的数目(被选择先验)无论其类的标签。 然后,我们计算出属于每个类别标签的圆点数。 由此,我们计算的可能性:
从上面的说明中,很明显,的可能性X
给出GREEN
比的可能性更小的X
给出RED
,由于圆涵盖1
GREEN
对象和3
RED
的。 从而:
虽然现有概率显示X
可以属于GREEN
(假定有两倍的GREEN
相比RED
)的可能性指示,否则; 那的类别成员X
是RED
(假定有更多RED
在附近的物体X
比GREEN
)。 在贝叶斯分析,最终的分类是通过组合的信息,即两个源产生,现有和可能性,使用所谓的贝叶斯规则(修订版托马斯贝叶斯1702年至1761年的名字命名的)形成的后验概率。
最后,我们将其归类X作为RED
,因为它的类成员达到最大后验概率。
Answer 2:
我知道这是一个老问题,与既定的答案。 我发帖的原因是,是公认的答案有K-NN(K -nearest邻居),不同的算法的许多元素。
两个K-NN和NaiveBayes是分类算法。 从概念上讲,K-NN使用“亲近”的理念,以新的实体分类。 在K-NN“接近度”被建模的想法,例如欧氏距离或余弦距离。 相比之下,在NaiveBayes,“概率”的概念被用于新的实体分类。
由于问题是关于朴素贝叶斯,这里就是我想描述的思路和步骤的人。 我会尝试以尽可能少的方程,用简单的英语做尽可能多的。
首先,条件概率和贝叶斯法则
之前有人能理解和欣赏朴素贝叶斯的细微差别,他们需要知道几个相关概念的第一,即条件概率的思想,贝叶斯法则。 (如果您熟悉这些概念,跳到题为前往朴素贝叶斯一节)
用简单的英语条件概率 :那是什么事会发生的概率, 因为别的事情已经发生了。
比方说,有一些成果O.而且有证据E.从这些途径概率定义:乘以给定的(E的习题(的O出现概率): 兼具成果O和证据的概率E是Ø发生)
一个例子就明白了条件概率:
让我们说我们有美国参议员的集合。 参议员可能是民主党人或共和党人。 他们也无论是男性还是女性。
如果我们选择一个参议员完全随机,那是什么这个人是个女民主党人的概率是多少? 条件概率可以帮助我们回答这个问题。
(民主党和女参议员)=习题(参议员是民主党)乘以被女的条件概率的概率因为他们是民主党。
P(Democrat & Female) = P(Democrat) * P(Female | Democrat)
我们可以计算出同样的事情,相反的方式:
P(Democrat & Female) = P(Female) * P(Democrat | Female)
了解贝叶斯法则
从概念上讲,这是一种从P到去(证据|已知的结果)到P(成果|已知的证据)。 通常情况下,我们知道一些特定的证据是如何经常观察到, 给定一个已知的结果 。 我们必须利用这个众所周知的事实来计算反向,计算所提供的证据这一结果发生的可能性。
P(结果因为我们知道一些证据)= P(证据因为我们知道结果)次习题(成果),由P缩放(证据)
经典的例子就明白了贝叶斯法则:
Probability of Disease D given Test-positive =
Prob(Test is positive|Disease) * P(Disease)
_______________________________________________________________
(scaled by) Prob(Testing Positive, with or without the disease)
现在,这一切都只是序言,去朴素贝叶斯。
前往朴素贝叶斯
到目前为止,我们已经讨论只有一条证据。 在现实中,我们必须预测赋予多重证据的结果。 在这种情况下,数学变得非常复杂。 要解决这个问题复杂化,一个方法是“解耦合”多件证据,并把每件证据的独立。 这种方法就是为什么这个被称为朴素贝叶斯。
P(Outcome|Multiple Evidence) =
P(Evidence1|Outcome) * P(Evidence2|outcome) * ... * P(EvidenceN|outcome) * P(Outcome)
scaled by P(Multiple Evidence)
许多人选择记住这个为:
P(Likelihood of Evidence) * Prior prob of outcome
P(outcome|evidence) = _________________________________________________
P(Evidence)
请注意,这个方程的几件事情:
- 如果习题(证据|结果)为1,那么我们只是乘以1。
- 如果习题(某些特定证据|结果)为0,那么整个概率。 变为0。如果你看到矛盾的证据,我们可以排除这一结果。
- 由于我们除以P(证据)的一切,我们甚至可以脱身没有计算它。
- 后面通过现有相乘的直觉是,使我们更常见的结果,以及低概率的结果不太可能给予高概率。 这些也被称为
base rates
,他们是来扩展我们的预测概率的方法。
如何申请NaiveBayes预测结果?
只要运行上面的每一个可能的结果的公式。 因为我们正试图进行分类 ,每个结果被称为class
,它有一个class label.
我们的工作是看证据,要考虑它是如何可能成为这一类或类和标签分配给每个实体。 同样,我们采取了非常简单的方法:具有最高概率的类被声明为“胜利者”和阶级标签被分配到的证据的组合体。
水果例
让我们尝试一下上一个例子来提高我们的认识:OP问了“水果”标识的例子。
比方说,我们有1000件水果的数据。 他们恰好是香蕉 , 橙子或一些其他水果 。 我们知道每个水果3个特征:
- 无论是长
- 无论是甜美
- 如果它的颜色是黄色。
这是我们的“训练集”。 我们将用它来预测任何新的水果,我们遇到的类型。
Type Long | Not Long || Sweet | Not Sweet || Yellow |Not Yellow|Total
___________________________________________________________________
Banana | 400 | 100 || 350 | 150 || 450 | 50 | 500
Orange | 0 | 300 || 150 | 150 || 300 | 0 | 300
Other Fruit | 100 | 100 || 150 | 50 || 50 | 150 | 200
____________________________________________________________________
Total | 500 | 500 || 650 | 350 || 800 | 200 | 1000
___________________________________________________________________
我们可以预先计算了很多关于我们的水果收集的东西。
所谓“前一”的概率。 (如果我们不知道任何水果的属性,这将是我们的猜测。)这是我们的base rates.
P(Banana) = 0.5 (500/1000)
P(Orange) = 0.3
P(Other Fruit) = 0.2
“证据”的概率
p(Long) = 0.5
P(Sweet) = 0.65
P(Yellow) = 0.8
“可能性”的概率
P(Long|Banana) = 0.8
P(Long|Orange) = 0 [Oranges are never long in all the fruit we have seen.]
....
P(Yellow|Other Fruit) = 50/200 = 0.25
P(Not Yellow|Other Fruit) = 0.75
给定一个水果,如何分类的呢?
比方说,我们给出一个未知的水果的性质,并要求对其进行分类。 我们被告知,果实长,甜和黄色。 它是一个香蕉? 它是一个橘子? 或者是一些其他的水果?
我们可以简单地运行数为每3个结果,一个接一个。 然后,我们选择最高的概率和“分类”我们未知的水果属于该有基于我们之前的证据(我们的千果训练集)的概率最高的类:
P(Banana|Long, Sweet and Yellow)
P(Long|Banana) * P(Sweet|Banana) * P(Yellow|Banana) * P(banana)
= _______________________________________________________________
P(Long) * P(Sweet) * P(Yellow)
= 0.8 * 0.7 * 0.9 * 0.5 / P(evidence)
= 0.252 / P(evidence)
P(Orange|Long, Sweet and Yellow) = 0
P(Other Fruit|Long, Sweet and Yellow)
P(Long|Other fruit) * P(Sweet|Other fruit) * P(Yellow|Other fruit) * P(Other Fruit)
= ____________________________________________________________________________________
P(evidence)
= (100/200 * 150/200 * 50/200 * 200/1000) / P(evidence)
= 0.01875 / P(evidence)
以压倒性的保证金( 0.252 >> 0.01875
),我们将其归类这个甜/长/黄色水果如可能是香蕉。
为什么贝叶斯分类如此受欢迎?
先看一下它最终归结为。 只是一些计数和乘法。 我们可以预先计算所有这些条款,所以分类变得容易,快速和高效。
Let z = 1 / P(evidence).
现在,我们快速的计算如下三个量。
P(Banana|evidence) = z * Prob(Banana) * Prob(Evidence1|Banana) * Prob(Evidence2|Banana) ...
P(Orange|Evidence) = z * Prob(Orange) * Prob(Evidence1|Orange) * Prob(Evidence2|Orange) ...
P(Other|Evidence) = z * Prob(Other) * Prob(Evidence1|Other) * Prob(Evidence2|Other) ...
指定的取数最高的等级标识,和你做。
尽管名字,朴素贝叶斯原来是极好的某些应用。 文本分类是一个领域,它真正的亮点。
希望在了解朴素贝叶斯算法背后的概念没有什么帮助。
Answer 3:
拉姆纳拉辛汉解释的概念下面在这里非常漂亮,是通过朴素贝叶斯的动作代码示例的另一种解释
它采用例题从这个351页的书
这是我们将要使用的数据集
在上面的数据集,如果我们给的假设= {"Age":'<=30', "Income":"medium", "Student":'yes' , "Creadit_Rating":'fair'}
那么什么是概率他会买或不买电脑。
正是下面的代码回答了这个问题。
只要创建一个名为名为new_dataset.csv
并粘贴以下内容。
Age,Income,Student,Creadit_Rating,Buys_Computer
<=30,high,no,fair,no
<=30,high,no,excellent,no
31-40,high,no,fair,yes
>40,medium,no,fair,yes
>40,low,yes,fair,yes
>40,low,yes,excellent,no
31-40,low,yes,excellent,yes
<=30,medium,no,fair,no
<=30,low,yes,fair,yes
>40,medium,yes,fair,yes
<=30,medium,yes,excellent,yes
31-40,medium,no,excellent,yes
31-40,high,yes,fair,yes
>40,medium,no,excellent,no
这里是代码中的注释说明了我们正在做这里的一切! [蟒蛇]
import pandas as pd
import pprint
class Classifier():
data = None
class_attr = None
priori = {}
cp = {}
hypothesis = None
def __init__(self,filename=None, class_attr=None ):
self.data = pd.read_csv(filename, sep=',', header =(0))
self.class_attr = class_attr
'''
probability(class) = How many times it appears in cloumn
__________________________________________
count of all class attribute
'''
def calculate_priori(self):
class_values = list(set(self.data[self.class_attr]))
class_data = list(self.data[self.class_attr])
for i in class_values:
self.priori[i] = class_data.count(i)/float(len(class_data))
print "Priori Values: ", self.priori
'''
Here we calculate the individual probabilites
P(outcome|evidence) = P(Likelihood of Evidence) x Prior prob of outcome
___________________________________________
P(Evidence)
'''
def get_cp(self, attr, attr_type, class_value):
data_attr = list(self.data[attr])
class_data = list(self.data[self.class_attr])
total =1
for i in range(0, len(data_attr)):
if class_data[i] == class_value and data_attr[i] == attr_type:
total+=1
return total/float(class_data.count(class_value))
'''
Here we calculate Likelihood of Evidence and multiple all individual probabilities with priori
(Outcome|Multiple Evidence) = P(Evidence1|Outcome) x P(Evidence2|outcome) x ... x P(EvidenceN|outcome) x P(Outcome)
scaled by P(Multiple Evidence)
'''
def calculate_conditional_probabilities(self, hypothesis):
for i in self.priori:
self.cp[i] = {}
for j in hypothesis:
self.cp[i].update({ hypothesis[j]: self.get_cp(j, hypothesis[j], i)})
print "\nCalculated Conditional Probabilities: \n"
pprint.pprint(self.cp)
def classify(self):
print "Result: "
for i in self.cp:
print i, " ==> ", reduce(lambda x, y: x*y, self.cp[i].values())*self.priori[i]
if __name__ == "__main__":
c = Classifier(filename="new_dataset.csv", class_attr="Buys_Computer" )
c.calculate_priori()
c.hypothesis = {"Age":'<=30', "Income":"medium", "Student":'yes' , "Creadit_Rating":'fair'}
c.calculate_conditional_probabilities(c.hypothesis)
c.classify()
输出:
Priori Values: {'yes': 0.6428571428571429, 'no': 0.35714285714285715}
Calculated Conditional Probabilities:
{
'no': {
'<=30': 0.8,
'fair': 0.6,
'medium': 0.6,
'yes': 0.4
},
'yes': {
'<=30': 0.3333333333333333,
'fair': 0.7777777777777778,
'medium': 0.5555555555555556,
'yes': 0.7777777777777778
}
}
Result:
yes ==> 0.0720164609053
no ==> 0.0411428571429
希望它可以帮助更好地理解问题
和平
Answer 4:
朴素贝叶斯:朴素贝叶斯谈到监督下机器学习它用来做数据集的分类。 它使用基于事先的知识和独立的假设预测的事情。
他们称之为幼稚 ,因为它是假设(它假定所有的数据集中的功能也同样重要和独立的),在大多数现实世界的应用真的乐观,很少如此。
这是分类算法,这使得对未知的数据集的决定。 它是基于贝叶斯定理其描述基于其先验知识的事件的概率。
下图显示了贝叶斯多么天真工作
公式来预测NB:
如何使用朴素贝叶斯算法?
让我们如何NB炒菜的例子
第1步:首先,我们找出表的可能性表示肯定的概率或下图无英寸 第2步:查找每个类的后验概率。
Problem: Find out the possibility of whether the player plays in Rainy condition?
P(Yes|Rainy) = P(Rainy|Yes) * P(Yes) / P(Rainy)
P(Rainy|Yes) = 2/9 = 0.222
P(Yes) = 9/14 = 0.64
P(Rainy) = 5/14 = 0.36
Now, P(Yes|Rainy) = 0.222*0.64/0.36 = 0.39 which is lower probability which means chances of the match played is low.
欲了解更多参考参考这些博客。
请参阅GitHub的库朴素贝叶斯例子
Answer 5:
我试图解释用一个例子的贝叶斯法则。
假设你知道,10%的人是吸烟者。 你也知道,90%的吸烟者是男性,其中80%是20岁以上。
现在你看到有人谁是一个男人和15岁。 你想知道他是一个吸烟者的机会:
X = smoker | he is a man and under 20
既然你知道,10%的人是吸烟者你最初的猜测是10%( 先验概率 ,在不知道的人任何东西),但证据的其他部分 (他是一个人,他是15)可以影响这个猜测。
每一个证据可以增加或减少这个机会。 例如,这个事实证明他是一个人可能会增加的机会,前提是不吸烟者中这一比例(做人)较低,例如,40%。 在换句话说,作为一个男人一定会以成为一个吸烟者,而不是一个非吸烟者的良好指标。
我们能在另一种方式这方面的贡献。 对于每一个功能,你需要用它的共性给定的条件下,与单独比较该功能(F)的共性(概率)。 ( P(f) vs. P(f | x)
。举例来说,如果我们知道,身为一个男人的概率是在一个社会中90%和90%的吸烟者也是男人,然后知道某人是一个人没有按“T帮助我们(10% * (90% / 90%) = 10%)
但如果男人对社会作出贡献的40%,但90%的吸烟者,然后知道有人是男人增加的是机会吸烟者(10% * (90% / 40%) = 22.5% )
同样,如果是一个人的概率是社会的95%,那么不管的事实,即男性吸烟者的比例高(90%)!有证据表明,有人是男人降低他是一个吸烟者的机会! (10% * (90% / 95%) = 9.5%)
因此,我们有:
P(X) =
P(smoker)*
(P(being a man | smoker)/P(being a man))*
(P(under 20 | smoker)/ P(under 20))
请注意,这个公式中,我们认为是一个男人和20岁是独立的功能,所以我们乘他们,就意味着知道某人是20岁以下的有猜测说他是男人或女人没有影响。 但它可能不会是真实的,例如也许在一个社会大多数青春期是男性...
要在分类器使用此公式
分类器的一些功能(作为一个男人和20岁是),它必须决定他是否是吸烟者还是不给。 它使用上述公式发现。 为了提供所需的概率(90%,10%,80%......),它使用的训练集。 例如,它计算在训练集中是吸烟者,发现它们有助于样本的10%的人。 那么对于吸烟者检查有多少人是男性还是女性....多少高于20或低于20 ....
文章来源: A simple explanation of Naive Bayes Classification