当前位置: 首页 > news >正文

基于物品的协同过滤算法简单实战应用

目录

  • 前言
    • 此文章就不介绍推荐算法内部逻辑了,重在实现
  • 一、数据库设计
  • 二、代码实现
    • 1.基于物品的协同过滤算法实现智能推荐
    • 2.结果
  • 总结

前言

提示:此文章作为实际开发过程中的文档记录,下面案例仅供参考

随着业务的不断扩展,需要一些个性化的功能来增加亮点,本章介绍了个性化功能之一的推荐功能。 使用基于物品的协同过滤算法来实现推荐功能。

此文章就不介绍推荐算法内部逻辑了,重在实现

一、数据库设计

直接先上数据库

字段名称
IDID
USER_ID用户ID
ITEM_ID物品ID
PREFERENCE偏好值

这是最基本的格式,只需要USER_IDITEM_IDPREFERENCE这三个字段就可以实现行为数据存储。

这里的ITEM_ID为实际需要推荐对象的唯一键

当然,也可以根据实际业务,加上需要的字段,比如时间。

下面是数据准备,可以作为测试数据

USER_IDITEM_IDPREFERENCECRT_TIMEID
14431854689698652162.52024-06-21 12:37:59576139542714068993
144497619852462080032024-06-21 12:38:12576139597470707713
151020216868433510452024-06-21 13:03:00576136183911231489
15732583516366479360.12024-08-12 13:52:11595002384531664896
2660242226146836483170791528048721920.32024-08-09 11:25:49593876702485491713
2660242226146836484188453329499791360.32024-08-09 11:53:06593882772440297473
26602422261468364843297967298630860822024-06-21 12:40:04576140067018846209
26602422261468364844318546896986521652024-06-21 12:43:591
2660242226146836484449761985246208002.52024-06-21 12:39:18576139876173819905
26602422261468364851020216868433510422024-06-21 12:39:07576139829084368897
32435438752215859241055458199229644852024-06-21 12:49:14576142086932738049
32435438752215859243297967298630860842024-06-21 12:47:142
3243543875221585925102021686843351042.52024-06-21 12:46:40576141728726593537
3243543875221585925347956025521807364.52024-06-21 12:47:323
40514538776041881941128743411596083242024-06-21 12:57:2111
40514538776041881943297967298630860842024-06-21 12:55:599
40514538776041881944318546896986521622024-06-21 12:55:378
40514538776041881944497619852462080032024-06-21 12:55:077
40514538776041881951020216868433510442024-06-21 12:54:336
4051453877604188195347956025521807363.52024-06-21 12:56:3010
40514538943394611441128743411596083242024-06-21 12:51:21576142908664000513
40514538943394611443297967298630860832024-06-21 12:50:535
4051453894339461144431854689698652164.52024-06-21 12:50:334
4051453894339461145102021686843351045

二、代码实现

提示:代码实现只展示获取推荐数据的业务层,保存逻辑就正常存到数据库就行

1.基于物品的协同过滤算法实现智能推荐

代码如下(示例):

