【问题标题】:How can I select L neighbors如何选择 L 个邻居
【发布时间】:2014-04-28 00:53:48
【问题描述】:

我想知道如何选择特定点的最佳 L 个邻居。就像说我需要选择 5 个邻居。有没有要改的参数。

我想让它选择 L 个点,其中:L = SQRT[数据集中的点数]

我有一个庞大的数据集,所以我可能会发现很多点彼此靠近,而其他点则远离它们。

L,要考虑的邻居数量,可以任意选择,或者 通过交叉验证。随着更多的训练数据,L 可以更大,因为 训练数据在底层空间 X 中更密集。 分类中的不连续或非线性动力学,K应该是 更小,以捕捉这些更局部的波动。

 NearestNeighbors(algorithm='auto', leaf_size=30, n_neighbors=5, p=2,
             radius=1.0, warn_on_equidistant=True)

【问题讨论】:

  • 你的代码不能这样工作。请在列表元组周围添加方括号,使其成为列表列表,并传递给np.array。此外,请让您的问题更准确,并告诉我们您尝试了什么以及出了什么问题。
  • “我想知道如何选择一个特定点的最优L个邻居。就像说我需要选择5个邻居。有什么参数可以改变。”
  • 你为什么要举一个例子,a)不起作用,b)不代表你试图解决的问题。到目前为止,您尝试了什么,问题出在哪里?
  • 我想使用 Sklearn NearestNeighbors() 那么我怎么知道让 NearestNeighbors 只选择前 L 个邻居(例如 5 个第一个邻居)?如果有人对 Scikit 有经验,这是一个简单的问题
  • NearestNeighbors 对象的构造正是为了做到这一点(并在半径内查找数据点)。这就是为什么我对问题出在哪里感到困惑。请尝试运行我的答案中提供的代码,看看它是否有效。然后在您的数据上使用它,看看这是否会产生问题。

标签: python scikit-learn


【解决方案1】:

我想让它选择 L 个点,其中:L = SQRT[数据集中的点数]

除非您自己计算样本数及其平方根,否则这是不可能的。您只能将整数作为n_neighbors 传递。

考虑可变数量的邻居的唯一方法是使用RadiusNeighbors{Classifier,Regressor},它采用距离截断而不是k参数。

【讨论】:

  • 简单而伟大的答案。
  • 很好的答案让我理解了这个问题。谢谢。
【解决方案2】:

请尝试以下示例:

 import numpy as np
 rng = np.random.RandomState(42)
 from sklearn.neighbors import NearestNeighbors
 nnbrs = NearestNeighbors(n_neighbors=5)
 points = rng.randn(500, 3)
 nnbrs.fit(points)

 point_of_interest = np.array([0, 1, 0])
 distances, neighbor_indices = nnbrs.kneighbors(point_of_interest)
 neighbors = points[neighbor_indices]

这是否获得了预期的结果?如果存在计算时间/内存问题,您应该在稀疏矩阵数据上尝试此操作并使用algorithm=(请参阅文档)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    相关资源
    最近更新 更多