使用DataFrame对象时,plot_2d_separator会抱怨(引发AttributeError)

时间:2018-12-17 10:46:41

标签: python pandas machine-learning scikit-learn

我收集了很少的数据点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的参数及其类型是否正确?

谢谢。

2 个答案:

答案 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()

enter image description here

答案 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)

尝试