黑马(9)baseline交替最小二乘优化
交替最小二乘法优化
原理推导
损失函数
J(θ)=∑u,i∈R(rui−μ−bu−bi)2+λ∗(∑ubu2+∑ibi2)J(\theta)=\sum_{u,i\in R}(r_{ui}-\mu-b_u-b_i)^2+\lambda*(\sum_u b_u{^2}+\sum_i b_i{^2} ) J(θ)=u,i∈R∑(rui−μ−bu−bi)2+λ∗(u∑bu2+i∑bi2)
对损失函数求偏导
∂J(θ)∂bu=−2∑u,i∈R(rui−μ−bu−bi)+2λ∗bu\frac{\partial{J(\theta)}}{\partial{b_u}}=-2\sum_{u,i\in R}(r_{ui}-\mu-b_u-b_i)+2\lambda * b_u ∂bu∂J(θ)=−2u,i∈R∑(rui−μ−bu−bi)+2λ∗bu
另偏导等于0,可得:
∑u,i∈R(rui−μ−bu−bi)=λ∗bu∑u,i∈R(rui−μ−bi)=∑u,i∈Rbu+λ∗bu\sum_{u,i\in R}(r_{ui}-\mu-b_u-b_i)=\lambda * b_u \\ \sum_{u,i\in R}(r_{ui}-\mu-b_i)=\sum_{u,i\in R} b_u+\lambda * b_u u,i∈R∑(rui−μ−bu−bi)=λ∗buu,i∈R∑(rui−μ−bi)=u,i∈R∑bu+λ∗bu
为了简化公式,令∑u,i∈Rbu≈∣R(u)∣∗bu\sum_{u,i\in R} b_u \approx |R(u)|*b_u∑u,i∈Rbu≈∣R(u)∣∗bu,∣R(u)∣|R(u)|∣R(u)∣是uuu总的评分次数,可得:
bu=∑u,i∈R(rui−μ−bi)∣R(u)∣+λ1b_u=\frac{\sum_{u,i\in R}(r_{ui}-\mu-b_i)}{|R(u)|+\lambda_1} bu=∣R(u)∣+λ1∑u,i∈R(rui−μ−bi)
同理可得:
bi=∑u,i∈R(rui−μ−bu)∣R(i)∣+λ2b_i=\frac{\sum_{u,i\in R}(r_{ui}-\mu-b_u)}{|R(i)|+\lambda_2} bi=∣R(i)∣+λ2∑u,i∈R(rui−μ−bu)
其中∣R(i)∣|R(i)|∣R(i)∣是iii总的被评分次数
通过原理推导,我们得到了bub_ubu和bib_ibi的表达式,他们的表达式中又各自包含着对方,可以用交替最小二乘的方法来计算他们的值。
整体代码放在https://github.com/Kitten-Rec/HeiMa/code
关键代码如下
def als(self):"""随机梯度下降优化bu, bi:return: bu, bi"""# 初始化参数 bu, bi 全部设置为0bu = dict(zip(self.user_ratings.index, np.zeros(len(self.user_ratings.index))))bi = dict(zip(self.item_ratings.index, np.zeros(len(self.item_ratings.index))))# 交替最小二乘法更新参数for epoch in range(self.number_epochs):print("Epoch: %d" % epoch)for iid, uid_list, real_rating_list in self.item_ratings.itertuples(index=True):sum = 0for uid, real_rating in zip(uid_list, real_rating_list):sum += real_rating - self.global_mean - bu[uid]bi[iid] = sum / (self.lambda2 * len(uid_list))for uid, iid_list, real_rating_list in self.user_ratings.itertuples(index=True):sum = 0for iid, real_rating in zip(iid_list, real_rating_list):sum += real_rating - self.global_mean - bi[iid]bu[uid] = sum / (self.lambda1 * len(iid_list))return bu, bi
黑马(9)baseline交替最小二乘优化相关推荐
- 交替最小二乘矩阵分解_使用交替最小二乘矩阵分解与pyspark建立推荐系统
交替最小二乘矩阵分解 pyspark上的动手推荐系统 (Hands-on recommender system on pyspark) Recommender System is an informa ...
- 交替最小二乘+ALS+推荐+Spark
交替最小二乘+ALS+推荐+Spark 在机器学习的上下文中,ALS 特指使用交替最小二乘求解的一个协同推荐算法. 它通过观察到的所有用户给产品的打分,来推断每个用户的喜好并向用户推荐适合的产品. ...
- c++分治法求最大最小值实现_最优化计算与matlab实现(12)——非线性最小二乘优化问题——G-N法...
参考资料 <精通MATLAB最优化计算(第二版)> 编程工具 Matlab 2019a 目录 石中居士:最优化计算与Matlab实现--目录zhuanlan.zhihu.com 非线性最 ...
- 【2022黑马程序员】SQL优化
[黑马程序员]SQL优化笔记 文章目录 [黑马程序员]SQL优化笔记 插入数据优化 大批量插入数据 总结 主键优化 数据组织方式 页分裂 A. 主键顺序插入效果 B. 主键乱序插入效果 页合并 索引设 ...
- One PUNCH Man——交替最小二乘推荐算法
文章目录 交替最小二乘推荐算法 交替最小二乘推荐算法 ALS(Alternating Least Square),交替最小二乘法.在机器学习中,特指使用最小二乘法的一种协同推荐算法. 如下图所示,u表 ...
- 异方差性以及加权最小二乘优化
异方差性(heteroscedasticity )是相对于同方差而言的.所谓同方差,是为了保证回归参数估计量具有良好的统计性质,经典线性回归模型的一个重要假定:总体回归函数中的随机误差项满足同方差性, ...
- 数学建模——拟合方法以及最小二乘优化问题(附黄河小浪底调水调沙例题)
上篇博客中介绍了插值,插值的一些算法以及Matalb中的一些插值工具函数,这篇博文主要介绍拟合方法以及Matlab中的拟合函数和交互式页面. 一. 拟合方法 线性最小二乘法引入 (1) 概述:与插值相 ...
- 最小二乘优化整理(信赖域方法)
信赖域方法和线搜索类似都是迭代方法,与其不同的是,每次迭代时,在一个选定的可信赖区域内,选择当前迭代点的近似模型 mkmk ,然后计算最优步长:如果步长不合适,可以对区域进行缩放.该小结主要介绍: 信 ...
- Baseline Profile 安装时优化在西瓜视频的实践
动手点关注 干货不迷路 背景 在Android上,Java/Kotlin代码会编译为DEX字节码,在运行期由虚拟机解释执行.但是,字节码解释执行的速度比较慢.所以,通常虚拟机会在解释模式基础上做一 ...
最新文章
- 机器学习 决策树 ID3
- 使用PowerDesigner生成Access数据库
- 远程访问,文件的压缩,ip地址的设置(9,11,12unit)
- ​Nessus更新到8.9.1
- [转]高颜值、好用、易扩展的微信小程序 UI 库,Powered by 有赞
- element ui 表单验证为正整数
- flutter持久化_【Flutter 实战】大量复杂数据持久化
- python怎样清除csv中的数据_使用d清除CSV文件中的数据
- 电脑如何进入bios模式_电脑如何进入bios,你还不收藏?
- 修改Apache配置文件开启gzip压缩传输
- Fibonacci 数列及其计算方法
- java设计模式之单例模式
- 树莓派输出PWM波驱动舵机
- js 大地坐标转经纬度
- DOS命令 For Set
- C#简易计算器(加减乘除三角函数运算)
- Flume Kafka Channel使用案例
- 视频播放器软件哪个最好用?盘点6款Windows电脑上超级好用的本地视频播放器
- 手机怎么使用涂鸦?分享几个手机视频怎么添加涂鸦的妙招
- 蓝奏云 php 协议,蓝奏云网盘最新协议完整版附一套网络验证