电影推荐(2)-----基于物品的协同过滤算法关联性分析

news2024/11/24 3:24:42

目录

1.算法的简单图解

2.算法的基本分析过程

3.算法的核心

4.算法的实现

5.关联分析的概念

5.1事务和事务库

5.2项

5.3项集

6.支持度

6.1受欢迎程度

6.2最小支持度

6.3关联条件

7.置信度

8.提升度


1.算法的简单图解

2.算法的基本分析过程

3.算法的核心

上面的全部都是官方的解释和分析,实际上这个基于产品的协同过滤算法就是去分析这个用户的历史喜好,其根据这个历史的分析去推荐和这个用户的喜好产品类似的产品;这个就是这个基于物品的协同过滤算法的核心要义;

4.算法的实现

相关的分析,函数的参数意义说明以及思路,都是以注释的形式写在了代码里面,小伙伴们根据需要自行了解学习哈~~

'''
基于物品的协同过滤算法步骤/思路

1.寻找相似的电影
  #构建数据透视表
  #计算皮尔逊相关系数

2.寻找目标用户感兴趣的电影
  #计算这个求和的结果
  # (用户对于这个电影的评分&&这个电影和用户喜欢的电影的相关系数的乘积)

3.根据推荐规则进行推荐
  #利用函数进行排序,根据索引找到推荐的电影名称
'''

# 导入pandas模块,简称pd
import pandas as pd

'''一、寻找相似的电影'''

# 1. 读取并拼接数据集
ratings = pd.read_csv("/Users/movie/ratings.csv")
movies = pd.read_csv("/Users/movie/movies.csv") 

# 调用merge函数对于这个数据集合进行合并
# 实际上这两个数据集合分别是对于这个电影的评分以及这个电影的相关属性说明
# 相关属性里面包括这个id,名称,编号之类的,让这两个数据表进行合并,方便我们后续的管理
result = pd.merge(ratings, movies) 

# 2. 构建数据透视表
# 这个函数的参数分别代表的就是我们的行索引,列索引,对应的数值含义
user_movie = result.pivot_table(index="用户id", columns="电影名", values="评分")

# 3. 计算每两部电影间的皮尔逊相关系数
# pearson指的就是相关系数的类型:皮尔逊相关系数
# 因为这个系数的类型很多(例如斯皮尔曼系数)所以这个使用参数进行说明
corrMatrix = user_movie.corr(method="pearson")

'''二、寻找目标用户感兴趣的电影'''

# 1. 获取「用户1」评分过的电影数据
##1. 通过.loc属性,按照index的值,也就是【1】来访问行数据;
###2. 使用dropna()函数,筛选出所有不是空值的数据,这时获取到的就是「用户1」评分过的所有电影数据。
user1Ratings = user_movie.loc[1].dropna()

# 2. 预测「用户1」对未评分电影的感兴趣程度
# 2.1 依次获取「用户1」评分过的电影的名称及评分
name = user1Ratings.index
score = user1Ratings.values

# 2.2 获取电影之间的皮尔逊相关系数
#1. 在corrMatrix中,先通过列索引和变量name来获取「用户1」评分过电影与所有电影之间的皮尔逊相关系数;
#2. 再使用drop()函数,并将参数index=name传入到该函数中,删除「用户1」评分过的电影的行数据。
# 这个地方进行删除是因为这个我们要计算的是用户喜欢的电影和未评分的电影的相关性,评分过的电影不在我们的
# 考虑范围之内
simsMovie = corrMatrix[name].drop(index=name)

# 2.3 计算分数与皮尔逊相关系数之间的乘积
prod = score * simsMovie

# 2.4 求和
#对prod变量调用sum()函数,并将axis=1作为参数传入到该函数中,用于指定按水平方向进行求和。
# 这个球和计算的结果就是我们对于这个用户的电影推荐的程度,求和分数越高越容易被推荐
movieList = prod.sum(axis=1)

'''三、针对目标用户和推荐规则,作出推荐'''

