【发布时间】:2016-06-19 02:05:00
【问题描述】:
我这里有一个函数,可以可视化某个分类器(如逻辑回归或简单的感知器模型)所做的分类。但我没有得到几件事:
X 有 n 个示例,只有 2 个特征。
- 为什么我必须使用 xx1.ravel() 和 xx2.ravel() 然后为分类器.predict 转置整个数组?为什么我不能使用原始维度简单地预测结果?
2.为什么我需要将 Z 重新整形回原来的 xx1 形状?
为什么需要创建网格网格来绘制散点图?网格中的特定点是否像代表网格上某个点的“像素”一样?为什么还需要这个?
什么是 idx 中的 idx 值,枚举中的 cl(np.unique(y)),当我使用 unique 时得到的只是结果的唯一 id?
散点函数中c = cmap(idx)有什么用?为什么 cmap 可以接受参数?
对于后面可能不符合主题问题的问题,我深表歉意。 代码取自 Python 机器学习一书。
def plot_decision_regions(X, y, classifier, test_idx = None, resolution = 0.002):
#Setup marker generator and color map
markers = ('s', 'x', 'o', '^', 'v')
colors = ('red','blue','green','gray','cyan')
cmap = ListedColormap(colors[:len(np.unique(y))])
#MESHGRID - plot decision surface
x1_min, x1_max = X[:, 0].min(), X[:, 0].max()
x2_min, x2_max = X[:, 1].min(), X[:, 1].max()
xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max, resolution))
# print 'meshgrid:', xx1, xx2
#CLASSIFIER PREDICT
Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
Z = Z.reshape(xx1.shape)
plt.contourf(xx1, xx2, Z, alpha = 0.4, cmap=cmap)
plt.xlim(xx1.min(), xx1.max())
plt.ylim(xx2.min(), xx2.max())
for idx, cl in enumerate(np.unique(y)):
plt.scatter(x = X[y == cl, 0], y = X[y == cl, 1], alpha = 0.8, c = cmap(idx), marker = markers[idx], label =cl)
#highlight test samples
if test_idx:
XTest, yTest = X[test_idx, :], y[test_idx]
plt.scatter(XTest[:,0], XTest[:,1], c = '', alpha = 1.0, linewidth = 1, marker = 'o', s = 55, label = 'test set')
【问题讨论】:
-
“原始尺寸”是什么意思?
-
您的问题 3-5 与您的问题的标题没有真正的关系,可能应该单独提出。 (问题 3 没有意义,因为这段代码没有使用 meshgrid 作为散点图。)
标签: python machine-learning scikit-learn data-visualization