从examples中学spark(三):ALSExample.scala

ALS算法通过矩阵分解解决评分数据集的稀疏性问题,假设打分矩阵近似低秩。它填充稀疏矩阵,预测用户对产品的评分,从而实现推荐。算法分为显式反馈和隐式反馈,数值代表偏好或置信等级。本文探讨ALS原理并计划进行实操和总结。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录


##学习前(理论)
最小二乘法(Spark使用的是交叉最小二乘法(ALS)来最优化损失函数——ALS 的目标函数不是凸函数,所以固定一部分参数优化另外一部分参数,从而一般很难求得全局最优解)

基于矩阵分解的推荐算法(评分数据集中,并不是每个用户都对每个产品进行过评分,所以这个矩阵往往是很稀疏的【所以更应该多注意过拟合的问题】,也就是说用户i对产品j的评分很多地方是空的,ALS所做的事情就是将这个稀疏矩阵通过一定的规律填满,这样就可以从矩阵中得到任意一个user对任意一个product的评分,然后以此为据做推荐。所以说,ALS算法的核心就是:打分矩阵是近似低秩的。换句话说,打分矩阵A(m∗n)”可以由“用户喜好特征矩阵U(m∗k)”和“产品特征矩阵V(n∗k)”的乘积。

显示反馈与隐式反馈(显式数据的数值代表偏好,隐式数据【无正面的直接表达用户喜好情况的数据】的数值代表了置信等级(confidence level))
##学习中(领悟)

// scalastyle:off println
package org.apache.spark.examples.ml

// $example on$
import org.apache.log4j.{Level, Logger}
import org.apache.spark.ml.evaluation.RegressionEvaluator
import org.apache.spark.ml.recommendation.ALS
// $example off$
import org.apache.spark.sql.SparkSession

object ALSExample {

  // $example on$
/**  当你声明了一个 case class(样例类)时,scala会帮助我们做下面几件事情:
  1 构造器中的参数如果不被声明为var的话,它默认的话是val类型的,但一般不推荐将构造器中的参数声明为var
  2 自动创建伴生对象,同时在里面给我们实现子apply方法,使得我们在使用的时候可以不直接显示地new对象
  3 伴生对象中同样会帮我们实现unapply方法,从而可以将case class应用于模式匹配
  4 实现自己的toString、hashCode、copy、equals方法
  */
  case
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值