美文网首页
朴素贝叶斯

朴素贝叶斯

作者: 不会忘的名字 | 来源:发表于2018-12-25 20:28 被阅读0次

1.关键词

  • 朴素:独立性假设
  • 贝叶斯公式
    贝叶斯公式简单例子

另一个例子,现分别有 A、B 两个容器,在容器 A 里分别有 7 个红球和 3 个白球,在容器 B 里有 1 个红球和 9 个白球,现已知从这两个容器里任意抽出了一个球,且是红球,问这个红球是来自容器 A 的概率是多少?
假设已经抽出红球为事件 B,选中容器 A 为事件 A,则有:P(B) = 8/20,P(A) = 1/2,P(B|A) = 7/10,按照公式,则有:P(A|B) = (7/10)*(1/2) / (8/20) = 0.875
朴素贝叶斯算法是一个典型的统计学习方法,主要理论基础就是一个贝叶斯公式,贝叶斯公式的基本定义如下:

贝叶斯公式.jpg

这个公式虽然看上去简单,但它却能总结历史,预知未来:

  • 公式的右边是总结历史
  • 公式的左边是预知未来

2.朴素贝叶斯优缺点

优点:

  • 朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率;
  • 对小规模的数据表现很好;
  • 能处理多分类任务,适合增量式训练;
  • 对缺失数据不太敏感,算法也比较简单,常用于文本分类

缺点:

  • 只能用于分类问题
  • 需要计算先验概率;
  • 分类决策存在错误率;
  • 对输入数据的表达形式很敏感

3. 三种贝叶斯模型

导包,导入数据

from sklearn.naive_bayes import GaussianNB, MultinomialNB, BernoulliNB
from sklearn.datasets import load_iris
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

iris = load_iris()
data = iris.data[:,0:2]
target = iris.target

3.1、高斯分布朴素贝叶斯

ga_NB = GaussianNB()
ga_NB.fit(data, target)
ga_NB.score(data, target)
out[]:0.78

高斯分布就是正态分布
【用途】用于一般分类问题
使用自带的鸢尾花数据

xmin, xmax = data[:,0].min(),data[:,0].max()
ymin, ymax = data[:,1].min(), data[:,1].max()
x, y = np.linspace(xmin, xmax, 1000), np.linspace(ymin, ymax, 1000)
X,Y = np.meshgrid(x,y)
X_test = np.c_[X.ravel(), Y.ravel()]
# 预测
y_ = ga_NB.predict(X_test)
# 画出分类决策线
plt.pcolormesh(X, Y, y_.reshape(1000,1000))
# 画出原始点
plt.scatter(data[:,0], data[:,1],c=target, cmap='rainbow')
高斯分布.png

3.2、多项式分布朴素贝叶斯

多项式分布:

多项式分布.jpg

【用途】适用于文本数据(特征表示的是次数,例如某个词语的出现次数)

例:延续上面,使用鸢尾花数据

mu_NB = MultinomialNB()
mu_NB.fit(data, target)
mu_NB.score(data, target)
out:0.6666666666666666
# 预测
y_ = mu_NB.predict(X_test)
# 画出分类决策线
plt.pcolormesh(X, Y, y_.reshape(1000,1000))
# 画出原始点
plt.scatter(data[:,0], data[:,1],c=target, cmap='rainbow')
多项式分布.png

3.3、伯努利分布朴素贝叶斯

伯努利分布:

伯努利分布.png

【用途】适用于伯努利分布,也适用于文本数据(此时特征表示的是是否出现,例如某个词语的出现为1,不出现为0)

绝大多数情况下表现不如多项式分布,但有的时候伯努利分布表现得要比多项式分布要好,尤其是对于小数量级的文本数据

例:继续使用鸢尾花数据集

be_NB = BernoulliNB()
be_NB.fit(data, target)
be_NB.score(data, target)
out:0.3333333333333333
# 预测
y_ = be_NB.predict(X_test)
# 画出分类决策线
plt.pcolormesh(X, Y, y_.reshape(1000,1000))
# 画出原始点
plt.scatter(data[:,0], data[:,1],c=target, cmap='rainbow')
伯努利分布.png

4、文本分类实战

sms = pd.read_csv('../../data/SMSSpamCollection', header=None, sep='\t')
sms
data = sms[1].values
target = sms[0].values
data.shape
out:(5572,)

