我收集了很少的数据点X作为DataFrame对象。类Y是根据X的最后一列的值构造的numpy数组。我想可视化由1、3、9最近邻居模型创建的决策边界。我使用X.values能够对数组使用Numpy方法(例如切片)。
fig, axes = plt.subplots(1, 3, figsize=(10, 3))
XX = X.values
for n_neighbors, ax in zip([1, 3, 9], axes):
clf = KNeighborsClassifier(n_neighbors=n_neighbors).fit(X, Y)
mglearn.plots.plot_2d_separator(clf, XX, fill=True, eps=0.5, ax=ax, alpha=.4)
mglearn.discrete_scatter(XX[:, 2], XX[:, 4], Y, ax=ax)
ax.set_title("{} neighbor(s)".format(n_neighbors))
ax.set_xlabel("nbpolys")
ax.set_ylabel("GB time")
我遇到以下错误:
decision_values = classifier.decision_function(X_grid)
AttributeError: 'KNeighborsClassifier' object has no attribute 'decision_function'
在decision_function
中调用 plot_2d_separator.py
可能是什么问题?
传递给plot_2d_separator
的参数及其类型是否正确?
谢谢。
答案 0 :(得分:0)
KNN本身不学习任何决策功能。因此,sklearn
实现也没有此属性。
您可以使用predict_proba代替decision_function
clf.predict_proba(x)[:, 1]
有关更多信息,请查看此example。
编辑:
from sklearn.datasets import make_blobs
from sklearn.neighbors import KNeighborsClassifier
X, y = make_blobs(centers=2, random_state=42)
clf = KNeighborsClassifier().fit(X, y)
plot_2d_separator(clf, X, fill=True)
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.show()
答案 1 :(得分:0)
flg, axes = plt.subplots(1, 3, figsize=(10,3))
for n_neighbors, ax in zip([1,3,9], axes):
clf = KNeighborsClassifier(n_neighbors).fit(X,y)
mglearn.plots.plot_2d_separator(clf, X, fill=True, eps=0.5, ax=ax, alpha=0.4)
mglearn.discrete_scatter(X[:,0], X[:,1], y, ax=ax)
ax.set_title("{} neighbor(s)" .format(n_neighbors))
ax.set_xlabel("feature 0")
ax.set_ylabel("feature 1")
axes[0].legend(loc=3)
尝试