Scikit-learn实现基于模型的推荐系统(SVD)
2017-08-15 10:11
691 查看
具体分析稍后再介绍。
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : Peidong # @Site : # @File : MFRecommendSystem.py # @Software: PyCharm import numpy as np import pandas as pd # 读取u.data文件 header = ['user_id', 'item_id', 'rating', 'timestamp'] df = pd.read_csv('ml-100k/u.data', sep='\t', names=header) # 计算唯一用户和电影的数量 n_users = df.user_id.unique().shape[0] n_items = df.item_id.unique().shape[0] print('Number of users = ' + str(n_users) + ' | Number of movies = ' + str(n_items)) # 使用scikit-learn库将数据集分割成测试和训练。Cross_validation.train_test_split根据测试样本的比例(test_size),本例中是0.25,来将数据混洗并分割成两个数据集 from sklearn import cross_validation as cv train_data, test_data = cv.train_test_split(df, test_size=0.25) # 计算数据集的稀疏度 sparsity = round(1.0 - len(df)/float(n_users*n_items), 3) print('The sparsity level of MovieLens100K is ' + str(sparsity*100) + '%') # 创建uesr-item矩阵,此处需创建训练和测试两个UI矩阵 train_data_matrix = np.zeros((n_users, n_items)) for line in train_data.itertuples(): train_data_matrix[line[1] - 1, line[2] - 1] = line[3] test_data_matrix = np.zeros((n_users, n_items)) for line in test_data.itertuples(): test_data_matrix[line[1] - 1, line[2] - 1] = line[3] # 使用SVD进行矩阵分解 import scipy.sparse as sp from scipy.sparse.linalg import svds u, s, vt = svds(train_data_matrix, k=20) s_diag_matrix = np.diag(s) X_pred = np.dot(np.dot(u, s_diag_matrix), vt) # 利用均方根误差进行评估 from sklearn.metrics import mean_squared_error from math import sqrt def rmse(prediction, ground_truth): prediction = prediction[ground_truth.nonzero()].flatten() ground_truth = ground_truth[ground_truth.nonzero()].flatten() return sqrt(mean_squared_error(prediction, ground_truth)) print('User-based CF MSE: ' + str(rmse(X_pred, test_data_matrix)))
相关文章推荐
- 基于模型融合的推荐系统实现(2):迭代式SVD分解
- 基于Scikit-learn实现回归模型——房价预测
- 在centos6系统上基于session绑定实现nat模型的lvs集群,并在RS上安装Discuz论坛 推荐
- 基于模型融合的推荐系统实现(3):模型融合
- 基于SVD思想的简单推荐系统的实现
- 基于Spark MLlib平台和基于模型的协同过滤算法的电影推荐系统(二)代码实现
- 基于奇异值分解(SVD)的推荐系统算法实现
- 基于模型融合的推荐系统实现(1):基于SGD的PMF
- 机器学习实战及Python实现——奇异值分解(SVD)实现简单推荐系统
- 实战智能推荐系统(10)-- 隐语义模型 LFM (Funk-SVD)
- 机器学习—— 基于深度学习的推荐系统的实现
- Gradient Tree Boosting (GBM, GBRT, GBDT, MART)算法解析和基于XGBoost/Scikit-learn的实现
- 基于RBAC模型的权限管理系统的设计和实现
- 基于scikit-learn包实现机器学习之KNN(K近邻)
- 【Python学习系列十六】基于scikit-learn库逻辑回归训练模型(delta比赛代码)
- 推荐系统中基于深度学习的混合协同过滤模型
- 使用Scikit-learn实现基于内存的协同过滤算法(使用movieLens数据集)
- 基于scikit-learn(sklearn)做分类--3.优化--保存模型
- 实战智能推荐系统(10)-- 隐语义模型 LFM (Funk-SVD)
- 【4】构建基于scikit-learn的文本挖掘学习系统