PHP 实现机器学习挖掘用户的购物习惯

开场白

经常听说某某某专攻机器学习的程序猿的年薪百万,AI 更是火得不得了:smirk:,提起这些基本都是 Python 、Java、Go、甚至 JavaScript 都有就是没有我们 PHP 什么事:unamused:,这我就不服我了啊。毕竟

PHP 是世界上最好的语言:laughing:

虽然 PHP 的生态导致无法落地机器学习,但还是可以做一些简单的数据分析工作的。

安装

这里推荐 php-ml 这个库,其中包含各种算法,交叉验证,神经网络,预处理,特征提取等等。需要 PHP 版本 7.1 以上, 速度还是可以的。

    composer require php-ai/php-ml

Apriori 算法

Apriori算法是一种挖掘关联规则的频繁项集算法

说简单点,Apriori 算法就是在已有的数据里根据出现的组合频次来总结一定的关联关系。

这个详细算法不去深究,简单介绍一下他的两个参数。

支持度[Support]

\displaystyle Support=\frac{同时购买「香烟、打火机」的人数}{总人数}

很好理解,20个购买香烟的人里有19个人都买了打火机,那香烟和打火机肯定是有一定关联。

置信度[Confidence ]

置信度就是购买 a 的人同时购买 b 的概率。例如:

(香烟 => 打火机)的置信度:

\displaystyle confidence =\frac{同时购买香烟和打火机的人数}{购买香烟的人数}

(打火机 => 香烟)的置信度:

\displaystyle confidence =\frac{同时购买香烟和打火机的人数}{购买打火机的人数}

数据训练

理解这两个参数之后我们开始训练我们的机器,让他知道用户购买了香烟之后应该给用户推荐什么。

首先准备好样本数据:

    $samples = [
            ['香烟','打火机'],
            ['香烟','炸鸡','啤酒','鸡排'],
            ['打火机','炸鸡','啤酒','可乐'],
            ['香烟','打火机','炸鸡','啤酒'],
            ['香烟','打火机','炸鸡','可乐']
        ];

根据上面的公式计算出支持度和可信度。然后开始训练:

use Phpml\Association\Apriori;

$associator  =  new  Apriori($support  =  0.5,  $confidence  =  0.5);

$associator->train($samples,  []);

速度还是可以的。训练完成之后我们可以获取生成的关联规则:

$associator->getRules()

然后我们可以来预测一下买了打火机之后,用户可能会买什么:

$associator->predict(['打火机'])

// [
//    0 => [ '香烟' ],
//    1 => [ '炸鸡'],
// ]

现在你知道用户买完避孕套该给他推荐啥了吧:smirk:

当然,如果你想保存训练好的模型,下次再使用的话,可以:

    use Phpml\ModelManager;

    // 保存训练好的模型
    $filepath = '/path/to/store/the/model'; 
    $manager = new ModelManager();
    $manager->saveToFile($associator, $filepath);

从文件读取训练好的模型:

    // 使用
    $manager = new ModelManager();
    $filepath = '/path/to/store/the/model'; 
    $restoredAssociator = $manager->restoreFromFile($filepath);
    $restoredAssociator->predict(['炸鸡']);
本作品采用《CC 协议》,转载必须注明作者和本文链接
更多文章去我的博客 看看
本帖由系统于 4年前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 14

是个好东西,正好需要做推荐这块。

4年前 评论

原来使用机器学习这么简单方便,确实是个好东西

4年前 评论
Remember 4年前
zxdstyle (楼主) 4年前
L学习不停 (作者) 4年前
L学习不停 (作者) 4年前
ShengDu-Linux 3年前
L学习不停 (作者) 3年前
lufeijun1234

是个好东西

4年前 评论
Summer

这公式一看就懂

4年前 评论

刚在我们业务上跑了下,可能数据量比较少(只有几千个订单),没能挖掘出什么来 :joy:

4年前 评论

可以码一波,,,

4年前 评论

机器学习如此简单 :joy:

4年前 评论
wanghan

这个好厉害

3年前 评论

问个问题哈,这个如何验证推荐结果是否准确合理呢

2年前 评论

支持度和置信度不分别应该是0.6和0.75吗?为什么样例里面填的都是0.5?

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!