基于矩阵分解算法的智能Steam游戏AI推荐系统——深度学习算法应用(含python、ipynb工程源码)+数据集(四)

2023-09-21 22:58:29


在这里插入图片描述

前言

本项目采用了矩阵分解算法,用于对玩家已游玩的数据进行深入分析。它的目标是从众多游戏中筛选出最适合该玩家的游戏,以实现一种相对精准的游戏推荐系统。

首先,项目会收集并分析玩家已经玩过的游戏数据,包括游戏名称、游戏时长、游戏评分等信息。这些数据构成了一个大型的用户-游戏交互矩阵,其中每一行代表一个玩家,每一列代表一个游戏,矩阵中的值表示玩家与游戏之间的交互情况。

接下来,项目运用矩阵分解算法,将用户-游戏这稀疏矩阵用两个小矩阵——特征-游戏矩阵和用户-特征矩阵,进行近似替代。这个分解过程会将玩家和游戏映射到一个潜在的特征空间,从而能够推断出玩家与游戏之间的潜在关系。

一旦模型训练完成,系统可以根据玩家的游戏历史,预测他们可能喜欢的游戏。这种预测是基于玩家与其他玩家的相似性以及游戏与其他游戏的相似性来实现的。因此,系统可以为每个玩家提供个性化的游戏推荐,考虑到他们的游戏偏好和历史行为。

总的来说,本项目的目标是通过矩阵分解和潜在因子模型,提供一种更为精准的游戏推荐系统。这种个性化推荐可以提高玩家的游戏体验,同时也有助于游戏平台提供更好的游戏推广和增加用户黏性。

总体设计

本部分包括系统整体结构图和系统流程图。

系统整体结构图

系统整体结构如图所示。

在这里插入图片描述

系统流程图

系统流程如图所示。

在这里插入图片描述

运行环境

本部分包括 Python 环境、TensorFlow环境、 PyQt5环境。

详见博客:https://blog.csdn.net/qq_31136513/article/details/133148686#_38

模块实现

本项目包括4个模块:数据预处理、模型构建、模型训练及保存、模型测试,下面分别给出各模块的功能介绍及相关代码。

1. 数据预处理

数据集来源于Kaggle,链接地址为https://www.kaggle.com/tamber/steam-video-games,此数据集包含了用户的ID、游戏名称、是否购买或游玩、游戏时长,其中:共包含12393名用户,涉及游戏数量5155款。将数据集置于Jupyter工作路径下的steam-video-games文件夹中。

详见博客:https://blog.csdn.net/qq_31136513/article/details/133148686#1__97

2. 模型构建

数据加载进模型之后,需要定义模型结构,并优化损失函数。

1)定义模型结构

使用矩阵分解算法,将用户-游戏这稀疏矩阵用两个小矩阵——特征-游戏矩阵和用户-特征矩阵,进行近似替代。

详见博客:https://blog.csdn.net/qq_31136513/article/details/133151049#1_54

2)优化损失函数

L2范数常用于矩阵分解算法的损失函数中。因此,本项目的损失函数也引入了L2范数以避免过拟合现象。使用Adagrad优化器优化模型参数。

详见博客:https://blog.csdn.net/qq_31136513/article/details/133151049#2_91

3. 模型训练及保存

由于本项目使用的数据集中,将游戏的DLC (Downloadable Content,后续可下载内容)单独作为另一款游戏列举,因此,在计算准确率时,DLC和游戏本体判定为同一款游戏,同系列的游戏也可以判定为同一款。

详见博客:https://blog.csdn.net/qq_31136513/article/details/133151049#3__105

1)模型训练

详见博客:https://blog.csdn.net/qq_31136513/article/details/133151049#1_148

2)模型保存

为方便使用模型,需要将训练得到的结果使用Joblib进行保存。

详见博客:https://blog.csdn.net/qq_31136513/article/details/133151049#2_187

4. 模型应用

一是制作页面的布局,获取并检查输入的数据;二是将获取的数据-与之前保存的模型进行匹配达到应用效果。

1)制作页面

详见博客:https://blog.csdn.net/qq_31136513/article/details/133151109#1_80

