推荐系统(RS)

news2024/11/18 18:40:26

主流推荐算法

协同过滤算法

协同过滤算法的原理

根据用户群体对产品偏好的数据,发现用户之间的相似性或者物品之间的相似性,并基于这些相似性为用户作推荐。

  • 基于用户的协同过滤算法(User-based Collaborative Filtering)
    其本质是:寻找相似的用户,进而对用户推荐相似用户关注的产品。

如下表所示,用户1和用户2都给商品A,B,C打了高分,那么可以将用户1和用户2划分在同一个用户群体,此时若用户2还给商品D打了高分,那么就可以将商品D推荐给用户1。
image-20230108113251327

  • 基于物品的协同过滤算法(Item-based Collaborative Filtering)
    其本质是:根据用户的历史偏好信息,将类似的物品推荐给用户

如下表所示,图书A和图书B都被用户1,2,3购买过(1表示购买,0表示未购买),那么可以认为图书A和图书B具有较强的相似度,即可判断喜欢图书A的用户同样也会喜欢图书B。当用户4购买图书B时,根据图书A和图书B的相似性,可将图书A推荐给用户4。
image-20230108113801569
大多应用场景偏向于使用基于物品的协同过滤算法。主要有如下两个原因:

原因一:通常用户的数量是非常庞大的(如淘宝数亿的用户群体),而物品的数量相对有限,因此计算不同物品之间的相似度往往比计算不同用户的相似度容易很多。

原因二:用户的喜好较为多变,而物品属性较明确不随时间变化,过去用户对物品的评分长期有效,所以物品间的相似度比较固定,因此可以预先离线计算好物品间的相似度,把结果存在表中,向客户进行推荐时再使用

协同过滤算法简单实例

import numpy as np

# 创建一个用户-物品评分矩阵(示例数据)
ratings = np.array([
    [5, 4, 0, 0, 1],
    [4, 0, 0, 0, 2],
    [0, 5, 3, 0, 0],
    [0, 0, 0, 4, 5]
])

# 计算用户相似度(使用余弦相似度)
def cosine_similarity(user1, user2):
    mask = (user1 > 0) & (user2 > 0)
    if np.sum(mask) == 0:
        return 0
    else:
        dot_product = np.sum(user1[mask] * user2[mask])
        norm_user1 = np.linalg.norm(user1[mask])
        norm_user2 = np.linalg.norm(user2[mask])
        return dot_product / (norm_user1 * norm_user2)

# 根据用户相似度进行推荐
def user_based_collaborative_filtering(ratings, user_id, num_recommendations):
    num_users, num_items = ratings.shape
    recommendations = np.zeros(num_items)

    for i in range(num_users):
        if i != user_id:
            similarity = cosine_similarity(ratings[user_id], ratings[i])
            recommendations += similarity * ratings[i]

    # 找到用户未评分的物品
    unrated_items = (ratings[user_id] == 0)

    # 对用户未评分的物品进行推荐
    recommended_items = np.argsort(recommendations)[::-1]

    return recommended_items[unrated_items][:num_recommendations]

# 示例:为用户0进行协同过滤推荐
user_id = 0
num_recommendations = 2
recommendations = user_based_collaborative_filtering(ratings, user_id, num_recommendations)
print("为用户0推荐的物品索引:", recommendations)

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

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

相关文章

Leetcode刷题详解——四数之和

1. 题目链接:四数之和 2. 题目描述: 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应&#xff0…

『力扣刷题本』:相交链表

咳咳,实在抱歉,刚开始心气太高了,叫『每日一题』,我是真的坚持不下了。 经过这次打击,我算是摸明白自己在写博客这件事情上几斤几两了,现在预计一周两更,再慢慢把更新频率提上来。 正在努力补…

python写的自动按键和鼠标连点

自己用python写的自动按键和鼠标自动点击。 分享一下源码,比较干净的,缺点就是是python打包有点大50多M from PyQt5 import QtWidgets, uic, QtCore from pynput import keyboard, mouse import pygetwindow as gw from PyQt5.QtGui import QPainter, Q…

YOLOv7改进实战 | 更换轻量化主干网络Backbone(一)之Ghostnet

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

Netty常用类与接口

netty架构图 ServerBootstrap 、 Bootstrap ServerBootstrap :服务器的引导类,可以绑定服务器和端口,配置 Channel、ChannelHandler等。 Bootstrap:客户端的引导类。可以开启客户端,连接服务端的端口,配置…

矩阵系统功能介绍

数据大屏:监测读取后台数据 AI素材库:一键去水印功能 将视频做出自己的 AI智能文案:一键生成各种文案,解决文案编写困难的问题 视频剪辑:一键剪辑多个视频

vue3引入全局js

main.js中引入js,设置全局属性 m a p : a p p . c o n f i g . g l o b a l P r o p e r t i e s . map:app.config.globalProperties. map:app.config.globalProperties.map引入js对象 vue页面中使用。引入vue实例: import {getCurrentInstance} from “…

VS2022更换背景壁纸逐步图示教程

