我一直在调整这个例子以使用 20 个功能而不是 2 个。我已经让大部分工作正常工作,但它在这一行给了我一个错误:
Z = clf.predict_proba(np.c_[xx.ravel(), yy.ravel()])
predict_proba的文档只讨论了 x 的输入,而不是 x 和 y,此外我们还有 ravel() 在这里进行。所以想知道发生了什么?我遇到的错误是在尝试进行连接时发生的:
338 res = _nx.concatenate(tuple(objs), axis=self.axis)
339 return self._retval(res)
340
ValueError: all the input array dimensions except for the concatenation axis must match exactly
但是我已经检查过 xx(测试输入)和 yy(测试标签)中的行数是否相同。
该示例似乎工作正常。
关键是这一行:y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
。
它表明这里的 yy 与您可能认为的标签无关,但实际上是第二个维度。所以串联代码只是简单地创建一个所有特征的网格,然后将其输入模型以形成预测。
更详细地:
您可以逐行浏览代码,看看会发生什么。
之前
Z = clf.predict_proba(np.c_[xx.ravel(), yy.ravel()])
如果您将 存储np.c_[xx.ravel(), yy.ravel()]
在具有名称的变量中vrb
vrb = np.c_[xx.ravel(), yy.ravel()]
然后你可以看到它是什么
vrb.shape
vrb
结果:
(61600L, 2L)
array([[ 3.3 , 1. ],
[ 3.32, 1. ],
[ 3.34, 1. ],
...,
[ 8.84, 5.38],
[ 8.86, 5.38],
[ 8.88, 5.38]])
这意味着结果np.c_[xx.ravel(), yy.ravel()]
是一个包含 61600 行(样本)和 2 个特征(列)的数组。
使用clf.predict_proba(vrb)
您预测这些样本的标签。
矩阵“vrb”必须与用于拟合分类器(训练阶段)的矩阵具有相同的“第二维”(列数)。
要测试这种用法:
X.shape
结果是:
(150L, 2L)
您可以清楚地看到训练数据 (X) 有 2 列(特征)。
如果您上传代码和数据,我可以提供更多帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句