【问题标题】:plot_2d_separator complains when using DataFrame object (AttributeError was raised)plot_2d_separator 在使用 DataFrame 对象时抱怨(引发了 AttributeError)
【发布时间】:2019-05-17 17:20:20
【问题描述】:

我作为 DataFrame 对象收集的数据点 X 很少。 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_functionplot_2d_separator.py 中被调用

可能是什么问题?

传递给plot_2d_separator的参数及其类型是否正确?

谢谢。

【问题讨论】:

  • 看起来你用 XX 代替了 plot_2d_seperator 的 X。可能不会有重大变化

标签: python pandas machine-learning scikit-learn


【解决方案1】:

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

【讨论】:

  • 当我检查 the code 的函数 plot_2d_seperator predict_proba 时调用 decision_function... 为什么要尝试 .... 除了 ... 不起作用?
  • 它在我的最终工作正常。请检查我的更新
  • @Fadoua,你的问题解决了吗?如果它在某种程度上对您有帮助,请接受答案
【解决方案2】:
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)

试试这个

【讨论】:

  • 最好添加一些解释而不是纯代码
猜你喜欢
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
  • 2022-09-28
  • 2016-11-11
  • 2020-02-04
相关资源
最近更新 更多