如何让knn更快?
How to make knn faster?
我有一个形状为 (700000,20) 的数据集,我想对其应用 KNN。
但是在测试上它确实需要很长时间,请专家帮助让我知道如何减少 KNN 预测时间。
是否有类似 GPU-KNN 或 something.Please 的帮助让我知道。
下面是我使用的代码。
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))
我可以建议减少特征的数量,我认为它是数据集形状中的 20 个特征,这意味着你有 20 个维度。
您可以使用 PCA(主成分分析)减少特征数量,如下所示:
from sklearn.decomposition import PCA
train_data_pca = PCA(n_components=10)
reduced_train_data = train_data_pca.fit_transform(train_data)
此代码会将小数减少到 10 而不是 20
你的代码中的第二个问题,我看到你没有在分类器中使用第 K 个邻居值,它应该如下所示:
clf = KNeighborsClassifier(n_neighbors=n, metric=DTW)
度量 dtw 花费太多时间,而简单 knn 运行良好。
我有一个形状为 (700000,20) 的数据集,我想对其应用 KNN。
但是在测试上它确实需要很长时间,请专家帮助让我知道如何减少 KNN 预测时间。
是否有类似 GPU-KNN 或 something.Please 的帮助让我知道。
下面是我使用的代码。
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))
我可以建议减少特征的数量,我认为它是数据集形状中的 20 个特征,这意味着你有 20 个维度。
您可以使用 PCA(主成分分析)减少特征数量,如下所示:
from sklearn.decomposition import PCA
train_data_pca = PCA(n_components=10)
reduced_train_data = train_data_pca.fit_transform(train_data)
此代码会将小数减少到 10 而不是 20
你的代码中的第二个问题,我看到你没有在分类器中使用第 K 个邻居值,它应该如下所示:
clf = KNeighborsClassifier(n_neighbors=n, metric=DTW)
度量 dtw 花费太多时间,而简单 knn 运行良好。