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 - 我如何加快速度?的主要内容,如果未能解决你的问题,请参考以下文章