2)模型导入及调用

详见博客:https://blog.csdn.net/qq_31136513/article/details/133151109#2_290

3)模型应用代码

详见博客:https://blog.csdn.net/qq_31136513/article/details/133151109#3_341

系统测试

本部分包括训练准确率、测试效果及模型应用。

1. 训练准确率

训练集上的准确率达到81%以上,如图所示。

在这里插入图片描述

2. 测试效果

将数据代入模型进行测试,使用上述步骤中的准确度计算函数,推荐游戏与实际购买游戏进行对比。

相关代码如下:

import numpy as np

n_examples = 5
users = np.random.choice(test_users_idx, size=n_examples, replace=False)
rec_games = np.argsort(-rec)

for user in users:
    purchase_history = np.where(train_matrix[user, :] != 0)[0]
    recommendations = rec_games[user, :]
    new_recommendations = recommendations[~np.in1d(recommendations, purchase_history)][:k]
    
    print('给id为{0}的玩家推荐的游戏如下: '.format(idx2user[user]))
    print(','.join([idx2game[game] for game in new_recommendations]))
    
    print('玩家实际购买游戏如下: ')
    print(','.join([idx2game[game] for game in np.where(test_matrix[user, :] != 0)[0]]))
    
    precision = 100 * precision_at_k(new_recommendations, np.where(test_matrix[user, :] != 0)[0])
    print('准确率: {:.2f}%'.format(precision))
    print('\n')

测试集输出结果如图所示。

在这里插入图片描述

3. 模型应用

本部分包括程序使用说明和测试结果。

1)程序使用说明

打开程序,初始界面如图所示。

在这里插入图片描述

界面分为5个下拉输入框和6个按钮,通过输入或者选项选择游戏,单击“请输入游戏时间”的按钮,如图所示。

在这里插入图片描述

如果前面对应的游戏名输入正确,可以输入游戏时间,如图所示。

在这里插入图片描述

如果不正确,会弹出对话框,要求正确输入,如图所示。

在这里插入图片描述

当所有数据被正确输入后,单击“推荐开始”按钮,弹出对话框,给出推荐的游戏,如图所示。

在这里插入图片描述

如果有数据未输入,则会弹出对话框,如图所示。

在这里插入图片描述

2)测试结果

测试结果如图所示。

在这里插入图片描述

相关其它博客

基于矩阵分解算法的智能Steam游戏AI推荐系统——深度学习算法应用(含python、ipynb工程源码)+数据集(一)

基于矩阵分解算法的智能Steam游戏AI推荐系统——深度学习算法应用(含python、ipynb工程源码)+数据集(二)

基于矩阵分解算法的智能Steam游戏AI推荐系统——深度学习算法应用(含python、ipynb工程源码)+数据集(三)

工程源代码下载

详见本人博客资源下载页


其它资料下载

如果大家想继续了解人工智能相关学习路线和知识体系,欢迎大家翻阅我的另外一篇博客《重磅 | 完备的人工智能AI 学习——基础知识学习路线,所有资料免关注免套路直接网盘下载
这篇博客参考了Github知名开源平台,AI技术平台以及相关领域专家:Datawhale,ApacheCN,AI有道和黄海广博士等约有近100G相关资料,希望能帮助到所有小伙伴们。

更多推荐

SMTP是什么?谈谈SMTP的含义

SMTP,即SimpleMailTransferProtocol,也称为简单邮件传输协议,是一种用于电子邮件传输的协议。它能够将邮件从发送者的电子邮件客户端传输到接收者的电子邮件服务器,并通过其他协议将邮件传递给接收者的电子邮件客户端。SMTP协议的作用是让邮件能够成功投递并发送到指定的收件人邮箱。蜂邮给大家说说:SM

【产品运营】如何提升B端产品的竞争力(上)

B端产品的核心竞争力不是只有产品功能丰富度、易用度这些维度,判断产品核心竞争力应该基于产品所定位解决的问题场景。B端产品的成交因素很多,包括产品本身、公司品牌、客情关系、成功案例、产品定价、客户成熟度、需求匹配度等,本文只谈产品本身。一、产品竞争力类型B端产品本身的核心竞争力不仅只有产品功能丰富度、易用度这些维度,判断

