【发布时间】:2017-11-30 13:00:09
【问题描述】:
我有一个关于我在一本书中找到的代码被剪断的问题。 作者创建了两类样本点。接下来,作者学习了一个模型并将 SVC 模型绘制到“斑点”上。 这是截取的代码:
# create 50 separable points
X, y = make_blobs(n_samples=50, centers=2,
random_state=0, cluster_std=0.60)
# fit the support vector classifier model
clf = SVC(kernel='linear')
clf.fit(X, y)
# plot the data
fig, ax = plt.subplots(figsize=(8, 6))
point_style = dict(cmap='Paired', s=50)
ax.scatter(X[:, 0], X[:, 1], c=y, **point_style)
# format plot
format_plot(ax, 'Input Data')
ax.axis([-1, 4, -2, 7])
# Get contours describing the model
xx = np.linspace(-1, 4, 10)
yy = np.linspace(-2, 7, 10)
xy1, xy2 = np.meshgrid(xx, yy)
Z = np.array([clf.decision_function([t])
for t in zip(xy1.flat, xy2.flat)]).reshape(xy1.shape)
line_style = dict(levels = [-1.0, 0.0, 1.0],
linestyles = ['dashed', 'solid', 'dashed'],
colors = 'gray', linewidths=1)
ax.contour(xy1, xy2, Z, **line_style)
结果如下:
我现在的问题是,为什么我们要创建“xx”和“yy”以及“xy1”和“xy2”?因为实际上我们想要显示 X 和 y 数据的 SVC“函数”,如果我们将 xy1 和 xy2 以及 Z(也是用 xy1 和 xy2 创建的)传递给 meshgrid 函数来绘制网格网格,则没有连接到学习 SVC 模型的数据...不是吗?
谁能给我解释一下,或者推荐一个如何更容易解决这个问题的建议?
感谢您的回答
【问题讨论】:
-
你查看
contour的文档了吗?这是等高线图的常见输入。线条不是手动绘制的,轮廓在这里需要注意,因此这种设置。 -
@sascha,谢谢。是的,我已经检查了轮廓的文档。但是为什么我们使用 xx 和 xy 分别使用 xy1 和 xy2 而不是 X 和 y?我的意思是 xy1 和 xy2 是从以下创建的人工数组: xx = np.linspace(-1, 4, 10) yy = np.linspace(-2, 7, 10) xy1, xy2 = np.meshgrid(xx, yy) 但是这个数字与我们从中创建“blob”的数据没有任何共同之处。那么我们为什么要使用它们呢?
标签: matplotlib scipy scikit-learn