KNN - 我如何加快速度?

时间:2015-08-10 20:38:03

标签: python ipython-notebook knn

我有大约65个特征,450k观测值和不平衡分类响应变量Y(~5%真实,2个状态)。这已通过train_test_split分为{Xtrain,ytrain}(10%)和{Xtest,ytest}(90%)。

我正在尝试为分类器KNN调整N_neighbors hyperparamater。我正在使用gridsearchCV和StratifiedKfoldCV,但放弃了尝试,因为循环花了这么长时间(超过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方法不会接近这段时间。

更新时间:11AUG15 - 显然有一些奇怪的锣:

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

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

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