You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于PHP-ML与回归算法的商品推荐引擎实现疑问

用PHP-ML实现商品推荐:纠正思路+正确方案

嘿,我来帮你理清楚这个问题~首先得说,你现在的思路有点小偏差:回归算法并不适合做这种商品关联推荐,咱们这个场景更适合用「关联规则挖掘」(比如Apriori算法),而不是回归模型。

你的核心误解

你想通过回归来计算商品之间的关联值,但回归算法的作用是预测连续数值(比如预测房价、销量),而咱们需要的是挖掘「商品A和商品B一起被购买的频率/概率」——这是关联规则要解决的问题,不是回归的强项。

回到你代码里的$targets困惑:之所以不知道填什么,是因为回归模型的输入输出逻辑和你的需求不匹配。你现在的样本是商品对,但回归需要每个样本对应一个连续的目标值,这个逻辑在这里根本不成立。

正确的实现方案:用Apriori算法做关联推荐

PHP-ML已经内置了Apriori算法,专门用来处理这种「购物篮分析」场景,正好符合你的需求。下面是具体步骤:

1. 正确整理数据集

首先把你的订单数据转换成「每笔订单的商品列表」格式,而不是商品对:

// 每一行代表一笔订单里的所有商品
$dataset = [
    ['Product1', 'Product2'],
    ['Product1', 'Product2'],
    ['Product1', 'Product3'],
    ['Product1', 'Product2'],
    ['Product2', 'Product4'],
    ['ProductY', 'ProductX'],
    // 可以继续添加更多订单数据
];

2. 训练Apriori模型

初始化Apriori时,你可以设置两个关键参数:

  • $minSupport:最小支持度(商品组合被购买的频率,比如0.1表示至少10%的订单包含这个组合)
  • $minConfidence:最小置信度(比如0.5表示当用户买了前件商品,有50%的概率买后件商品)
use Phpml\Association\Apriori;

// 初始化模型,可根据你的数据调整参数
$apriori = new Apriori($minSupport = 0.1, $minConfidence = 0.5);
$apriori->train($dataset);

3. 生成针对Product1用户的推荐

训练完成后,我们可以提取所有关联规则,筛选出「前件包含Product1」的规则,然后按置信度从高到低排序,置信度越高的商品越适合推荐:

$recommendations = [];
$rules = $apriori->getRules();

foreach ($rules as $rule) {
    // 找到所有以Product1为前提的规则
    if (in_array('Product1', $rule->getAntecedent())) {
        $confidence = $rule->getConfidence();
        // 取出规则的后件(也就是推荐的商品)
        foreach ($rule->getConsequent() as $product) {
            $recommendations[$product] = $confidence;
        }
    }
}

// 按置信度从高到低排序
arsort($recommendations);

// 输出结果:比如Product2的置信度是3/4=0.75(4个买Product1的订单里,3个都买了Product2)
print_r($recommendations);

补充:为什么回归不适合?

如果硬要用回归,你需要完全重构特征和目标值,比如把特征设为「是否购买Product1」(1表示买,0表示不买),目标值设为「是否购买Product2」(1表示买,0表示不买)。但这样训练出来的模型,是预测单个用户买Product2的概率,而不是你想要的「购买Product1的用户群体中,购买Product2的比例」——这和你的需求是两回事,而且效果远不如Apriori直接。

内容的提问来源于stack exchange,提问作者Stefan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:39:40