教科书中的这个朴素贝叶斯代码代表什么?

What does this Naive Bayes code from a textbook represent?

我现在正在通过教科书学习数据科学 (link),但我不太明白代码要表达的意思。

代码展示了朴素贝叶斯的工作原理,但书中没有说明发生了什么,也没有很好地解释。 我不理解的部分是最后一部分。打印结果代表什么? 好像是概率,但是我不太明白怎么看。

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

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

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]]

有什么帮助吗?

训练模型的全部要点是针对给定的 x 值预测 y (yprob) 可能 class 化为两个 class 之一。

因此,首先训练使用 model.fit(x, y) 生成的模型。

然后使用此模型,您可以使用 model.predict_proba(xnew).

预测 y 的 class

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

此行仅打印 x 的最后 8 个值的 y class 的概率。

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

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

代码工作流程为

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

所有的情节和印刷品只是为了形象化。它只是表示对于每个事件,y 落入 class A 和 B(步骤 2 的结果)的概率。