教科书中的这个朴素贝叶斯代码代表什么?
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%
代码工作流程为
- 使用数据集训练模型(高斯朴素贝叶斯)
- 预测 x 的 2000 个随机值的 y 落入 classes 的概率(使用训练模型估计最大似然)
所有的情节和印刷品只是为了形象化。它只是表示对于每个事件,y 落入 class A 和 B(步骤 2 的结果)的概率。
我现在正在通过教科书学习数据科学 (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)
.
在这里,对于 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%
代码工作流程为
- 使用数据集训练模型(高斯朴素贝叶斯)
- 预测 x 的 2000 个随机值的 y 落入 classes 的概率(使用训练模型估计最大似然)
所有的情节和印刷品只是为了形象化。它只是表示对于每个事件,y 落入 class A 和 B(步骤 2 的结果)的概率。