【问题标题】:Nearest Neighbors Classification in scitkit-learnscikit-learn 中的最近邻分类
【发布时间】:2015-12-20 01:33:52
【问题描述】:

我正在尝试理解和使用this code from the scikit learn site

我把 X 改成了

X = [[ 170,  70 ], [ 180,  80  ], [ 190,  90 ], [ 200,  100], [ 172,  80 ], [ 182,  72 ], [ 185,  95 ], [ 184,  74 ], [ 184,  80 ], [ 177,  67 ], [ 177,  77 ], [ 177,  87 ],
     [ 190,  85 ], [ 190,  86  ], [ 190,  97 ], [ 190,  82 ], [ 190,  84 ], [ 195,  85 ], [ 185,  92 ], [ 185,  77 ], [ 183,  87 ], [ 183,  77 ], [ 183,  78 ], [ 182,  88 ],
     [ 177,  78 ], [ 177,  82  ], [ 176,  70 ], [ 172,  65 ], [ 170,  62 ], [ 170,  68 ], [ 173,  65 ], [ 173,  64 ], [ 168,  71 ], [ 169,  62 ], [ 174,  80 ], [ 173,  65 ],
     [ 180,  100], [ 180,  60  ], [ 170,  90 ], [ 170,  55 ], [ 180,  68 ], [ 175,  92 ], [ 168,  100], [ 177,  110], [ 180,  110], [ 186,  65 ], [ 186,  145], [ 190,  120],
     [ 175,  55 ], [ 182,  65  ], [ 195,  70 ], [ 173,  90 ], [ 175,  50 ], [ 182,  130], [ 183,  65 ], [ 150,  82 ], [ 155,  80 ], [ 200,  70 ], [ 185,  110], [ 176,  100]]

这是作为训练数据集的身高和体重。

我也把 y 改成了

y = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

这是可以接受的——不可以接受的,我的两个班。

如何测试像 [140, 85] 这样的新案例,看它是 1 还是 0?

Z = clf.predict(np.c_[xx.ravel(), yy.ravel()]) 

在示例中使用与训练数据相同的数据,其计算基于训练数据集的最小值、最大值和步长,这令人困惑。请帮忙。

【问题讨论】:

  • 我有点困惑,你想在这里做什么?你能提供更多的上下文吗?这会给你一个错误吗?你的最终目标是什么?

标签: python machine-learning scikit-learn


【解决方案1】:

您链接的示例非常复杂,因为它还创建了您在网站上看到的情节。

没有情节就这么简单

result = clf.predict([140,85])

获取新样本的结果 [140, 85]。

总而言之,您真正需要的只是以下内容:

from sklearn import neighbors

# Define your X and y here

clf = neighbors.KNeighborsClassifier(5)
clf.fit(X, y)
result = clf.predict([140,85])

分类器的参数(在我的示例 5 中)描述了预测应该考虑多少个邻居。玩弄这个数字,直到你得到一个不错的结果。

【讨论】:

  • 谢谢你,罗宾,但我怎样才能绘制呢?
  • @jimakos17 你知道哪一行发生了什么?他们基本上创建了一个包含所有数据点的网格并预测网格中每个点的目标类。然后他们用预测颜色绘制网格。
  • 我创建的 [140,85] 的点应该在网格中,特别是在红色的一侧。我怎样才能在网格中包含你所命名的结果?我想在 plt.pcolormesh(xx, yy, Z, cmap=cmap_light) 之后的结果 = clf.predict([140,85]) 谢谢 Robin!
  • 使用 plt.scatter 函数绘制点。要绘制 [140, 85] 点,您可以使用 plt.scatter(140,85, c=result, cmap=cmap_bold) 其中结果是该点的预测。 (并且示例中定义了cmap_bold)
  • 感谢 Robin 的及时、清晰和简洁的回答。非常感谢!!!
猜你喜欢
  • 2018-09-06
  • 2021-11-04
  • 2016-09-26
  • 2017-05-02
  • 2019-09-10
  • 2020-10-31
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多