机器学习·L3W2-协同过滤

news2024/11/13 9:27:52

推荐算法

推荐算法可以预测用户评分,并根据评分推荐数据
推荐算法与其他预测算法的区别在于:推荐算法中的数据大多都不完整,用户只对几个电影评分;而预测算法则要求数据完整,便于拟合和预测

协同过滤

评分矩阵Y,左侧索引是名称,栏目是用户名
协同过滤的基本原理就是利用已有的评分数据,对未有的评分数据进行预测,根据评分大小推荐给用户

在这里插入图片描述
本质上用的算法还是线性回归那套

计算公式

J ( x ( 0 ) , . . . , x ( n m − 1 ) , w ( 0 ) , b ( 0 ) , . . . , w ( n u − 1 ) , b ( n u − 1 ) ) = [ 1 2 ∑ ( i , j ) : r ( i , j ) = 1 ( w ( j ) ⋅ x ( i ) + b ( j ) − y ( i , j ) ) 2 ] + [ λ 2 ∑ j = 0 n u − 1 ∑ k = 0 n − 1 ( w k ( j ) ) 2 + λ 2 ∑ i = 0 n m − 1 ∑ k = 0 n − 1 ( x k ( i ) ) 2 ] ⏟ r e g u l a r i z a t i o n J({\mathbf{x}^{(0)},...,\mathbf{x}^{(n_m-1)},\mathbf{w}^{(0)},b^{(0)},...,\mathbf{w}^{(n_u-1)},b^{(n_u-1)}})= \left[ \frac{1}{2}\sum_{(i,j):r(i,j)=1}(\mathbf{w}^{(j)} \cdot \mathbf{x}^{(i)} + b^{(j)} - y^{(i,j)})^2 \right]+ \underbrace{\left[\frac{\lambda}{2}\sum_{j=0}^{n_u-1}\sum_{k=0}^{n-1}(\mathbf{w}^{(j)}_k)^2+ \frac{\lambda}{2}\sum_{i=0}^{n_m-1}\sum_{k=0}^{n-1}(\mathbf{x}_k^{(i)})^2\right]}_{regularization} J(x(0),...,x(nm1),w(0),b(0),...,w(nu1),b(nu1))= 21(i,j):r(i,j)=1(w(j)x(i)+b(j)y(i,j))2 +regularization [2λj=0nu1k=0n1(wk(j))2+2λi=0nm1k=0n1(xk(i))2]
The first summation in (1) is “for all i i i, j j j where r ( i , j ) r(i,j) r(i,j) equals 1 1 1” and could be written:

= [ 1 2 ∑ j = 0 n u − 1 ∑ i = 0 n m − 1 r ( i , j ) ∗ ( w ( j ) ⋅ x ( i ) + b ( j ) − y ( i , j ) ) 2 ] + regularization = \left[ \frac{1}{2}\sum_{j=0}^{n_u-1} \sum_{i=0}^{n_m-1}r(i,j)*(\mathbf{w}^{(j)} \cdot \mathbf{x}^{(i)} + b^{(j)} - y^{(i,j)})^2 \right] +\text{regularization} =[21j=0nu1i=0nm1r(i,j)(w(j)x(i)+b(j)y(i,j))2]+regularization

代码

本质上就是一个矩阵的运算,利用np.sum()化简代码

自定义计算函数cofi_cost_func_v

def cofi_cost_func_v(X, W, b, Y, R, lambda_):
    """
    Returns the cost for the content-based filtering
    Vectorized for speed. Uses tensorflow operations to be compatible with custom training loop.
    Args:
      X (ndarray (num_movies,num_features)): matrix of item features
      W (ndarray (num_users,num_features)) : matrix of user parameters
      b (ndarray (1, num_users)            : vector of user parameters
      Y (ndarray (num_movies,num_users)    : matrix of user ratings of movies
      R (ndarray (num_movies,num_users)    : matrix, where R(i, j) = 1 if the i-th movies was rated by the j-th user
      lambda_ (float): regularization parameter
    Returns:
      J (float) : Cost
    """
    j = (tf.linalg.matmul(X, tf.transpose(W)) + b - Y)*R
    J = 0.5 * tf.reduce_sum(j**2) + (lambda_/2) * (tf.reduce_sum(X**2) + tf.reduce_sum(W**2))
    return J

