朴素贝叶斯(naive Bayes)
/ nah-EEV BAYZ /
朴素贝叶斯是一个又快、又出奇有效的分类器,建立在一条用证据更新信念的、已有250年历史的法则之上。它最经典的活儿是过滤垃圾邮件:邮件里的每个词都是一条线索。「伟哥」一词把你的信念往垃圾邮件那边推;「会议」「发票」又把它推回正常邮件。朴素贝叶斯把所有这些小小的推力加在一起,然后发问:给定眼前这一袋词,哪一类——垃圾还是非垃圾——更有可能产生它?
它依托于贝叶斯定理,那条把概率「翻转」过来的公式:它从训练数据里知道「伟哥」在垃圾邮件中出现得多频繁,再用这一点反推——一封含有「伟哥」的邮件,是垃圾的可能性有多大。「朴素」二字,是个故意为之的粗糙捷径:它假装每条线索都彼此独立——看见「免费」丝毫不能告诉你「赚钱」是否也会出现。这在真实语言里明明是错的,可这模型偏偏仍然好用得惊人,因为只为挑出那个最可能的类别,这些粗略的概率通常已经够用。
它的长处是快、简单,且对训练数据的胃口极小——它曾是早期垃圾邮件过滤器的中坚,至今仍是文本分类的一个强基线。它吃力的地方,是凡其「独立」的假装咬得很狠之处,或是当你需要输出的概率本身准确、而不只是胜出的类别正确时:因为它把相关的线索重复计数,它给出的置信度数字往往离谱地夸大,哪怕最终的标签是对的。
训练数据显示,「奖品」出现在30%的垃圾邮件里,却只出现在1%的正常邮件里。一封新邮件含有「奖品」「中奖者」「领取」——每个词都在垃圾邮件里常见得多。朴素贝叶斯把这些线索相乘(假装它们彼此独立),得出结论:是垃圾邮件,概率压倒性地高。
每个词都投上一票;那个「朴素」的跳跃,就是把这些词当作互不相干。
「独立」这个假设几乎总是错的——词总是结伴而行、彼此相关——可这分类器照样好使,因为哪怕用粗糙的算法,正确的类别也常常胜出。请更信它的标签、而非它的概率:那些置信度百分比通常都过于自信。