# TODO 3.1 将推荐列表按照感兴趣程度降序排序
# 要找出「用户1」感兴趣程度最高的前5部电影,那就得先将movieList按照感兴趣程度进行降序排序。
# 只需对movieList这个Series使用sort_values()函数,并传入参数ascending=False,就可将Series按照它的值,也就是感兴趣程度,进行降序排序。
#注意⚠️,当对一个Series使用sort_values()时,不需要传入参数by,否则会报错。
# 这个回顾一下by参数的意义:
# 就是我们的这个排序标准有多个的时候:我们需要根据哪一项指标进行排序,这个by表示的就是进行排序的指标
# 因为这个里面只有一个求和的结果,因此不需要对于这个参数进行设置
movieList=movieList.sort_values(ascending=False)

# TODO 3.2 获取感兴趣程度最高的前5部电影
# 我们先通过访问movieList的.index属性来获取全部索引,再通过切片的方式就可以获取到前五个索引。
movieList=movieList.index[0:5]

# TODO 3.3 获取可推荐电影的名称
movieList=movieList.values

# 输出movieList进行查看
print(movieList)

5.关联分析的概念

现在你知道这个套餐是怎么做出来的吧,哈哈哈~~,都是有自己的原理的,这个原理就是我们今天学习的关联性分析

5.1事务和事务库

5.2项

5.3项集

注意,项集内不存在相同的项,如{薯条,可乐,可乐},我们根据他们的这个项集的出现的次数,来确定这个集合的受欢迎程度

6.支持度

6.1受欢迎程度

这个支持度实际上就是这个组合的受欢迎程度

6.2最小支持度

最小支持度:用这个数据进行筛选我们的出现的频率很低的项集;

6.3关联条件

这个是在大于最小支持度的频繁项集里面才有的概念;

7.置信度

置信度的举例说明:

同样这个里面也有最小置信度的概念:

8.提升度

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

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

相关文章

【个人学习】JVM(7):方法区概述、方法区内部结构、垃圾回收等

方法区 栈、堆、方法区的交互关系 从线程共享与否的角度来看 ThreadLocal:如何保证多个线程在并发环境下的安全性?典型场景就是数据库连接管理,以及会话管理。 栈、堆、方法区的交互关系 下面涉及了对象的访问定位 Person 类的 .class 信息存放在方法区中person 变量存放…

基于web的铁路订票管理系统

TOC springboot347基于web的铁路订票管理系统--论文 研究背景 近年来,由于计算机技术和互联网技术的飞速发展,所有企事业单位内部都是数字化、信息化、无纸化的发展趋势,随着这种趋势的发展,各种决策系统、辅助系统也应运而生&…

计量自动化终端上行通信规约

物理层 TCP 和 UDP 的传输接口 该类接口的登录链接和心跳检测采用链路测试服务,链路测试周期可设定。 参见 TCP/IP 协议规范。 串行通信传输接口 字节传输按异步方式进行,它包含 8 个数据位、1 个起始位“0”、1 个偶校验位 P 和 1 个停止位“1”。 …

SEO优化:如何优化自己的文章,解决搜索引擎不收录的问题

可以使用bing的URL检查,来检查自己的文章是不是负荷收录准测,如果页面有严重的错误,搜索引擎是不会进行收录的,而且还会判定文章为低质量文章! 检查是否有问题。下面的页面就是有问题,当然如果是误报你也可…

yolov5和yolov7车牌识别检测(可检测黄牌、绿牌、双层车牌等各种车牌,准确率高,提供界面)

实现一个车牌识别系统,使用YOLOv5和YOLOv7这两种不同的模型来进行车牌的检测。下面我将提供一个完整的项目概述,包括模型训练脚本、车牌识别代码以及两个GUI界面,分别用于处理静态图片和实时视频流 1. 模型训练 YOLOv5 和 YOLOv7 的训练脚本…

Flask条件查询接口出现SQL注入,使用参数化查询:写法的解决方案(附带企业级开发实际例子与经验分享)

背景: 一个接口出现了SQL注入,条件查询场景下出现,形如下图 解决问题时,我们先要问,什么是SQL注入? 下面的资料有助于针对SQL注入是什么、如何验证SQL注入解决成功了,提供一些思路&#xff0c…

【功能自动化】进阶版——使用mysql数据表获取参数,并批量更新数据

环境搭建: 1.需要配置WebTours网站 2.安装pymysql pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pymysql 3.mysql数据表user表内容 实现代码 # 导入包 from selenium import webdriver from selenium.webdriver.support.select import Select f…

Keil C51 插件 检测变量名引用不统一

