Я построил модель NearestNeighbor с помощью Scikit-learn . Кластеры кажутся прекрасными, если получить кластеры методом колен сразу после подбора модели.
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
Набор данных для обучения / тестирования выглядит следующим образом
feature1 | feature2 | feature3
0 1 1
1 1 1
0 0 0
Почему мы обучаем и сохраняем модель, если ее нельзя использовать после с другим набором данных? Это ожидаемое поведение модели или мне что-то не хватает?