首页 > 解决方案 > 带有 sklearn 的 ML:KNeighborRegressor 拟合函数卡在大数据库上

问题描述

我已经使用 sklearn 工具有一段时间了,但我现在遇到了这个奇怪的问题。我只是想用 sklearn 构建一个 KNN 回归器,但是执行需要很长时间,并且在调试时看起来 fit 函数的执行需要很长时间。我应该提到数据集很大(约 25,000 条记录,具有 10 个特征),但仍然 - 我现在等了一个小时,但没有结果。

什么可能导致这种情况?

相关的代码:

 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 42)
regressor = neighbors.KNeighborsRegressor(n_neighbors = n, algorithm = algorithm, weights = weights)
regressor.fit(X_train, y_train)
y_pred = regressor.predict(X_test)
train_score = regressor.score(X_train, y_train)
test_score = regressor.score(X_test, y_test)

标签: pythonscikit-learnnearest-neighbor

解决方案


这就是 KNN 的本质。算法时间复杂度是 KNN 是O(nd)其中 n 是数据点的数量 & d 是维度(在你的情况下n = 25k, d = 10

KNN 将考虑所有数据点并选择K最接近的邻居。因此,如果您的数据很大,则需要更多时间。K是超参数,您可以使用GridSearchCVRandomizedSearchCV对其进行调整

您拥有的选项:

  1. 缩减数据(即,将数据点的数量从 25k 减少到 15K)
  2. 增加系统内存大小和处理器速度或在云中运行 KNN
  3. 等到 KNN 完成
  4. 如果您有延迟限制,请不要使用 KNN

您也可以尝试使用 RBF 内核的SVM,因为它是 KNN 的一个很好的近似值,并且需要更少的时间


推荐阅读