矩阵分解的推荐算法入门-好好看
2
3 评分矩阵R如下
4
5 D1 D2 D3 D4
6
7 U1 5 3 - 1
8
9 U2 4 - - 1
10
11 U3 1 1 - 5
12
13 U4 1 - - 4
14
15 U5 - 1 5 4
16
17 ***/
18
19 #include<iostream>
20
21 #include<cstdio>
22
23 #include<cstdlib>
24
25 #include<cmath>
26
27 using namespace std;
28
29
30
31 void matrix_factorization(double *R,double *P,double *Q,int N,int M,int K,int steps=5000,float alpha=0.0002,float beta=0.02)
32
33 {
34
35 for(int step =0;step<steps;++step)
36
37 {
38
39 for(int i=0;i<N;++i)
40
41 {
42
43 for(int j=0;j<M;++j)
44
45 {
46
47 if(R[i*M+j]>0)
48
49 {
50
51 //这里面的error 就是公式6里面的e(i,j)
52
53 double error = R[i*M+j];
54
55 for(int k=0;k<K;++k)
56
57 error -= P[i*K+k]*Q[k*M+j];
58
59
60
61 //更新公式6
62
63 for(int k=0;k<K;++k)
64
65 {
66
67 P[i*K+k] += alpha * (2 * error * Q[k*M+j] - beta * P[i*K+k]);
68
69 Q[k*M+j] += alpha * (2 * error * P[i*K+k] - beta * Q[k*M+j]);
70
71 }
72
73 }
74
75 }
76
77 }
78
79 double loss=0;
80
81 //计算每一次迭代后的,loss大小,也就是原来R矩阵里面每一个非缺失值跟预测值的平方损失
82
83 for(int i=0;i<N;++i)
84
85 {
86
87 for(int j=0;j<M;++j)
88
89 {
90
91 if(R[i*M+j]>0)
92
93 {
94
95 double error = 0;
96
97 for(int k=0;k<K;++k)
98
99 error += P[i*K+k]*Q[k*M+j];
100
101 loss += pow(R[i*M+j]-error,2);
102
103 for(int k=0;k<K;++k)
104
105 loss += (beta/2) * (pow(P[i*K+k],2) + pow(Q[k*M+j],2));
106
107 }
108
109 }
110
111 }
112
113 if(loss<0.001)
114
115 break;
116
117 if (step%1000==0)
118
119 cout<<"loss:"<<loss<<endl;
120
121 }
122
123 }
124
125
126
127 int main(int argc,char ** argv)
128
129 {
130
131 int N=5; //用户数
132
133 int M=4; //物品数
134
135 int K=2; //主题个数
136
137 double *R=new double[N*M];
138
139 double *P=new double[N*K];
140
141 double *Q=new double[M*K];
142
143 R[0]=5,R[1]=3,R[2]=0,R[3]=1,R[4]=4,R[5]=0,R[6]=0,R[7]=1,R[8]=1,R[9]=1;
144
145 R[10]=0,R[11]=5,R[12]=1,R[13]=0,R[14]=0,R[15]=4,R[16]=0,R[17]=1,R[18]=5,R[19]=4;
146
147
148
149 cout<< "R矩阵" << endl;
150
151 for(int i=0;i<N;++i)
152
153 {
154
155 for(int j=0;j<M;++j)
156
157 cout<< R[i*M+j]<<',';
158
159 cout<<endl;
160
161 }
162
163
164
165 //初始化P,Q矩阵,这里简化了,通常也可以对服从正态分布的数据进行随机数生成
166
167 srand(1);
168
169 for(int i=0;i<N;++i)
170
171 for(int j=0;j<K;++j)
172
173 P[i*K+j]=rand()%9;
174
175
176
177 for(int i=0;i<K;++i)
178
179 for(int j=0;j<M;++j)
180
181 Q[i*M+j]=rand()%9;
182
183 cout <<"矩阵分解 开始" << endl;
184
185 matrix_factorization(R,P,Q,N,M,K);
186
187 cout <<"矩阵分解 结束" << endl;
188
189
190
191 cout<< "重构出来的R矩阵" << endl;
192
193 for(int i=0;i<N;++i)
194
195 {
196
197 for(int j=0;j<M;++j)
198
199 {
200
201 double temp=0;
202
203 for (int k=0;k<K;++k)
204
205 temp+=P[i*K+k]*Q[k*M+j];
206
207 cout<<temp<<',';
208
209 }
210
211 cout<<endl;
212
213 }
214
215 free(P),free(Q),free(R);
216
217 return 0;
218
219 }
执行的结果如下图所示,
本文链接: 基于矩阵分解的推荐算法,简单入门,转载请注明。
相关 [矩阵分解 推荐算法 kobeshow] 推荐:
基于矩阵分解的推荐算法,简单入门 - kobeshow
- - 博客园_首页
矩阵分解的Jungle
- SuperLucky - 增强视觉 | 计算机视觉 增强现实
矩阵分解在推荐系统中的应用(转)
- -
社会化推荐算法
- - CSDN博客云计算推荐文章
常用推荐算法
- - 互联网 - ITeye博客
解析移动游戏运营数据分析指标 - kobeshow
- - 博客园_首页
推荐算法Slope One初探
- - 标点符
[转]Mahout推荐算法基础
- - 小鸥的博客
美团推荐算法实践
- - 美团技术团队
互联网无处不在的“推荐算法”
- Tiger - 所有文章 - UCD大社区
矩阵分解的推荐算法入门-好好看相关推荐
- 基于矩阵分解的推荐算法,简单入门
摘自:http://www.cnblogs.com/kobedeshow/p/3651833.html 本文将要讨论基于矩阵分解的推荐算法,这一类型的算法通常会有很高的预测精度,也活跃于各大推荐系统竞 ...
- 基于矩阵分解的推荐算法
https://www.toutiao.com/a6656899746516435469/ 2019-02-12 08:10:52 1.算法介绍 在推荐算法中,主要解决的问题是找到用户对物品的偏好得分 ...
- 基于python 的电影推荐算法_基于python语言编程的矩阵分解电影推荐算法
[实例简介]一种基于矩阵分解方法的电影推荐算法 [实例截图] [核心代码] import numpy as np from numba import cuda, float64, jit from s ...
- 矩阵点乘和叉乘的区别_矩阵点乘推荐算法预测图书推荐
推荐系统 GreedyAIAcademy/Machine-Learninggithub.com 推荐系统,顾名思义,就是用于根据用户的喜好,进行对象的推荐 当然,我们这里说的对象不是来预测你会喜欢什 ...
- 【推荐系统入门到项目实战】(三):矩阵分解和ALS算法
[推荐系统入门到项目实战](三):矩阵分解和ALS算法
- ML之FE:数据处理—特征工程之高维组合特征的处理案例(矩阵分解)——基于LoR算法的广告点击预估问题
ML之FE:数据处理-特征工程之高维组合特征的处理案例(矩阵分解)--基于LoR算法的广告点击预估问题 目录 特征工程之高维组合特征的处理思路 1.原始数据:语⾔言和类型两种离散特征 2.为了提高拟合 ...
- 基于矩阵分解的CF算法实现(一):(Funk SVD)LFM
基于矩阵分解的CF算法实现(一):LFM LFM也就是前面提到的Funk SVD矩阵分解 LFM原理解析 LFM(latent factor model)隐语义模型核心思想是通过隐含特征联系用户和物品 ...
- 基于矩阵分解的CF算法实现(二):BiasSvd
基于矩阵分解的CF算法实现(二):BiasSvd BiasSvd其实就是前面提到的Funk SVD矩阵分解基础上加上了偏置项. BiasSvd 利用BiasSvd预测用户对物品的评分, k k k表示 ...
- 推荐算法矩阵分解实战——keras算法练习
当今这个信息爆炸的社会,每个人都会面对无数的商品,无数的选择.而推荐算法的目的帮助大家解决选择困难症的问题,在大千世界中推荐专属于你的商品. 推荐系统算法简介 这里简单介绍下推荐系统中最为主要的协同过 ...
- 基于矩阵分解的CF算法实现(一):LFM
LFM也就是前面提到的Funk SVD矩阵分解 LFM原理解析 LFM(latent factor model)隐语义模型核心思想是通过隐含特征联系用户和物品,如下图: P矩阵是User-LF矩阵,即 ...
最新文章
- 微软2022新bug:大量程序员连夜加班,只因日期数据溢出
- 利用ashx和ajax实现表格的异步填充
- 【阿里云课程】如何基于GAN完成人脸图像超分辨任务
- 使用iframe+postMessage跨域操作和通信
- MySql数据库中的子查询使用
- calendar前推n天_Shell获取ES3天的索引列表进行迁移操作
- 使用flask_socketio实现客户端间即时通信
- MATLAB中BP神经网络用于回归拟合算法实现(另附GRNN代码)
- wordcount.java_mapreduce中wordcount的java实现
- POJ 2299Ultra-QuickSort
- tpl-spring-mybatis 模板工程
- Win7系统不能记忆窗口大小与位置解决方法
- 御剑仙侠服务器维护,修仙无双御剑仙侠
- FFT蝶形算法的verilog实现专题——从FFT算法的定义开始入手
- 2021年10月数学一及第十三届大数赛部分复习
- 计算机二级web最全真题题库下载
- 智邦科技亮相2019 ODCC峰会,为开放网络提供弹性解决方案
- Python爬虫之知乎回答
- 如果你想要做好抖音直播间需要注意的其他事项(三)
- Java实现一个学生成绩管理系统,要求存储学生信息并进行增删改查操作。
热门文章
- Kubernetes详解(三)——Kubernetes集群组件
- STP中各算法接口开销(COST)计算方式
- Not enough space in file systems for the current software selection. An additional XXXX MiB is neede
- 英特尔一口气发布了三款处理器、两款存储、一款以太网适配器
- IOC(控制反转)的理解
- javascript数据结构与算法--散列
- 转载:世上最全的百物妙用窍门-绝对不能错过,不断更新中
- 遇到网络问题,要逐段排查
- 中国现代远程与继续教育网 统考 大学英语(B)考试大纲
- 理解 Delphi 的类(十) - 深入方法[21] - 开放数组参数