基于模型融合的推荐系统实现(3):模型融合
来源:互联网 发布:网络电视机顶盒作用 编辑:程序博客网 时间:2024/04/29 14:25
基本思路很简单,最小二乘法就好了:
我们假设两个算法得到的结果权重分别是a,b利用最小二乘法和我们分出来的第二部分数据就可以获取a,b使得误差最小。其实最小二乘法就是求一个广义的逆即可。最后的RMSE比起单一的模型有所提高,变成了(0.86~~~~)
import numpy as npfrom code import read_filefrom SVD import construct_matrix,get_svd_predict,svd_predict,get_meanfrom PCA import get_train,get_pq,predictdef merge_models(index,mean=0): train = get_train(path=r'smaller_test.txt')#x p,q,bu,bi = get_pq(index=index) svd_predictions = get_svd_predict(index) A = np.zeros((len(train),2)) Y = np.zeros((len(train))) for user_id,iid,r in read_file(r'smaller_test.txt'): pr_lfm = predict(user_id,iid,p,q,bu,bi) pr_svd = svd_predict(user_id,iid,svd_predictions) pr_lfm = pr_lfm if pr_lfm else 3 A[user_id-1] = np.array([pr_lfm,pr_svd+mean]) Y[user_id-1] = np.array([r]) alpha_mat = np.dot(np.dot(np.linalg.inv(np.dot(np.transpose(A), A)), np.transpose(A)), Y) return alpha_matdef REMS(index,mean=0): svd_predictions = get_svd_predict(index) p,q,bu,bi = get_pq(index=index) error = 0 cnt = 0 alpha1,alpha2 = merge_models(index,mean=mean) cutoff = {1:-0.8,2:-1,3:0,4:0.3,5:0} for uid,iid in read_file(r'test.txt',num = 2): pr_lfm = predict(uid,iid,p,q,bu,bi) pr_svd = svd_predict(uid,iid,svd_predictions) if pr_lfm == None or pr_svd==None:continue pr = alpha1*pr_lfm+alpha2*(pr_svd+mean) if pr<1:pr = 1.0 if pr>5:pr = 5.0 cnt += 1 yield prdef write_ans(w_path,data): with open(w_path,'w'): pass with open(w_path,'a') as file: for r in data: file.write('{0:.3f}\n'.format(r))if __name__ == '__main__': #merge_models() train = get_train(path=r'smaller_test.txt') a,b,mean = get_mean(train) write_ans('scores-5.txt',REMS(5,mean)) write_ans('scores-20.txt',REMS(20,mean)) write_ans('scores-50.txt',REMS(50,mean))
1 0
- 基于模型融合的推荐系统实现(3):模型融合
- 基于spark的多模型融合的推荐系统
- 基于模型融合的推荐系统实现(1):基于SGD的PMF
- 基于模型融合的推荐系统实现(2):迭代式SVD分解
- 模型融合
- 模型融合
- 模型融合
- 模型融合
- 模型融合
- 模型融合
- 模型融合
- 模型融合
- 模型融合的主要方法
- 多任务融合的模型
- Ensemble Learning-模型融合-Python实现
- stack模型融合
- 模型融合方法
- 模型融合(stacking&blending)
- 二十种特征变换方法及Spark MLlib调用实例(Scala/Java/python)(一)
- dispatch_after 的swift 3 版本
- ns3的click又编译失败了
- 使用MediaStore.ACTION_IMAGE_CAPTURE,拍照到指定目录
- SecureRandom
- 基于模型融合的推荐系统实现(3):模型融合
- APN 和 PDN 关系
- NuttX的学习笔记 7
- static function and variable
- 【leetcode-7】Reverse Integer(C语言)
- Visual Studio和Eclipse相比有哪些优缺点
- Python字符串格式化
- 通知栏的显示
- Android Studio报错:Unsupported method: AndroidProject.getPluginGeneration()的一种解决方法