此插件解决的问题 Keil 插件 -- Python 代码 import chardet, sys, glob import re# 变量名字典 key--数据名 value--数据s类型 variable_dic {} # 报错变量名字典 error_dic {}def add_key(key, value):if key in variable_dic:error_dic[key] valueelse:variable_dic[key…

【js】各类前端输入校验方法

使用方式: 源码: //电话号码 export const checkModbile (rule,value,callback)>{if(value undefined){callback();return;} if(value.length 11){var reg /^1[3,4,5,6,7,8,9][0-9]{9}$/;}else if(value.length 13 || value.length 8 || valu…

SQL 二阶注入 (injection 第二十四关)

简介 SQL注入(SQL Injection)是一种常见的网络攻击方式,通过向SQL查询中插入恶意的SQL代码,攻击者可以操控数据库,SQL注入是一种代码注入攻击,其中攻击者将恶意的SQL代码插入到应用程序的输入字段中&am…

聚星文社推文软件

聚星文社软件是一款面向作家和读者的社交平台,聚星文社https://iimenvrieak.feishu.cn/docx/ZhRNdEWT6oGdCwxdhOPcdds7nof 致力于为用户提供创作、交流和阅读的全方位服务。 作家可以在平台上发布自己的作品,与读者们进行互动和交流。 读者们则可以在平台…

基于ssm+vue+uniapp的医院挂号预约系统小程序

开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…

【气象百科】光伏自动气象站的功能优势

随着全球对可再生能源需求的日益增长,光伏发电作为清洁、可再生的能源形式,正逐步成为推动能源转型的重要力量。而光伏自动气象站,作为光伏电站智能化管理的重要组成部分,其独特的功能优势在提升光伏系统效率、优化运维策略、增强…

安全检测GO内外链跳转页面html源码

源码介绍 一款清新好看的跳转源码,底部自行更换跳转目标地址,可用来预防人机或者进行c验证页面! 源码下载 安全检测GO内外链跳转页面html源码

Apache Paimon走在正确的道路上|一些使用体验和未来判断

Apache Paimon这个框架大家应该都不陌生了。 在实际工作中大家应该多多少少都用到,这个文章是一个简单的使用体会。不涉及湖框架的拉踩,我们的着眼点是解决实际问题。 我来结合自身体会跟大家说说Paimon这个框架和对未来的一些判断。大家可以参考&#x…

《系统架构设计师教程(第2版)》第15章-面向服务架构设计理论与实践-03-SOA主要协议和规范

文章目录 1. UDDI协议2. WSDL规范2.1 概述2.2 WSDL文档的基本结构 3. SOAP协议4. REST规范4.1 资源 (Resource)4.2 表述 (Representational)4.3 状态转移 (State Transfer)4.4 超链接 1. UDDI协议 概述 统一描述、发现和集成协议Universal Description Discovery and Integrat…

力扣面试经典算法150题:跳跃游戏

跳跃游戏 今天的题目是力扣面试经典150题中的数组的中等难度题:跳跃游戏。 题目链接:https://leetcode.cn/problems/jump-game/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 给定一个非负整数数组 nums,你最初…

PHPStorm如何使用Phalcon框架的依赖

问题背景 在上一篇文章里面写的如何把Phalcon 集成到PhpStorm里面,发现有个地方讲得不是很清楚,就是在使用Phalcon开发的过程中,会发现没有Phalcon框架的代码提示,这个让人感到很难受,写代码的效率也会降低不少。当时讲得是在项目的外部库下导入依赖源, 然后在写代码的时…

解决Win复制到U盘文件在KylinOS不显示

解决Win复制到U盘文件在KylinOS不显示 1、步骤一:识别U盘2、步骤二:格式化U盘3、步骤三:验证4、注意事项 💖The Begin💖点点关注,收藏不迷路💖 在日常使用中,我们可能会遇到这样的情…

Sentinel-1 Level 1数据处理的详细算法定义(六)

《Sentinel-1 Level 1数据处理的详细算法定义》文档定义和描述了Sentinel-1实现的Level 1处理算法和方程,以便生成Level 1产品。这些算法适用于Sentinel-1的Stripmap、Interferometric Wide-swath (IW)、Extra-wide-swath (EW)和Wave模式。 今天介绍的内容如下: Sentinel-1 L…