为了说明正在发生的事情,这里是一个使用虹膜数据集的2个第一个特征(Sepal Length和Width)的示例。
首先,从给定数据(带黑轮廓的点)计算回归。然后,对于覆盖数据的网格的每个点,计算预测(网格中的小点)。注意,给定和预测值只是数字0,1和2.(在问题中,仅使用0和1。)
最后一步是使用这些网格点作为输入以搜索具有相等预测值的区域的轮廓。因此,contour line在具有值0的网格点和具有值1之间的网格点之间绘制。contourf 987654324 contourf带有均匀颜色的行之间的区域。
作为网格点和它们的预测没有在问题的情节中可视化,突然的轮廓更难了解。
from matplotlib import pyplot as plt
import numpy as np
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
X, y = load_iris(return_X_y=True)
X = X[:, :2]
clf = LogisticRegression(random_state=0).fit(X, y)
x2, y2 = np.meshgrid(np.linspace(X[:, 0].min()-.5, X[:, 0].max()+.5, 20),
np.linspace(X[:, 1].min()-.5, X[:, 1].max()+.5, 20) )
pred = clf.predict(np.c_[x2.ravel(), y2.ravel()])
cmap = plt.get_cmap('Set1', 3)
plt.scatter(x2.ravel(), y2.ravel(), c=pred, s=10, cmap=cmap, label='Prediction on grid')
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=cmap, ec='black', label='Given values')
plt.contourf(x2, y2, pred.reshape(x2.shape), cmap=cmap, alpha=0.4, levels=2, zorder=0)
plt.legend(ncol=2, loc="lower center", bbox_to_anchor=(0.5,1.01))
plt.show()
ps:关于pred.reshape(x2.shape):
-
@ 987654327和
y2是给出每个网格点的x和y坐标的阵列。 x2和y2组织为2d阵列,类似于它们所代表的网格(示例中的20x020)。
clf.predict 987654331 @需要输入阵列为1D。为此,使用了.ravel()在该示例中,ravel将20x20阵列转换为400的1d阵列。
-
pred = clf.predict是相应的1D阵列(400元素)。
-
pred.reshape(x2.shape)转换pred与x2和y2(再次20x20)。
- 请注意,
scatter希望其参数以1D格式,只需单独查看每个点。 contourf另一方面,以2D格式的参数为单位,因为它需要知道网格如何组织。