如何下载安装 WampServer 并结合 cpolar 内网穿透,轻松实现对本地服务的公网访问

文章目录前言1.WampServer下载安装2.WampServer启动3.安装cpolar内网穿透3.1注册账号3.2下载cpolar客户端3.3登录cpolarwebui管理界面3.4创建公网地址4.固定公网地址访问前言Wamp是一个Windows系统下的Apache+PHP+Mysql集成安装环境,是一组常用来搭

【操作系统笔记】并发安全问题

用户态抢占和内核态抢占内核中可以执行以下几种程序:①当前运行的进程:陷阱程序(系统调用)和故障程序(pagefault),进程运行在内核态的时候,其实就是在执行进程在用户态触发的异常对应的异常处理程序②中断处理程序③内核线程用户态线程抢占的调度时机检查当前线程是否需要被抢占的时机点(检查点):时钟中断发生,在时钟中断处

Mybatis的mapper接口实现原理

目录1概述2动态代理和反射对象3源码分析4总结1概述为啥mybatis的mapper只有接口没有实现类,但它却能工作?说起mybatis,大伙应该都用过,有些人甚至底层源码都看过了。在mybatis中,mapper接口是没有实现类的,取而代之的是一个xml文件。也就是说我们调用mapper接口,其实是使用了mapper

代理IP和Socks5代理:跨界电商与爬虫的智能引擎

跨界电商,作为全球市场的一部分,对数据的需求越来越大。同时,随着互联网的发展,爬虫技术也在不断演进,成为了跨界电商的关键工具之一。然而,随之而来的是网站的反爬虫机制和网络安全风险。在这种情况下,代理IP和Socks5代理应运而生,为企业提供了数据采集的解决方案和网络安全的保护。本文将深入研究代理IP和Socks5代理在

视频去LOGO的方法,AI自动完美地去除视频LOGO

喜欢做影视剧剪辑的朋友,可能会遇到下载的影视剧本身存在字幕、台标的情况,这些和新的剪辑主题不相符的原片元素,都会影响我们最终的成片效果。不过也无需烦恼哦,我们可以利用AI视频处理工具,自动去除视频中的logo或其它物体。只要利用好工具,想要去除视频中的logo是一件很简单的事情,AI抠图工具,只需导入需要处理的视频文件

ClickHouse面向列的数据库管理系统(原理简略理解)

目录官网什么是Clickhouse什么是OLAP面向列的数据库与面向行的数据库特点为什么面向列的数据库在OLAP场景中工作得更好为什么ClickHouse这么快真实的处理分析查询OLAP场景的关键属性引擎作用ClickHouse引擎输入/输出CPU官网https://clickhouse.com/什么是Clickhou

Kotlin | 在for、forEach循环中正确的使用break、continue

文章目录for循环中使用break、continueLabel标签forEach中如何退出循环资料Kotlin有三种结构化跳转表达式:return:默认从最直接包围它的函数或者匿名函数返回。break:终止最直接包围它的循环。continue:继续下一次最直接包围它的循环。for循环中使用break、continuef

智能指针介绍(C++)

前言关于智能指针大家或多或少都有听说过,因为在C++中没有GC,所以存在很多内存泄露的风险,所以基于RAII思想设计出了,智能指针,智能指针经过了很多个版本的迭代,从刚开始在C++98中推出了auto_ptr,但是auto_ptr不好用,它的设计存在重大缺陷,又因为C++的官方库更新的很慢,所以在接下来的n年中,没有改

openEuler 亮相全球顶级开源盛会 OSSUMMIT 2023,持续推动智能化未来的实现

2023年9月19日,全球顶级开源峰会OSSUMMITEU2023在西班牙-毕尔巴鄂正式开场。openEuler作为钻石级别赞助参会。这是openEuler继去年正式亮相后的第二次全面参加该峰会。本次会议,openEuler带来Keynote及多场分论坛演讲,涵盖LinuxKernel、编译器、AI、多样性计算、软件供

热文推荐