交替最小二乘法优化

原理推导

损失函数
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∑​bu​2+i∑​bi​2)

对损失函数求偏导
∂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​)=λ∗bu​u,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∈R​bu​≈∣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交替最小二乘优化相关推荐

  1. 交替最小二乘矩阵分解_使用交替最小二乘矩阵分解与pyspark建立推荐系统

    交替最小二乘矩阵分解 pyspark上的动手推荐系统 (Hands-on recommender system on pyspark) Recommender System is an informa ...

  2. 交替最小二乘+ALS+推荐+Spark

    交替最小二乘+ALS+推荐+Spark 在机器学习的上下文中,ALS 特指使用交替最小二乘求解的一个协同推荐算法.  它通过观察到的所有用户给产品的打分,来推断每个用户的喜好并向用户推荐适合的产品. ...

  3. c++分治法求最大最小值实现_最优化计算与matlab实现(12)——非线性最小二乘优化问题——G-N法...

    参考资料 <精通MATLAB最优化计算(第二版)> 编程工具 Matlab 2019a 目录 石中居士:最优化计算与Matlab实现--目录​zhuanlan.zhihu.com 非线性最 ...

  4. 【2022黑马程序员】SQL优化

    [黑马程序员]SQL优化笔记 文章目录 [黑马程序员]SQL优化笔记 插入数据优化 大批量插入数据 总结 主键优化 数据组织方式 页分裂 A. 主键顺序插入效果 B. 主键乱序插入效果 页合并 索引设 ...

  5. One PUNCH Man——交替最小二乘推荐算法

    文章目录 交替最小二乘推荐算法 交替最小二乘推荐算法 ALS(Alternating Least Square),交替最小二乘法.在机器学习中,特指使用最小二乘法的一种协同推荐算法. 如下图所示,u表 ...

  6. 异方差性以及加权最小二乘优化

    异方差性(heteroscedasticity )是相对于同方差而言的.所谓同方差,是为了保证回归参数估计量具有良好的统计性质,经典线性回归模型的一个重要假定:总体回归函数中的随机误差项满足同方差性, ...

  7. 数学建模——拟合方法以及最小二乘优化问题(附黄河小浪底调水调沙例题)

    上篇博客中介绍了插值,插值的一些算法以及Matalb中的一些插值工具函数,这篇博文主要介绍拟合方法以及Matlab中的拟合函数和交互式页面. 一. 拟合方法 线性最小二乘法引入 (1) 概述:与插值相 ...

  8. 最小二乘优化整理(信赖域方法)

    信赖域方法和线搜索类似都是迭代方法,与其不同的是,每次迭代时,在一个选定的可信赖区域内,选择当前迭代点的近似模型 mkmk ,然后计算最优步长:如果步长不合适,可以对区域进行缩放.该小结主要介绍: 信 ...

  9. Baseline Profile 安装时优化在西瓜视频的实践

    ‍ 动手点关注 干货不迷路 背景 在Android上,Java/Kotlin代码会编译为DEX字节码,在运行期由虚拟机解释执行.但是,字节码解释执行的速度比较慢.所以,通常虚拟机会在解释模式基础上做一 ...

最新文章

  1. 机器学习 决策树 ID3
  2. 使用PowerDesigner生成Access数据库
  3. 远程访问,文件的压缩,ip地址的设置(9,11,12unit)
  4. ​Nessus更新到8.9.1
  5. [转]高颜值、好用、易扩展的微信小程序 UI 库,Powered by 有赞
  6. element ui 表单验证为正整数
  7. flutter持久化_【Flutter 实战】大量复杂数据持久化
  8. python怎样清除csv中的数据_使用d清除CSV文件中的数据
  9. 电脑如何进入bios模式_电脑如何进入bios,你还不收藏?
  10. 修改Apache配置文件开启gzip压缩传输
  11. Fibonacci 数列及其计算方法
  12. java设计模式之单例模式
  13. 树莓派输出PWM波驱动舵机
  14. js 大地坐标转经纬度
  15. DOS命令 For Set
  16. C#简易计算器(加减乘除三角函数运算)
  17. Flume Kafka Channel使用案例
  18. 视频播放器软件哪个最好用?盘点6款Windows电脑上超级好用的本地视频播放器
  19. 手机怎么使用涂鸦?分享几个手机视频怎么添加涂鸦的妙招
  20. 蓝奏云 php 协议,蓝奏云网盘最新协议完整版附一套网络验证

热门文章

  1. 多维度缩放——MDS
  2. Oracle 之 proces、session 关系
  3. 人工智能归结原理实验
  4. 2023年国开《Photoshop图像处理》上机实训1-3
  5. 补天平台安全问题收录情况分享记录
  6. PHP 进阶之路 - 揭开 PHP 线程安全的神秘面纱
  7. 垂直门户网站的SEO思路
  8. SAP MRP 消耗的策略及逻辑
  9. (win和win server)dos下通过wmic命令查看硬盘和内存/CPU信息(windows自带命令查看硬件信息)
  10. 科技云报道:云计算走向工业互联网“深水区”