/** * 基于物品的协同过滤算法实现智能推荐(知识) * * @param username 用户账号 * @return 结果 * @throws ClassNotFoundException 异常 * @throws TasteException 异常 */publicList<String>getAiItemSimilarityRecommendKw(Stringusername){try{StringuserStringId=adminFeign.getUserIdByUserName(username).getData();if(StringUtils.isEmpty(userStringId)){returnnewArrayList<>();}LonguserId=Long.parseLong(userStringId);returnaiRecommendUtil.aiItemSimilarityRecommendKw(userId,5);}catch(Exceptione){log.info("获取智能推荐数据失败---{}",e.getMessage());returnnewArrayList<>();}}
/** * 基于物品的协同过滤算法实现智能推荐(知识) * * @param userId 用户id * @param howMany 推荐数量 * @return * @throws ClassNotFoundException 异常 * @throws SQLException * @throws TasteException */publicList<String>aiItemSimilarityRecommendKw(LonguserId,IntegerhowMany)throwsClassNotFoundException,SQLException,TasteException{Class.forName(aiRecommendClassName);MysqlDataSourcedataSource=newMysqlDataSource();dataSource.setServerName(aiRecommendServiceName);//本地为localhostdataSource.setUser(user);dataSource.setPassword(password);dataSource.setDatabaseName(databaseName);dataSource.setUseSSL(false);JDBCDataModeldataModel=newMySQLJDBCDataModel(dataSource,"ai_recommend_kw","USER_ID","ITEM_ID","PREFERENCE",null);// 用ReloadFromJDBCDataModel包装一层,提高推荐性能ReloadFromJDBCDataModelreloadFromJDBCDataModel=newReloadFromJDBCDataModel(dataModel);// 计算物品相似度ItemSimilaritycachingSimilarity=null;try{ItemSimilaritysimilarity=newPearsonCorrelationSimilarity(reloadFromJDBCDataModel);// 使用CachingItemSimilarity包装物品相似度计算器cachingSimilarity=newCachingItemSimilarity(similarity,reloadFromJDBCDataModel);}catch(TasteExceptione){e.printStackTrace();}// 构建推荐引擎GenericItemBasedRecommenderrecommender=newGenericItemBasedRecommender(reloadFromJDBCDataModel,cachingSimilarity);// 给用户userId推荐howMany个物品List<RecommendedItem>recommendations=null;try{recommendations=recommender.recommend(userId,howMany);}catch(TasteExceptione){e.printStackTrace();}List<String>resultList=newArrayList<>();log.info("使用基于物品的协同过滤算法");if(CollectionUtils.isEmpty(recommendations)){returnnewArrayList<>();}for(RecommendedItemrecommendedItem:recommendations){resultList.add(String.valueOf(recommendedItem.getItemID()));log.info("推荐结果:{}",recommendedItem);}returnresultList;}

2.结果

推荐结果:RecommendedItem[item:548948167409598464,value:2.7]推荐结果:RecommendedItem[item:483350820622897152,value:1.6]推荐结果:RecommendedItem[item:601551980415238144,value:1.6]推荐结果:RecommendedItem[item:601556963080671232,value:1.6]推荐结果:RecommendedItem[item:454377148632952832,value:1.4]

总结

由上述操作就能实现一个非常简单的推荐功能,但如果得到一个完善的推荐功能还远远不够。

http://www.jsqmd.com/news/447006/

相关文章:

  • 南大通用数据库安装使用教程(GBase8s)
  • android-ndk-rs未来展望:新特性与社区发展路线图
  • 10个火宝短剧实用技巧:提升AI短剧制作效率的终极指南
  • 终极Cuttlefish邮件服务器常见问题解决方案:从安装到高级配置全指南
  • windows文件实时同步
  • Nano Stores在React Native中的终极应用指南:简单快速的状态管理解决方案
  • 突破Session隔离:GH-Injector-Library全方法通用绕过技巧
  • CSP-S 2024 提高级 第一轮(初赛) 完善程序(2)
  • 探索apm生态:发现10个改变Atom体验的精选插件
  • Git Quick Stats自动化部署终极指南:CI/CD流水线集成完整教程
  • 【linux】shell命令
  • 如何快速掌握DotNetCore微服务:从零开始的保险销售系统实战教程
  • 探索Veloren:如何体验这款开源像素RPG的无限魅力?
  • 如何用Vue和Vuex构建你的第一个俄罗斯方块游戏:完整指南
  • Lovefield跨浏览器兼容性终极指南:Chrome、Firefox、IE的完整解决方案
  • 如何使用Git Quick Stats实现高效仓库统计监控与自动化告警
  • Lovefield终极性能调优指南:10个技巧让你的Web数据库运行更快
  • 7步完美贡献StyleGAN3:官方PyTorch实现的高质量PR提交指南
  • 终极指南:5步开发prettier-plugin-tailwindcss自定义解析器
  • JS Confetti核心API解析:掌握addConfetti与位置控制
  • StyleGAN3终极指南:如何彻底消除生成图像伪影的完整技术解析
  • Flux v1与Kustomize集成:多环境配置管理的终极指南
  • 如何快速掌握Mogenerator:iOS/Mac开发必备的Core Data代码生成工具
  • Alpakka核心组件全解析:从AWS到Kafka的20+连接器实战
  • vue企业官网模板 企业门户网站源码 开箱即用 网站二改,省时省力
  • 彼得林奇对公司高管薪酬结构与长期业绩的相关性研究
  • 如何快速实现Zaplib在生产环境的部署:Webpack集成与优化技巧
  • JARM vs JA3:两大TLS指纹技术对比,谁才是网络安全检测的王者?
  • 从0到1开发政府公报爬虫:基于Querido Diario的实战案例
  • 2026-03-07