利用tensorflow求导

iterations = 200
lambda_ = 1
for iter in range(iterations):
    with tf.GradientTape() as tape:

        cost_value = cofi_cost_func_v(X, W, b, Y, R, lambda_)


    grads = tape.gradient( cost_value, [X,W,b] )

    optimizer.apply_gradients( zip(grads, [X,W,b]) )

    if iter % 5 == 0:
        print(f"Training loss at iteration {iter}: {cost_value:0.1f}")

预测变量

  • 矩阵乘法:y_pred=X@W.T+b
  • 合并原始数据:Y_res=R*Y+(1-R)*y_pred

预测二进制变量

原来的 f ( w , b , x ) → f = s i g m o i d ( z ) f(w,b,x)\to f=sigmoid(z) f(w,b,x)f=sigmoid(z)函数
损失函数改为交叉熵即可!

在这里插入图片描述

技巧:平均值正常化

模型评估

  • 不适合冷启动问题
  • 需要额外的信息,很难解释这些额外的信息的含义
  • 梯度下降速度极慢,参数太多
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1994817.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Install pytorch 使用 torch 的例子

如果不知道怎么开始和安装软件 从这里开始 如果需要GPU版本,请选择CUDA,而不是CPU PyTorchhttps://pytorch.org/ Python 3.8.13 | packaged by conda-forge | (default, Mar 25 2022, 06:04:10) [GCC 10.3.0] on linux Type "help", &quo…

k8s环境使用cronjob对mysql8进行备份

一、configmap 数据库备份脚本写入k8s环境的configmap文件,并生成config。 # cat mysql-back-configmap.yaml apiVersion: v1 kind: ConfigMap metadata:name: mysql8backnamespace: crontabs data:mysql8back.sh: |#!/bin/bashDUMPDIR/tmp#backupbackupDatedate…

【专题】2023-2024跨境旅游消费趋势研究报告合集PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p37306 近日,“世界旅游联盟中欧旅游对话”在匈牙利布达佩斯举办,发布《2023 - 2024 跨境旅游消费趋势研究报告》。 报告显示,2023 - 2024 年全球旅游业复苏,跨境旅游人数和支出显著增加…

【Material-UI】Checkbox组件:Indeterminate状态详解

文章目录 一、什么是Indeterminate状态?二、Indeterminate状态的实现1. 基本用法示例2. 代码解析3. Indeterminate状态的应用场景 三、Indeterminate状态的UI与可访问性1. 无障碍设计2. 用户体验优化 四、Indeterminate状态的最佳实践1. 状态同步2. 优化性能3. 提供…

SQL Zoo 10.Window functions

以下数据均来自SQL Zoo 1.Show the lastName, party and votes for the constituency S14000024 in 2017.(显示2017年选区“S14000024”的姓氏、政党和选票) SELECT lastName, party, votesFROM geWHERE constituency S14000024 AND yr 2017 ORDER BY…

多个IT系统数据同步方案-操作标识

这是一个很普遍的方案,实现多个IT系统数据同步: 从上游发出的数据标识,就可以完整的控制数据,当然对上游的要求也多一些,就是打数据标识前一定要读取一下现有的数据。

Spring Boot 基于 SCRAM 认证集成 Kafka 的详解

一、说明 在现代微服务架构中,Kafka 作为消息中间件被广泛使用,而安全性则是其中的一个关键因素。在本篇文章中,我们将探讨如何在 Spring Boot 应用中集成 Kafka 并使用 SCRAM 认证机制进行安全连接;并实现动态创建账号、ACL 权限…

Android Studio生成系统签名platform.jks

准备工作: 系统工程师需要提供以下文件并且在同一个目录文件夹下面 1、platform.pk8 2、platform.x509.pem 3、signapk.jar(通用的) 按照以下顺序执行 1、platform.pk8和platform.x509.pem 生成 .jks 提供platform.pk8、platform.x509.pem 、signapk.jar&…

低代码革命:重塑开发效率与质量的未来

