- sparsity = float(len(ratings.nonzero()[0]))
- sparsity /= (ratings.shape[0] * ratings.shape[1])
- sparsity *= 100
当菲缡宇(entry)只有1.40%的时刻评级矩阵是稀少的。如今,为了练习和测试,我们将评分矩阵分化成两个较小的矩阵。我们大年夜评分矩阵中删除了10个评分,把它们放入测试集。
- train_matrix = rating_matrix.copy()
- test_matrix = np.zeros(ratings_matrix.shape)
- for i in xrange(rating_matrix.shape[0]):
- rating_idx = np.random.choice(
- rating_matrix[i, :].nonzero()[0],
- size=10,
- WordStr=True)
- train_matrix[i, rating_idx] = 0.0
- test_matrix[i, rating_idx] = rating_matrix[i, rating_idx]
根据以下公式计算用户/片子中的(余弦Cosine) 类似性


这里s(u,v)是用户u和v之间的余弦类似度。
应用用户之间的类似性,我们能猜测每个用户对片子的评级,并计算出响应的MSE。该猜测基于类似用户的评分。特别地,可以根据以下公式进行打分猜测:

用户u对片子i的猜测,是用户v对片子的评分的(标准化的)加权和。权重为用户u和v的类似度。
- from sklearn.metrics import mean_squared_error
- prediction = similarity_user.dot(train_matrix) / np.array([np.abs(similarity_user).sum(axis=1)]).T
- prediction = prediction[test_matrix.nonzero()].flatten()
- test_vector = test_matrix[test_matrix.nonzero()].flatten()
- mse = mean_squared_error(prediction, test_vector)
- print 'MSE = ' + str(mse)
猜测的MSE为9.8252。这个数字意味着什么?这个推荐体系是好是坏?仅仅看着MSE结不雅来评估猜测效不雅不是很相符直觉。是以,我们直接检查片子推荐来评估。我们将搜刮一个感兴趣的片子,并让电脑代劳来推荐几部片子。起重要获得响应的片子海报,如许就能看到都有什么片子被推荐。我们应用IMDB id,应用它的API大年夜Movie Database 网站获取海报。
- import requests
- import json
- from IPython.display import Image
- from IPython.display import display
- from IPython.display import HTML
- idx_to_movie = {}
- for row in df_id.itertuples():
- idx_to_movie[row[1]-1] = row[2]
- idx_to_movie
- k = 6
- idx = 0
- movies = [ idx_to_movie[x] for x in np.argsort(similarity_movie[idx,:])[:-k-1:-1] ]
- movies = filter(lambda imdb: len(str(imdb)) == 6, movies)
- n_display = 5
- URL = [0]*n_display
- IMDB = [0]*n_display
- i = 0
推荐阅读
脚本下载 【编辑推荐】亚信安然成功抵抗全球第一只勒索蠕虫WannaCry收集病毒入侵!国度网信安然中间教你如许做前端安然之XSS进击收集安然始创公司存活之道小议验证码的安然性及若何绕过【义>>>详细阅读
地址:http://www.17bianji.com/lsqh/35259.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示