KNN 与 scikit-learn:如何使用 NaN 欧几里得度量获得距离矩阵?

问题描述 投票:0回答:1

我在缺少值的数据集上使用 sklearn.impute.KNNImputer。我想尝试几个邻居。

要实例化 KNNImputer,应指定邻居的数量。然后使用

.fit()
方法计算距离矩阵。我可以通过对多个邻居进行插补来节省计算时间在我计算了距离矩阵之后。

如何使用 sklearn 计算不拟合的距离矩阵?

下面是玩具示例。运行大约需要 2 分钟,但每次插补需要大约 120 毫秒。如果我有距离矩阵,我可以更快地执行各种插补。

import time import numpy as np import matplotlib.pyplot as plt from sklearn.impute import KNNImputer np.random.seed(666) nb_lines = 2000 nb_columns = 8 miss_rate = 0.1 data = np.random.normal(size=(nb_lines, nb_columns)) miss_mask_temp = np.random.uniform(size=(nb_lines, nb_columns)) miss_mask = (miss_mask_temp < miss_rate) nb_missing = np.sum(miss_mask) data2 = np.copy(data) data2[miss_mask] = np.nan nb_neighbours = np.arange(1, 1001) store_rmse = np.zeros(shape=nb_neighbours.shape) store_time = np.zeros(shape=nb_neighbours.shape) for n in range(nb_neighbours.shape[0]): if (n+1)%50==0: print(n+1, end=" ", flush=True) if (n+1)%500==0: print() t1 = time.time() nb_n = nb_neighbours[n] myKNN = KNNImputer(n_neighbors=nb_n, weights="uniform", metric="nan_euclidean") myKNN.fit(data2) impute_knn = myKNN.transform(data2) rmse = np.sqrt(np.sum(((data - impute_knn) ** 2) * miss_mask) / nb_missing) store_rmse[n] = rmse t2 = time.time() store_time[n] = t2 - t1
    
python scikit-learn nan knn imputation
1个回答
2
投票
我要回答我自己的问题:我们想使用

sklearn.metrics.pairwise.nan_euclidean_distances

。
看这里:
https://scikit-learn.org/stable/modules/ generated/sklearn.metrics.pairwise.nan_euclidean_distances.html

© www.soinside.com 2019 - 2024. All rights reserved.