1. 引言 随着信息技术的快速发展,企业对应用程序的需求日益增长。然而,传统的软件开发模式面临着开发周期长、成本高、人才短缺等问题。近年来,“低代码”开发平台如雨后春笋般涌现,承诺让非专业人士也能快速构建应用程序。这种新…

Netty原理及高性能

1. Netty原理 Netty是一个基于Java的异步事件驱动的网络应用框架,他用于快速开发高性能、高可靠性的网络服务器和客户端应用。Netty的原理涉及多个方面,包括 Reactor模式、核心组件、编解码、线程模型以及TCP粘包和拆包处理等。 1.1 Reactor模式 Reactor…

玻璃存储还没整明白,陶瓷纳米存储又来了!

关注我们 - 数字罗塞塔计划 - 在信息爆炸的当下,我们每天产生的数据比以往任何时候都多。其实很多数据都是存储后很少被访问,但仍需要长期保存的“冷数据”。磁带、硬磁盘、光盘等传统存储介质难以提供冷数据存储所需的超长寿命、超大容量和持续可访问性…

Docker Compse单机编排

一.Docker Compse 介绍 Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,你可以使用 YAML 文件来配置应用程序的服务、网络和卷,然后使用单个命令创建和启动所有服务。这使得在开发、测试和部署过程中管理多容器应用程…

精彩分享|暴雨亮相第二十届智能计算国际会议(ICIC 2024)

8月6日至8日,第二十届智能计算国际会议(ICIC 2024)在天津盛大召开,这场由宁波东方理工大学(暂名)主办,天津科技大学承办,中国矿业大学(北京)、中国矿业大学和…

【学习笔记】Matlab和python双语言的学习(非线性规划法)

文章目录 前言一、非线性规划法二、例题:选址问题1.确定决策变量2.确定约束条件3.确定目标函数4.建立模型5.求解 三、代码实现----Matlab1.Matlab 的 fmincon 函数(1)基本用法(2)简单示例 2.Matlab 代码第一问&#xf…

RegNet 图像识别网络,手写阿拉伯数字的图像分类

1、RegNet 网络介绍 regnet 是一个深度学习模型架构,用于图像分类任务。它是由 Facebook AI Research(FAIR)提出的,旨在实现高效的网络设计。regnet 通过在不同的网络层级上增加网络宽度和深度来提高模型性能。 regnet 的设计思…

如何使用 AWS CLI 创建和运行 EMR 集群

为初学者提供清晰易懂的教程 为初学者提供清晰易懂的教程 Apache Spark 和 AWS EMR 上的 Spark 集群 添加图片注释,不超过 140 字(可选) 欢迎来到雲闪世界。Spark 被认为是“大数据丛林之王”,在数据分析、机器学习、流媒体和图形…

DataWhale AI夏令营第四期-魔搭生图task1学习笔记

根据教程提供的链接,进入相应文章了解魔搭生图的主要工作是通过对大量图片的训练,生成自己的模型,然后使用不同的正向、反向提示词使模型输出对应的图片 1.官方跑baseline教程链接:Task 1 从零入门AI生图原理&实践 2.简单列举一下赛事的…

【K8S】K8S架构及相关组件

文章目录 1 K8S总体架构2 相关组件2.1 控制面板组件2.2 节点组件2.3 附加组件 写在最后 1 K8S总体架构 K8S,全称Kubernetes,是一个开源的容器部署和管理平台,由Google开发,后捐献给云原生计算基金会(CNCF)…

algorithm算法库学习之——修改序列的操作2

algorithm此头文件是算法库的一部分。本篇介绍修改序列的操作函数。(2) 修改序列的操作 fill 将一个给定值复制赋值给一个范围内的每个元素 (函数模板) fill_n 将一个给定值复制赋值给一个范围内的 N 个元素 (函数模板) generate 将相继的函数调用结果赋…

Debezium日常分享系列之:Debezium UI 的状态

Debezium日常分享系列之:Debezium UI 的状态 一、下一阶段工作二、设计新的UI三、目前阶段四、更多内容 虽然Debezium的UI是我们愿景的重要组成部分,但开发与Kafka Connect紧密绑定的UI并不是正确的方向。因此,决定冻结当前Web UI项目的开发。…