🦄个人主页:修修修也 ⚙️操作环境:Visual Studio 2022 目录 一.下载壁纸插件 二.更改自定义壁纸 三.调整壁纸布局 一.下载壁纸插件 因为更改自定义壁纸需要一个插件的辅助,所以我们要先下载一个小插件 首先,打开VS2022,点击"扩展"->"管理扩…

无人机电力巡检:国网安徽实际案例解析

在科技快速发展的今天,传统行业正在经历前所未有的转型。电力巡检,这一看似传统且乏味的任务,却因为无人机技术的介入而焕发新生。今天,让我们深入了解一个具体的案例,探索无人机如何革新电力巡检。 案例背景&#xff…

Postman —— postman的介绍和安装

Postman的介绍 Postman 是一款谷歌开发的接口测试工具,使API的调试与测试更加便捷。 它提供功能强大的 Web API & HTTP 请求调试。它能够发送任何类型的HTTP 请求 (GET, HEAD, POST, PUT..),附带任何数量的参数 headers postman是一款支持http协议的接口调试与…

【试题020】C语言自减运算符例题

1.题目&#xff1a;设int a1&#xff0c;b6;&#xff0c;执行表达式--all(b8)后&#xff0c;a和b的值分别是 &#xff1f; 2.代码分析&#xff1a; #include <stdio.h> int main() {//设int a1&#xff0c;b6;执行表达式--all(b8)后&#xff0c;a和b的值分别是?int a …

【手写数字识别】CNN卷积神经网络入门案例

安装Anaconda 下载地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 安装完成后&#xff0c;在CMD窗口 输入conda --help 查看是否安装成功 使用conda创建环境 conda create --name tf python3.7conda activate tf在 tf 环境中安装TensorFlow pip in…

基于SpringCloud实现房产销售平台的设计与实现项目【项目源码+论文说明】

摘要 信息技术的发展推动了管理系统的进步&#xff0c;目前各种行业都积极参与管理系统的建设工作。特别是疫情带来的影响&#xff0c;让传统行业逐渐认识到只有通过在线管理才能继续的发展。房产销售平台是为求租者提供房源必备的平台&#xff0c;如何找到一个好的房源是生活…

PostgreSQL数据库结合内网穿透实现公网远程连接本地

文章目录 前言1. 安装postgreSQL2. 本地连接postgreSQL3. Windows 安装 cpolar4. 配置postgreSQL公网地址5. 公网postgreSQL访问6. 固定连接公网地址7. postgreSQL固定地址连接测试 前言 PostgreSQL是一个功能非常强大的关系型数据库管理系统&#xff08;RDBMS&#xff09;,下…

某马机房预约系统 C++项目(一)

机房预约系统 1、项目介绍 本项目来源于哔哩哔哩 c机房预约系统&#xff0c;本系统采用文件存储。 2、项目流程图 3、创建新项目 首先&#xff0c;我们来新建一个新项目&#xff0c;创建一个.cpp文件 4、创建主菜单 功能描述&#xff1a; 提供设计主菜单&#xff0c;与用…

WGCNA分析教程五 | [更新版]

一边学习&#xff0c;一边总结&#xff0c;一边分享&#xff01; 往期WGCNA分析教程 WGCNA分析 | 全流程分析代码 | 代码一 WGCNA分析 | 全流程分析代码 | 代码二 WGCNA分析 | 全流程分析代码 | 代码四 关于WGCNA分析教程日常更新 学习无处不在&#xff0c;我们的教程会在…

zabbix监控nginx的状态页面

zabbix监控nginx的状态页面 文章目录 zabbix监控nginx的状态页面1.环境说明2.所涉及到的知识点3.在nginx主机上安装zabbix_agent4.开启nginx状态显示页面5.进入zabbix的web页面配置主机&#xff0c;监控项&#xff0c;触发器5.1.添加主机5.2.创建监控项5.3.创建触发器 1.环境说…

Android高版本读取沙盒目录apk解析安装失败解决方案

bug场景&#xff1a; 应用内升级下载apk完成后安装&#xff0c;vivo&#xff08;Android13&#xff09;手机会报解析包错误&#xff0c;7.0及以上的手机是没问题的。开始以为是v1,v2签名问题导致的&#xff0c;但是我用浏览器下载下来的安装包是能够正确安装的。排除v1,v2签名的…

蓝桥杯(刷题统计,特别数的和 C++)

思路&#xff1a; 1、这题很简单&#xff0c;分两种情况累加和 &#xff0c;&#xff08;day%60||day%70&#xff09;即周六周天加上b&#xff0c;其它时候加上a。 2、注意的点在于数据可能达到&#xff0c;所以数据类型首先要开long long。 3、因为数据达到&#xff0c;所以直…

上海市通过区块链技术攻关 构建数字经济可信安全技术底座

日前&#xff0c;上海市印发《上海区块链关键技术攻关专项行动方案&#xff08;2023—2025年&#xff09;》&#xff08;以下简称《行动方案》&#xff09;&#xff0c;提出到2025年&#xff0c;在区块链体系安全、密码算法等基础理论以及区块链专用处理器、智能合约、跨链、新…