Understanding matrix factorization for recommendation
http://nicolas-hug.com/blog/matrix_facto_4
import numpy as np import surprise # run 'pip install scikit-surprise' to install surprise from surprise.model_selection import cross_validate class MatrixFacto(surprise.AlgoBase): '''A basic rating prediction algorithm based on matrix factorization.''' def __init__(self, learning_rate, n_epochs, n_factors): self.lr = learning_rate # learning rate for SGD self.n_epochs = n_epochs # number of iterations of SGD self.n_factors = n_factors # number of factors def fit(self, trainset): '''Learn the vectors p_u and q_i with SGD''' print('Fitting data with SGD...') # Randomly initialize the user and item factors. p = np.random.normal(0, .1, (trainset.n_users, self.n_factors)) q = np.random.normal(0, .1, (trainset.n_items, self.n_factors)) # SGD procedure for _ in range(self.n_epochs): for u, i, r_ui in trainset.all_ratings(): err = r_ui - np.dot(p[u], q[i]) # Update vectors p_u and q_i p[u] += self.lr * err * q[i] q[i] += self.lr * err * p[u] # Note: in the update of q_i, we should actually use the previous (non-updated) value of p_u. # In practice it makes almost no difference. self.p, self.q = p, q self.trainset = trainset def estimate(self, u, i): '''Return the estmimated rating of user u for item i.''' # return scalar product between p_u and q_i if user and item are known, # else return the average of all ratings if self.trainset.knows_user(u) and self.trainset.knows_item(i): return np.dot(self.p[u], self.q[i]) else: return self.trainset.global_mean # data loading. We'll use the movielens dataset (https://grouplens.org/datasets/movielens/100k/) # it will be downloaded automatically. data = surprise.Dataset.load_builtin('ml-100k') #data.split(2) # split data for 2-folds cross validation algo = MatrixFacto(learning_rate=.01, n_epochs=10, n_factors=10) #surprise.evaluate(algo, data, measures=['RMSE']) cross_validate(algo, data, measures=['RMSE', 'MAE'], cv=5, verbose=True)
Understanding matrix factorization for recommendation的更多相关文章
- Matrix Factorization SVD 矩阵分解
Today we have learned the Matrix Factorization, and I want to record my study notes. Some kownledge ...
- 关于NMF(Non-negative Matrix Factorization )
著名的科学杂志<Nature>于1999年刊登了两位科学家D.D.Lee和H.S.Seung对数学中非负矩阵研究的突出成果.该文提出了一种新的矩阵分解思想――非负矩阵分解(Non-nega ...
- Matrix Factorization, Algorithms, Applications, and Avaliable packages
矩阵分解 来源:http://www.cvchina.info/2011/09/05/matrix-factorization-jungle/ 美帝的有心人士收集了市面上的矩阵分解的差点儿全部算法和应 ...
- 机器学习技法:15 Matrix Factorization
Roadmap Linear Network Hypothesis Basic Matrix Factorization Stochastic Gradient Descent Summary of ...
- 《Non-Negative Matrix Factorization for Polyphonic Music Transcription》译文
NMF(非负矩阵分解),由于其分解出的矩阵是非负的,在一些实际问题中具有非常好的解释,因此用途很广.在此,我给大家介绍一下NMF在多声部音乐中的应用.要翻译的论文是利用NMF转录多声部音乐的开山之作, ...
- 机器学习技法笔记:15 Matrix Factorization
Roadmap Linear Network Hypothesis Basic Matrix Factorization Stochastic Gradient Descent Summary of ...
- Non-negative Matrix Factorization 非负矩阵分解
著名的科学杂志<Nature>于1999年刊登了两位科学家D.D.Lee和H.S.Seung对数学中非负矩阵研究的突出成果.该文提出了一种新的矩阵分解思想――非负矩阵分解(Non-nega ...
- 【RS】Sparse Probabilistic Matrix Factorization by Laplace Distribution for Collaborative Filtering - 基于拉普拉斯分布的稀疏概率矩阵分解协同过滤
[论文标题]Sparse Probabilistic Matrix Factorization by Laplace Distribution for Collaborative Filtering ...
- 【RS】List-wise learning to rank with matrix factorization for collaborative filtering - 结合列表启发排序和矩阵分解的协同过滤
[论文标题]List-wise learning to rank with matrix factorization for collaborative filtering (RecSys '10 ...
随机推荐
- Adaptive Compressive Tracking via Online Vector Boosting Feature Selection(ACT算法解读)
- PHP去重的简单写法
PHP去重的简单写法用array_flip实现去重效果 <pre><?php$arr =array("a"=>"a1","b& ...
- JAVA httpURLConnection curl
// 文件路径 D:\ApacheServer\web_java\HelloWorld\src\com\test\TestHttpCurl.java package com.test; import ...
- URI和URL的关系与区别
首先给大家举个例子,有一家公司的总经理,某天,给了我一张名片,上面写了他的头衔,北京XXX公司总经理 张三,还有他的办公室地址,北京市海淀区长安街35号北京XXX公司总经理办公室,那么,我以后给我的朋 ...
- DjangoRestful 递归嵌套序列化器实现
**** 由于博客园不支持markdown语法,所以推荐以下链接阅读: 原创 https://blog.csdn.net/weixin_42495873/article/details/8943354 ...
- go 数据渲染到html页面 02
渲染到浏览器页面 //把数据渲染到浏览器 package main import ( "fmt" "text/template" "net/http& ...
- Angular 学习笔记 (Custom Accessor + Mat FormField + Custom select)
custom form control 之前就写过了,这里简单写一下. 创建一个组件实现 ControlValueAccessor 接口 @Component({ providers: [ { pro ...
- 从入门到精通,Java学习路线导航
引言最近也有很多人来向我"请教",他们大都是一些刚入门的新手,还不了解这个行业,也不知道从何学起,开始的时候非常迷茫,实在是每天回复很多人也很麻烦,所以在这里统一作个回复吧. Ja ...
- 测试人员必须掌握的linu常用命令
有些公司需要测试人员部署程序包,通过工具xshell. 现在我将总结下工作需要用到的最多的命令 ls 显示文件或目录 pwd ...
- Java 之 字符输入流[Reader]
一.字符输入流 java.io.Reader 抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中. 它定义了字符输入流的基本共性功能方法. public void close() :关 ...