KNN - 我如何加快速度?

Posted

技术标签:

【中文标题】KNN - 我如何加快速度?【英文标题】:KNN - How do I speed up? 【发布时间】:2015-11-02 21:45:32 【问题描述】:

我有约 65 个特征的 df、450k 观察值和不平衡的分类响应变量 Y(约 5% 正确,2 个状态)。这已通过 train_test_split 分为 Xtrain, ytrain (10%) 和 Xtest, ytest (90%)。

我正在尝试为分类器 KNN 调整 N_neighbors 超参数。我正在使用带有 StratifiedKfoldCV 的 gridsearchCV 但放弃了尝试,因为循环需要很长时间(超过 12 小时,对于 25 个 N_Neighbors 值,3 倍 CV)。

我已将原因隔离到 predict_proba 方法。这是我正在运行的当前代码的摘录,突出显示了已识别的代码:

[In]
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import roc_curve, auc, roc_auc_score, confusion_matrix

clf = KNeighborsClassifier(n_neighbors = 5)
Xtrain_Scaled = preprocessing.StandardScaler().fit_transform(Xtrain)
Xtest_Scaled = preprocessing.StandardScaler().fit_transform(Xtest)

clf.fit(Xtrain_Scaled, ytrain)
...

**y_probas_KNN = clf.predict_proba(Xtest_Scaled)[:,1]**

目前,笔记本已经在这条线上运行了 2 个多小时(现在被隔离在一个单独的单元格中)。这并不直观,因为其他分类器(逻辑回归、DecisionTreeClassifier)的 predict_proba 方法不会花费接近这个时间长度的任何地方。

2015 年 8 月 11 日更新 - 显然有什么奇怪的锣声:

对 Xtest 中的 100k 观测值运行 predict_proba(例如,Xtest[;1000,] 比在 Xtrain 上的 predict_predict proba (45k 观测值)花费更长的时间。

任何帮助表示赞赏!

【问题讨论】:

KNN 有多种实现方式,包括 kmcuda,例如,基于 GPU,速度提高 10 倍。 【参考方案1】:

450K 行对于在 Scikit-learn 中训练预测模型来说通常有点大。如果您对非响应者(保留所有响应者)进行欠采样以使数据集的行数低于 10 万行,您可能仍然会得到很好的结果。

【讨论】:

感谢您的回复。也许我不清楚 Xtrain、Xtest 的大小。 Xtrain 是 450k ~ 45k 的 10%。代码执行良好,直到它尝试计算 Xtest 的概率(nb、Xtrain、Xtest 被缩放)。什么是欠采样的最佳策略?

以上是关于KNN - 我如何加快速度?的主要内容,如果未能解决你的问题,请参考以下文章

如何让unity动画速度加快

如何加快sql查询执行速度?

Webrick 的响应速度很慢。如何加快速度?

关于如何使用 Javascript 加快页面速度的想法

如何使用资产库加快图像加载速度?

如何加快数据访问速度?