Модель KNN возвращает одинаковые расстояния с любым k - PullRequest
1 голос
/ 10 октября 2019

Я пытаюсь создать базовую систему рекомендаций с помощью knn. Но с помощью следующего кода он всегда возвращает одинаковые расстояния с разными k с моделью. Почему он возвращает такие же результаты?

df_ratings = pd.read_csv('ml-1m/ratings.dat', names=["user_id", "movie_id", "rating", "timestamp"],
            header=None, sep='::', engine='python')
matrix_df = df_ratings.pivot(index='movie_id', columns='user_id', values='rating').fillna(0).astype(bool).astype(int)

um_matrix = scipy.sparse.csr_matrix(matrix_df.values)

# knn model
model_knn = NearestNeighbors(metric='cosine', algorithm='brute', n_neighbors=17, n_jobs=-1)
model_knn.fit(um_matrix)

distances, indices = model_knn.kneighbors(um_matrix[int(movie)], n_neighbors=100)

1 Ответ

0 голосов
/ 11 октября 2019

Ваша модель возвращает те же расстояния для любого K, потому что ваш K не меняет расстояния между вашими точками данных.

K-Nearest-Neigbours просто находит ближайшие соседние точки в вашей функции пробел , K действительно сколько из них вы ищете, а не как далеко они удалены друг от друга.

Простой примерbe

X = [[0,0],[0,5],[5,0],[5,5][4,4]] 

Как график рассеяния, он выглядит как

, поэтому ваша матрица расстояний определяет расстояния между всеми точками:

   [0,0]:  [0.        , 5.        , 5.        , 5.65685425, 7.07106781],
   [0,5]:  [0.        , 4.12310563, 5.        , 5.        , 7.07106781],
   [5,0]:  [0.        , 4.12310563, 5.        , 5.        , 7.07106781],
   [5,5]:  [0.        , 1.41421356, 5.        , 5.        , 7.07106781],
   [4,4]:  [0.        , 1.41421356, 4.12310563, 4.12310563, 5.65685425]]

В первом ряду показаны расстояния от точки [0,0] до любой другой точки

  • до ее 0
  • до [0,5]расстояние составляет 5
  • до [5,0], расстояние составляет 5
  • до [4,4], его (в моем случае евклидово расстояние) квадратный корень 4 * 4 + 4 * 4итак 5.65 ..
  • до [5,5] евклидово расстояние равно 7.07106781

Поэтому независимо от того, сколько точек вы ищете ( K ) расстояния всегда одинаковы.

...