【问题标题】:finding KNN for larger Dataset为更大的数据集寻找 KNN
【发布时间】:2021-02-24 17:54:39
【问题描述】:

我正在尝试为包含 25000 行的数据集 A 找到最近的邻居,为此,我正在尝试将数据集 B 拟合到 KNN 模型由 1300 万行组成,目标是找到与数据集 A

相似的 s 25000 行数据集 B
model_knn= NearestNeighbors(n_neighbors=10, algorithm = 'kd_tree')
model_knn.fit(B)

knn_distances,knn_indices=model_knn.kneighbors(A.values, n_neighbors=10)

在这里,当我将 B 拟合到 600000 行时,没有问题

model_knn.fit(knn_test_pd[:600000])

超过 600000 模型不拟合,没有错误,但拟合 600000 需要 2 秒超过 600000 所需时间,我拟合的数据是缩放数据

我尝试拆分数据框并对其进行拟合,这是正确的方法吗?那么模型也需要数小时才能适应

splited_B=np.array_split(B, 113)
model_knn= NearestNeighbors(n_neighbors=10, algorithm = 'kd_tree')
for df in splited_B:
    model_knn.fit(df)

我应该怎么做才能让这些大数据适合knn?或者有没有其他类似 knn 的模型可以接受大数据集?

【问题讨论】:

  • 请不要引用格式您的文本(已编辑)。
  • “不合适”是什么意思?你有什么错误吗?请编辑和更新您的帖子以澄清。
  • 没有错误,但拟合 600000 需要 2 秒超过 600000 小时数,并且数据是缩放数据

标签: python pandas machine-learning scikit-learn knn


【解决方案1】:

您可以将数据集 B 拆分为 600,000 行块,从而为您提供 22 个数据集(分别为 22 个 KNN 模型)。

在预测中,对于 A 中的每一行,在这 22 个模型中的每一个上找到最近的数据点;这为您提供了 22 个数据点。最后,在这 22 个点中寻找最近的点。

【讨论】:

    【解决方案2】:

    Scikit-learn 可以处理较小的数据集,并且仅限于您的主内存来加载和处理数据。如果你想在更大的数据集上执行机器学习,我建议使用 Apache Spark,它设计为在多个节点上运行,超越你目前面临的限制。 spark-sklearn 将帮助您完成工作。另一种选择是使用随机抽样。获取较小的数据样本来代表您的完整数据集并对其执行操作。您甚至可以将样本分成更小的样本并在它们上运行您的算法并比较每个样本的结果。随机抽样见this solution。

    【讨论】:

      猜你喜欢
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多