PHP 實現機器學習挖掘使用者的購物習慣

zxdstyle發表於2020-03-13

經常聽說某某某專攻機器學習的程式猿的年薪百萬,AI 更是火得不得了:smirk:,提起這些基本都是 Python 、Java、Go、甚至 JavaScript 都有就是沒有我們 PHP 什麼事:unamused:,這我就不服我了啊。畢竟

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

雖然 PHP 的生態導致無法落地機器學習,但還是可以做一些簡單的資料分析工作的。

這裡推薦 php-ml 這個庫,其中包含各種演算法,交叉驗證,神經網路,預處理,特徵提取等等。需要 PHP 版本 7.1 以上, 速度還是可以的。

    composer require php-ai/php-ml

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 協議》,轉載必須註明作者和本文連結
更多文章去我的部落格 看看

相關文章