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

目录

  • 前言
  • 总体设计
    • 系统整体结构图
    • 系统流程图
  • 运行环境
  • 模块实现
    • 1. 数据预处理
    • 2. 模型构建
      • 1)定义模型结构
      • 2)优化损失函数
    • 3. 模型训练及保存
      • 1)模型训练
      • 2)模型保存
    • 4. 模型应用
      • 1)制作页面
      • 2)模型导入及调用
      • 3)模型应用代码
  • 系统测试
    • 1. 训练准确率
    • 2. 测试效果
    • 3. 模型应用
      • 1)程序使用说明
      • 2)测试结果
  • 相关其它博客
  • 工程源代码下载
  • 其它资料下载


在这里插入图片描述

前言

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

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

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

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

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

总体设计

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

系统整体结构图

系统整体结构如图所示。

在这里插入图片描述

系统流程图

系统流程如图所示。

在这里插入图片描述

运行环境

本部分包括 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. 测试效果

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

相关代码如下:

python">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相关资料,希望能帮助到所有小伙伴们。


http://www.niftyadmin.cn/n/5040673.html

相关文章

数据结构与算法——13.队列的拓展

这篇文章主要讲一下双端队列,优先队列,阻塞队列等队列的拓展内容。 目录 1.队列拓展概述 2.双端队列的链表实现 3.双端队列的数组实现 4.优先队列无序数组实现 5.阻塞队列 6.总结 1.队列拓展概述 首先来看一张图,来大致了解一下他们的…

【MySQL】 MySQL的增删改查(进阶)--壹

文章目录 🛫数据库约束🌴约束类型🎋NOT NULL约束🎍UNIQUE:唯一约束🌳DEFAULT:默认值约束🎄PRIMARY KEY:主键约束🍀FOREIGN KEY:外键约束&#x1f…

TypeScript中的类型

TypeScript中的类型 1. number2. string3. boolean4. any5. unknown6. void7. never8. object9. array10. tuple11. enum12. type 1. number 数字类型 let num : number 6;2. string 字符串类型 let str : string "Hello World"3. boolean 布尔类型,值有true…

LeetCode 1159.市场分析2

数据准备 Create table If Not Exists Users (user_id int, join_date date, favorite_brand varchar(10)); Create table If Not Exists Orders (order_id int, order_date date, item_id int, buyer_id int, seller_id int); Create table If Not Exists Items (item_id int…

Springboot登录验证的统一拦截处理

在进行Springboot项目开发的时候如何把每次请求都要验证的用户进行提取拦截统一处理 背景 如果不进行统一的拦截处理,其实这是一个非常痛苦的一件事情,因为每次用户请求你都要去进行用户的信息(用户信息存储在session中)的验证&…

力扣刷题-数组-数组理论基础

数组是存放在连续内存空间上的相同类型数据的集合。 需要两点注意的是 数组下标都是从0开始的。数组内存空间的地址是连续的 正是因为数组的在内存空间的地址是连续的**,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。** 注意&…

linux开机自动启动java的jar包项目及开机自动启动Nacos的配置

linux开机自动启动java的jar包项目及开机自动启动Nacos [开机自动启动Nacos的配置 ](https://blog.csdn.net/weixin_42225792/article/details/129805877)[开机自动启动jar包项目的配置 ](https://blog.csdn.net/qq_42320934/article/details/131698450) 开机自动启动Nacos的配…

Unity之手游UI的点击和方向移动

一 Button的点击 1.1 新建UI -> Button 1.2 在Button上面右击添加空物体 1.3 创建脚本挂载到空物体上面 脚本内容添加点击方法,来控制物体的显示隐藏 using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using Unit…