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 索引!
我用 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 索引!