ankane / disco
基于协同过滤的PHP推荐
v0.2.0
2024-06-03 02:44 UTC
Requires
- php: >= 8.1
- ankane/libmf: ^0.1.0
Requires (Dev)
- phpunit/phpunit: ^10
This package is auto-updated.
Last update: 2024-09-09 09:54:53 UTC
README
🔥 基于协同过滤的PHP推荐
- 支持基于用户和基于项目的推荐
- 支持显式和隐式反馈
- 使用高性能矩阵分解
安装
运行
composer require ankane/disco
将脚本添加到 composer.json
以下载共享库
"scripts": { "post-install-cmd": "Disco\\Library::check", "post-update-cmd": "Disco\\Library::check" }
然后运行
composer install
入门
创建推荐器
use Disco\Recommender; $recommender = new Recommender();
如果用户直接对项目进行评分,这被称为显式反馈。用以下方式拟合推荐器
$recommender->fit([ ['user_id' => 1, 'item_id' => 1, 'rating' => 5], ['user_id' => 2, 'item_id' => 1, 'rating' => 3] ]);
ID可以是整数或字符串
如果用户没有直接对项目进行评分(例如,他们正在购买项目或阅读帖子),这被称为隐式反馈。省略评分。
$recommender->fit([ ['user_id' => 1, 'item_id' => 1], ['user_id' => 2, 'item_id' => 1] ]);
每个
user_id
/item_id
组合只应出现一次
获取基于用户的推荐 - “和你相似的用户还喜欢”
$recommender->userRecs($userId);
获取基于项目的推荐 - “喜欢这个项目的用户还喜欢”
$recommender->itemRecs($itemId);
使用 count
选项指定推荐的数量(默认为5)
$recommender->userRecs($userId, count: 3);
获取特定用户和项目的预测评分
$recommender->predict([['user_id' => 1, 'item_id' => 2], ['user_id' => 2, 'item_id' => 4]]);
获取相似用户
$recommender->similarUsers($userId);
示例
MovieLens
加载数据
use Disco\Data; $data = Data::loadMovieLens();
创建推荐器并获取相似电影
$recommender = new Recommender(factors: 20); $recommender->fit($data); $recommender->itemRecs('Star Wars (1977)');
存储推荐
将推荐保存到您的数据库中。
或者,您可以选择仅存储因子并使用类似 pgvector-php 的库。请参阅 示例。
算法
Disco使用高性能矩阵分解。
指定因子数量和迭代次数
new Recommender(factors: 8, epochs: 20);
如果推荐看起来不合适,尝试更改 factors
。默认为8,但3可能适用于某些应用,而300可能适用于其他应用。
验证
通过以下方式传递验证集
$recommender->fit($data, validationSet: $validationSet);
冷启动
协同过滤存在 冷启动问题。在没有用户或项目数据的情况下,它无法提供良好的推荐,这对新用户和新项目来说是个问题。
$recommender->userRecs($newUserId); // returns empty array
有几种处理方法,但这里有一些常见的方法
- 对于基于用户的推荐,向新用户显示最受欢迎的项目。
- 对于基于项目的推荐,进行基于内容的推荐。
参考
获取ID
$recommender->userIds(); $recommender->itemIds();
获取全局平均值
$recommender->globalMean();
获取因子
$recommender->userFactors($userId); $recommender->itemFactors($itemId);
致谢
感谢 LIBMF 提供高性能矩阵分解
历史
查看 变更日志
贡献
鼓励每个人帮助改进这个项目。以下是您可以帮助的一些方法
要开始开发
git clone https://github.com/ankane/disco-php.git cd disco-php composer install composer test