【发布时间】:2021-12-30 15:18:22
【问题描述】:
我有一个 shape(700000,20) 的数据集,我想对其应用 KNN。
但是测试需要很长时间,请专家帮忙告诉我如何减少 KNN 预测时间。
有没有像 GPU-KNN 之类的东西。请帮忙告诉我。
下面是我正在使用的代码。
import os
os.chdir(os.path.dirname(os.path.realpath(__file__)))
import tensorflow as tf
import pandas as pd
import numpy as np
from joblib import load, dump
import numpy as np
from scipy.spatial import distance
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import classification_report
from dtaidistance import dtw
window_length = 20
n = 5
X_train = load('X_train.pth').reshape(-1,20)
y_train = load('y_train.pth').reshape(-1)
X_test = load('X_test.pth').reshape(-1,20)
y_test = load('y_test.pth').reshape(-1)
#custom metric
def DTW(a, b):
return dtw.distance(a, b)
clf = KNeighborsClassifier(metric=DTW)
clf.fit(X_train, y_train)
#evaluate
y_pred = clf.predict(X_test)
print(classification_report(y_test, y_pred))
【问题讨论】:
-
你真的分析过你的代码吗?是的,KNN 通常很慢。不过,我敢打赌,大部分计算时间都花在了评估您的
DTW指标上...... -
如果我在不使用 BTW 度量的情况下尝试使用欧几里得距离度量仍然需要更多时间。
-
“更多时间”与什么相比?无论如何,如果您查看
KNeighborsClassifier的选项,那么您显然应该测试将algorithm显式设置为'ball_tree'或'kd_tree'和n_jobs到您的核心数量。 -
我再次尝试了正常距离,它似乎运行良好......是的 DTW 指标花费了太多时间。
标签: python time-series classification knn