【问题标题】:What does this Naive Bayes code from a textbook represent?教科书中的这个朴素贝叶斯代码代表什么?
【发布时间】:2019-08-23 07:36:01
【问题描述】:

我现在正在从教科书 (link) 中学习数据科学,但我不太明白代码试图说明什么。

代码显示了朴素贝叶斯的工作原理,但本书没有说明发生了什么,也没有很好地解释。 我不理解的部分是最后一部分。打印结果代表什么? 这似乎是概率,但我不太明白如何看待这个。

为什么要取最后 8 个概率?这有什么原因吗?

我稍微更改了代码以在 Spyder 上使用它,因此它与链接不同。

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()

from sklearn.datasets import make_blobs
x, y = make_blobs(100, 2, centers=2, random_state=2, cluster_std=1.5)
plt.scatter(x[:, 0], x[:, 1], c=y, s=50, cmap='RdBu')

from sklearn.naive_bayes import GaussianNB
model = GaussianNB()
model.fit(x, y)

rng = np.random.RandomState(0)
xnew = [-6, -14] + [14, 18] * rng.rand(2000, 2)
ynew = model.predict(xnew)

plt.scatter(x[:, 0], x[:, 1], c=y, s=50, cmap='RdBu')
lim = plt.axis()

plt.scatter(xnew[:, 0], xnew[:, 1], c=ynew, s=20, cmap='RdBu', alpha=0.1)
plt.axis(lim)

yprob = model.predict_proba(xnew)
print(yprob[-8:].round(2))

打印结果是:

[[0.89 0.11]
 [1.   0.  ]
 [1.   0.  ]
 [1.   0.  ]
 [1.   0.  ]
 [1.   0.  ]
 [0.   1.  ]
 [0.15 0.85]]

有什么帮助吗?

【问题讨论】:

    标签: python naivebayes


    【解决方案1】:

    训练模型的重点是预测 y (yprob) 的可能分类到给定 x 值的两个类别之一。

    所以首先你用model.fit(x, y)训练你生成的模型。

    然后使用此模型,您可以使用model.predict_proba(xnew) 预测 y 的类别。

    在这里,您正在预测 y 落入 (binary classification) 两个类别之一的概率,其中 2000 个随机生成的 x 值。在现实世界中,x 来自真实数据源。

    这一行只打印了最后 8 个 x 值的 y 类概率。

    print(yprob[-8:].round(2))

    请注意,例如,每个输出都是一个 2 项列表 - 第一个输出是 [0.89 0.11]。这意味着对于给定的 x 值,它属于第一类的概率为 89%,而属于第二类的概率仅为 11%——两者的概率加起来为 100%

    【讨论】:

      【解决方案2】:

      代码工作流程是

      1. 使用数据集训练模型(高斯朴素贝叶斯)
      2. 预测 y 落入 x 的 2000 个随机值的类别的概率(使用经过训练的模型估计最大似然)

      所有的绘图和打印都只是为了可视化。它只是表示每个事件 y 落入 A 类和 B 类的概率(步骤 2 的结果)。

      【讨论】:

        猜你喜欢
        • 2020-01-01
        • 2012-05-23
        • 2012-02-21
        • 2011-12-28
        • 2012-09-23
        • 2012-11-28
        • 2017-11-13
        • 2018-02-06
        • 2013-11-24
        相关资源
        最近更新 更多