Python写一个计算数据集余弦相似度的计算函数
时间: 2024-06-11 17:06:47 浏览: 168
以下是Python实现的计算数据集余弦相似度的函数:
```python
import numpy as np
def cos_sim(a, b):
"""
计算两个向量a和b之间的余弦相似度
"""
dot_product = np.dot(a, b)
norm_a = np.linalg.norm(a)
norm_b = np.linalg.norm(b)
return dot_product / (norm_a * norm_b)
def dataset_cos_sim(data):
"""
计算数据集中每对向量之间的余弦相似度
"""
n = data.shape[0]
sim_matrix = np.zeros((n, n))
for i in range(n):
for j in range(i+1, n):
sim_matrix[i][j] = cos_sim(data[i], data[j])
sim_matrix[j][i] = sim_matrix[i][j]
return sim_matrix
```
函数`cos_sim`用于计算两个向量之间的余弦相似度,`dataset_cos_sim`函数则用于计算数据集中每对向量之间的余弦相似度,返回一个相似度矩阵。函数中用到了numpy库提供的向量点乘和向量范数计算函数。
相关问题
基于物品的协同过滤使用余弦相似度电影推荐系统的Python代码,使用MovieLens数据集
好的,以下是基于物品的协同过滤使用余弦相似度电影推荐系统的Python代码,使用MovieLens数据集:
```python
import pandas as pd
import numpy as np
# 读取数据集
ratings = pd.read_csv('ratings.csv')
movies = pd.read_csv('movies.csv')
# 合并数据集
ratings = pd.merge(ratings, movies, on='movieId')
# 计算电影评分矩阵
movieRatings = ratings.pivot_table(index=['title'], columns=['userId'], values='rating')
# 填充缺失值
movieRatings = movieRatings.fillna(0)
# 计算余弦相似度
from sklearn.metrics.pairwise import cosine_similarity
movieSimilarity = cosine_similarity(movieRatings.T)
# 定义函数,返回与目标电影最相似的K个电影
def topKSimilarMovies(movie, K):
simMovies = movieSimilarity[movie]
simMovies = simMovies.argsort()[::-1]
return simMovies[1:K+1]
# 定义函数,根据最相似的K个电影推荐给用户
def recommendMovies(user, K):
userRatings = movieRatings[user]
simMovies = topKSimilarMovies(userRatings.name, K)
simMoviesRatings = movieRatings.iloc[simMovies]
weightedRatings = (simMoviesRatings * movieSimilarity[userRatings.name][simMovies]).sum(axis=0)
weightedRatings = weightedRatings.sort_values(ascending=False)
moviesToRecommend = weightedRatings.loc[~weightedRatings.index.isin(userRatings.index)]
return moviesToRecommend.index.tolist()
# 示例:为用户1推荐10部电影
user = 1
K = 10
recommendedMovies = recommendMovies(user, K)
print(recommendedMovies)
```
注意:上述代码仅作为示例,实际应用时需要根据具体情况进行调整和优化。
基于用户的协同过滤使用余弦相似度电影推荐系统的Python代码,使用MovieLens数据集
好的,以下是基于用户的协同过滤使用余弦相似度电影推荐系统的Python代码,使用MovieLens数据集:
```python
import pandas as pd
import numpy as np
# 读取数据集
ratings = pd.read_csv('ratings.csv')
movies = pd.read_csv('movies.csv')
# 合并数据集
ratings = pd.merge(ratings, movies, on='movieId')
# 计算用户评分矩阵
userRatings = ratings.pivot_table(index=['userId'], columns=['title'], values='rating')
# 填充缺失值
userRatings = userRatings.fillna(0)
# 计算余弦相似度
from sklearn.metrics.pairwise import cosine_similarity
userSimilarity = cosine_similarity(userRatings)
# 定义函数,返回与目标用户最相似的K个用户
def topKSimilarUsers(user, K):
simUsers = userSimilarity[user]
simUsers = simUsers.argsort()[::-1]
return simUsers[1:K+1]
# 定义函数,根据最相似的K个用户推荐电影
def recommendMovies(user, K):
simUsers = topKSimilarUsers(user, K)
simUsersRatings = userRatings.iloc[simUsers]
meanRatings = simUsersRatings.mean(axis=0)
moviesToRecommend = meanRatings.sort_values(ascending=False)
return moviesToRecommend.index.tolist()
# 示例:为用户1推荐10部电影
user = 1
K = 10
recommendedMovies = recommendMovies(user, K)
print(recommendedMovies)
```
注意:上述代码仅作为示例,实际应用时需要根据具体情况进行调整和优化。
阅读全文