Nearest Neighbors k neighbors method return 不同样本量的不同输出

Nearest Neighbor's kneighbors method return different output for different sample sizes

我用 Scikit-learn 构建了一个 NearestNeighbor 模型。在拟合模型后使用 kneighbors 方法获得聚类时,聚类看起来很好。

    model = NearestNeighbors(n_jobs=-1, n_neighbors=5).fit(np.array(df))
    distance, indices = model.kneighbors(np.array(df))  ## one of the distances is always 0, as expected. And clusters are acceptable.

但是当我保存模型然后读取火车数据时,输出是不可接受的。

     model = pickle.load(f)
     distance, indices = model.kneighbors(np.array(df))  ## same dataset, average/bad results. None of distances are 0.

而且,最大的问题是,索引和距离会根据 df 大小而变化。

      model = pickle.load(f)
      df_1 = df[df["id"] == "1"] # Trying for just one user
      distance, indices = model.kneighbors(np.array(df_1))  ## one row, same output for every user.
      df_2 = df[df["id"] == "2"]
      distance, indices = model.kneighbors(np.array(df_2)) ## same output

      df = df[df["id"] == "2" | df["id"] == "1"]
      distance, indices = model.kneighbors(np.array(df)) ## different output for both

Train/test 数据集如下所示

feature1 | feature2 | feature3
   0          1          1
   1          1          1
   0          0          0

如果在使用不同的数据集后无法使用,为什么我们要训练和保存模型?这是模型的预期行为还是我遗漏了什么?

好吧,我犯了一个可怕的错误,我想分享问题和解决方案。很简单,但可能很难看出来。

我阅读文档一千遍,然后注意到他们使用 np.array 而不是 DataFrame。好吧,我使用 Dataframe 进行预测,并将列随机化。所以,它没有正常工作。

如果你遇到这样的问题,请注意 numpy 索引!