網易公開課,第5,6課
notes,http://cs229.stanford.edu/notes/cs229-notes2.pdf算法
前面討論了高斯判別分析,是一種生成學習算法,其中x是連續值
這裏要介紹第二種生成學習算法,Naive Bayes算法,其中x是離散值的向量
這種算法經常使用於文本分類,好比分類垃圾郵件函數
首先,如何表示一個文本,即x?學習
以上面這種向量來表示,字典中的詞是否在該文本中出現
其中每一個詞,能夠看做是一個特徵,對於特徵的選取,能夠過濾到stop word,或只選取出現屢次的值。。。spa
那麼訓練集,就是一系列(x向量,y),其中y爲0或1表示non-spam,spam3d
其次,如何建模?blog
咱們能夠考慮直接對P(y|x)進行建模,可是x中的feature數通常是比較多的,講義中假設爲50000,那麼能夠想象x的取值可能性爲 ,因此若是要找出每一種x的可能性來建模,基本不可能索引
因此這種case,須要使用生成學習算法,經過對P(x|y)進行建模,來間接計算出P(y|x)
由於y的取值只有0,1,看似容易一些
但這裏x的取值是,爲一個
參數向量的多項分佈,仍然過於複雜事件
因此最終,提出Naive Bayes (NB) assumption,用於近似和簡單對P(x|y)進行建模
這個假設很是簡單,即每一個詞或feature都是獨立出現的 ip
因此上面推導的第二行能夠簡化爲第三行的形式
雖然這個假設在現實中不可能爲真,可是實際的效果挺好get
其實這裏獲得這些結果,就算不用最大似然去推導,單純從機率角度去思考,也會獲得這個結果。好比 ,想固然應該是,全部y=1的文本中包含第j個單詞的比例
因此這裏使用最大似然推導是一個流程,顯得更嚴謹
其實能夠更直觀的獲得上面的結果
最後,若是對一個新的x進行預測?
比較簡單,用上面的公式計算出每一部分,就能夠獲得最終的結果
對於生成算法,分別計算出P(y=1|x)和P(y=0|x)
Laplace smoothing
上面給出的Naive Bayes有個問題是,當給出的x中出現一個訓練集從未出現過的詞的時候,這時候根據訓練集去計算和
都會獲得0
因而會獲得這個結果,
這明顯是不合理的,這種不合理是因爲你的訓練集是很是有限的致使的,因此這裏須要使用Laplace smoothing來避免這種狀況
z取值{1, . . . , k},
那麼給定m個z的觀察值,![]()
如今要根據觀察值,來判斷![]()
根據上面的最大似然結論,![]()
這裏問題就在於,若是j在m個觀察值中沒有出現,那麼經過這個公式算出的爲0
這明顯不合理,由於在訓練集中沒有看到的現象,你不能說他出現的機率爲0,只不過是由於訓練集有限,沒有出現罷了
Laplace用於描述明天太陽升起的機率,雖然你每天看到太陽升起,但明天太陽依然會升起的機率必定不是1
因此利用Laplace smoothing,變化爲![]()
分子加1,很容易理解,沒有就至少算出現一次
分母之因此要加k,是爲了保證![]()
回到咱們的問題,通過Laplace smoothing的Naive Bayes分類器變爲,
Naive Bayes的擴展
1. x取值的擴展
基本的算法中,x取值爲{0,1}
能夠擴展成x的取值爲{1, 2, . . . , k},
區別就是 ,由Bernoulli分佈變爲多項分佈
這種擴張經常使用於使用GDA對連續x進行分類效果很差時,
將連續的x離散化,好比下面把房屋的面積進行離散化
而後使用Naive Bayes進行分類每每會獲得比較好的效果
2. multi-variate Bernoulli event model
這種擴展每每也是用於文本分類,由於普通的bayes方法只是考慮這個詞是否存在,而沒有考慮這個詞的出現頻率
事件模型就是對這個的一種改進,
首先表示一個文本或email的方式變了
普通bayes中,x長度取決於字典的大小,由於xi表示字典中第i個詞是否出現
而這裏,x長度取決於文本長短,xi表示在文本中i位置上的詞中字典中的索引,以下例
For instance, if an email starts with 「A NIPS . . . ,」then x1 = 1 (「a」 is the first word in the dictionary), and x2 = 35000 (if「nips」 is the 35000th word in the dictionary).
joint似然函數爲,m是訓練集的大小,n是每一個文本中的詞的個數
能夠獲得,一樣省去推導過程 能夠看到,這裏在考慮字典中索引爲k的詞時,會把在文本中出現的次數相加 因此這裏不單單考慮是否出現,還考慮到到次數