朴素贝叶斯假设如何使分割的计算密集程度降低?

时间:2016-08-10 17:17:38

标签: machine-learning nlp artificial-intelligence linguistics

我正在观看Udacity的AI类简介视频,我似乎无法将一个想法包裹在我的脑海中。

据说,对于长度为n 2的字符串, n-1 分段是可能的。当我们采用朴素贝叶斯假设时,最佳分割s * 可以定义为最大化分割

产品(P(w i ))

可以写出最好的相同:

s * = argmax s P(first_word)* s * (rest_of_words)

我明白为什么以上是真的。讲师说,由于上述等式,我们不必列举所有2个 n-1 案例。我无法理解这个原因。

我也明白找到P(single_word)比学习n-gram的相同概率简单,这也有助于计算。

2 个答案:

答案 0 :(得分:0)

由于我们正在处理单个单词,因此我们必须每次选择一个单词而不是它们的所有组合,从而减少了搜索空间。考虑字符串:

“Iliketennis”

该字符串有11个字符,因此2 ^ 11 = 2048个案例。如果我们开始查看最可能的第一个词,那就是:

“我”,“Il”,“Ili”,“Ilik”等等。 11种可能的情况。现在我们已经掌握了所有可能的第一句话,我们寻找最可能的:

  • P(“I”)= 0.4,
  • P(“Il”)= 0.0001,
  • P(“Ili”)= 0.002,
  • P(“Ilik”)= 0.00003
  • ...

等等。

发现最可能的是“我”,我们把它作为第一个词,现在我们可以专注于剩余的10个字符/案例:

“liketennis”

重复相同的过程,您现在将有10个可能的单词案例,概率为:

  • P(“l”)= 0.05,
  • P(“lI”)= 0.0001,
  • P(“lik”)= 0.0002,
  • P(“lik”)= 0.00003
  • P(“like”)= 0.3
  • ...

等等。

所以我们选择“喜欢”。现在,对最后6个字符重复搜索。如果不重新编写过程,则会拾取“网球”并且不会留下字符,因此分段结束。

由于我们已经按字词进行了分析,我们考虑的可能性是

11 + 10 + 6 = 27

远远超过2048年可能的分裂。

答案 1 :(得分:0)

我推荐一个由Mathematicalmonk制作的视频, 此视频:https://youtu.be/qX7n53NWYI4?t=9m43s

他解释说,如果没有条件独立性假设(朴素贝叶斯),当您从数据中学习时,需要更多样本来估计概率。但是,如果你假设(即使它不正确)功能之间的独立性,使用较少的训练数据,你可以估计概率分布。

为什么呢?让我们简单一点,没有天真的假设,预测x_1的二维特征向量的概率为:

without naive assumption

通过仅假设x_2y要素的二进制值,您需要按照从样本数据中学习的P(x_1=0|y), P(x_1=1|y), P(x_2=0|x_1=0,y), P(x_2=0|x_1=1,y), P(x_2=1|x_1=0,y), P(x_2=1|x_1=1,y) 存储这些值:

y

换句话说,您需要存储2^1+2^2个参数。您可以将其推广到d维二进制特征向量:

generalized without naive

如果您采用天真的假设并假设这些特征是独立的,那么您将拥有以下公式:

naive assumption

这意味着您只需要按X存储这些参数,以便预测所有可能的P(x_1=0|y), P(x_1=1|y), P(x_2=0|y), P(x_2=1|y)

a = 10
b = 20
c = a + b

#Normal string concatenation
print("sum of", a , "and" , b , "is" , c) 

#convert variable into str
print("sum of " + str(a) + " and " + str(b) + " is " + str(c)) 

# if you want to print in tuple way
print("Sum of %s and %s is %s: " %(a,b,c))  

#New style string formatting
print("sum of {} and {} is {}".format(a,b,c)) 

#in case you want to use repr()
print("sum of " + repr(a) + " and " + repr(b) + " is " + repr(c))

EDIT :

#New f-string formatting from Python 3.6:
print(f'Sum of {a} and {b} is {c}')

或将其概括为:

generalized with naive