使用 KNNimputer 的最佳方式?

Best way to use KNNimputer?

我想用 KNN 来估算缺失值,我用这个方法 select 最好的 K:

for i, k in enumerate(neighbors):
    knn = KNeighborsClassifier(n_neighbors=k)
    knn.fit(X_train, y_train)
    train_accurate[i] = knn.score(X_train, y_train)
    test_accurate[i] = knn.score(X_test, y_test)

然后我应用 n= 最准确的 KNNImputer。 KNNImputer 需要这个步骤还是它自己检查?如果这一步有效率,有没有短版不分裂train/test?

实际上有一种方法可以检查最佳 K,无需在训练和测试之间进行拆分。

方法是用不同的K数来研究Density,但它只是针对一个变量(我会select需要更多插补的那个)。最接近原始分布的是最好的 select.

n_neighbors = [1, 2, 3, 5, 7, 9, 20, 30]

fig, ax = plt.subplots(figsize=(16, 8))
# Plot the original distribution
sb.kdeplot(df.variableselected, label="Original Distribution")
for k in n_neighbors:
    knn_imp = KNNImputer(n_neighbors=k)
    density.loc[:, :] = knn_imp.fit_transform(datos)
    sb.kdeplot(density.variableselected, label=f"Imputed Dist with k={k}")

plt.legend()

在锯下的示例中,任何 K 都是一样准确的,但这会因数据而异