KNN 模型 returns 与任意 k 的距离相同
KNN model returns same distances with any k
我正在尝试使用 knn 创建一个基于项目的基本推荐系统。但是使用下面的代码,它总是 returns 与模型的不同 k 的相同距离。为什么 returns 结果相同?
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)
您的模型 returns 任何 K 的距离都相同,因为您的 K 不会改变数据点之间的距离。
K-Nearest-Neigbours 只是在您的 特征 space 中找到一个点的最近邻点,K 确实指定 多少 个您要查找的对象,而不是 他们彼此相距多远。
一个简单的例子是
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] 它的(在我的例子中是 euklidian 距离)的平方根
4*4+4*4 所以 5.65..
- 到[5,5]的欧氏距离是7.07106781
因此无论您要查找多少个点 (K),距离总是相同的。
我正在尝试使用 knn 创建一个基于项目的基本推荐系统。但是使用下面的代码,它总是 returns 与模型的不同 k 的相同距离。为什么 returns 结果相同?
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)
您的模型 returns 任何 K 的距离都相同,因为您的 K 不会改变数据点之间的距离。
K-Nearest-Neigbours 只是在您的 特征 space 中找到一个点的最近邻点,K 确实指定 多少 个您要查找的对象,而不是 他们彼此相距多远。
一个简单的例子是
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] 它的(在我的例子中是 euklidian 距离)的平方根 4*4+4*4 所以 5.65..
- 到[5,5]的欧氏距离是7.07106781
因此无论您要查找多少个点 (K),距离总是相同的。