由于读取出来的data是字符串数据
导入sklearn.feature_extraction.text.TfidfVectorizer用于转换字符串
读取短信数据

from sklearn.feature_extraction.text import TfidfVectorizer
# 只转化data会变成sparse.csr.csr_matrix
# fit_transform
tf = TfidfVectorizer()
# 训练和转换一起做
data = tf.fit_transform(data).toarray()
ga_NB = GaussianNB()
ga_NB.fit(data, target)
ga_NB.score(data, target)
out:0.9414931801866475
# 自己生成预测数据
messages = [
    "how are you.I'm fine thank you and you?",
    "nice to meet you ,nice to meet you too.", 
    "fuck off",
    "congratulation, you've won a prize, please call 0086131111111 to get the reward.",
    "Big Surprise, goods are 50% off.",
    "Mark six number is 34, have you won, if want to win ,please follow us",
    "HanMeiMei ,I'm Lilei, I love you.would be my grilfriend.",
    "OK, let's have a dinner together."
]
# 高斯分布预测
y_ = ga_NB.predict(X_test)
y_
out:array(['ham', 'ham', 'ham', 'spam', 'ham', 'ham', 'spam', 'ham'],
      dtype='<U4')
# 多项式
mu_NB = MultinomialNB()
mu_NB.fit(data, target)
mu_NB.score(data, target)
out:0.9761306532663316
mu_NB.predict(X_test)
out:array(['ham', 'ham', 'ham', 'ham', 'ham', 'ham', 'ham', 'ham'],
      dtype='<U4')
# 伯努利
be_NB = BernoulliNB()
be_NB.fit(data, target)
be_NB.score(data, target)
out:0.9881550610193827
be_NB.predict(X_test)
out:array(['ham', 'ham', 'ham', 'ham', 'ham', 'ham', 'ham', 'ham'],
      dtype='<U4')

相关文章

  • 算法笔记(7)-朴素贝叶斯算法及Python代码实现

    朴素贝叶斯算法有三种类型,分别是贝努利朴素贝叶斯、高斯贝叶斯、多项式朴素贝叶斯。 贝叶斯公式 贝努利朴素贝叶斯 适...

  • 朴素贝叶斯法

    朴素贝叶斯法 朴素贝叶斯法的学习与分类 朴素贝叶斯法的参数估计 朴素贝叶斯实现 高斯朴素贝叶斯实现 使用 skle...

  • 朴素贝叶斯(NBM)之后验概率最大化的含义 | 统计学习方法

    朴素贝叶斯 - 贝叶斯估计Python复现: 舟晓南:朴素贝叶斯(Bayes)模型python复现 - 贝叶斯估计...

  • 朴素贝叶斯算法介绍及优化

    朴素贝叶斯(Naive Bayes) 贝叶斯公式 朴素贝叶斯算法其实原理很简单,要理解朴素贝叶斯算法我们首先得知道...

  • 朴素贝叶斯法(NaiveBayes)

    朴素贝叶斯法(Naive Bayes) 朴素贝叶斯法是基于贝叶斯定力和特征条件独立假设的分类方法。 朴素贝叶斯法实...

  • 朴素贝叶斯算法

    问题 1. 什么是朴素贝叶斯 2. 怎么理解贝叶斯公式和朴素贝叶斯公式 3. 朴素贝叶斯算法流程是怎样...

  • 深度学习知识点汇总-机器学习基础(6)

    2.6 逻辑回归与朴素贝叶斯有什么区别? 逻辑回归是判别模型, 朴素贝叶斯是生成模型。 朴素贝叶斯属于贝叶斯,逻辑...

  • 朴素贝叶斯

    朴素贝叶斯 用处:朴素贝叶斯主要解决的是而分类的问题。 为什么叫朴素贝叶斯: 因为贝叶斯分类只做最原始,最简单的假...

  • sklearn-朴素贝叶斯

    朴素贝叶斯分为三种:高斯朴素贝叶斯、多项式朴素贝叶斯、伯努利朴素贝叶斯。这三种的不同之处在于求条件概率的公式不同。...

  • 第五周 - 20180507

    朴素贝叶斯的思路及实现 一、朴素贝叶斯简介 朴素贝叶斯法(Naive Bayes)是基于贝叶斯定理与特征条件独立假...

网友评论

      本文标题:朴素贝叶斯

      本文链接:https://www.haomeiwen.com/subject/ebnflqtx.html