iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 6
0
AI & Data

學習PHP Machine Learning的冒險歷程系列 第 6

[2020鐵人賽Day6]邂逅PHP Machine Learning-KNearestNeighbors (KNN) 範例實作

PHP-ML KNearestNeighbors (KNN) 範例實作

KNN的流程可以分成三個部分,資料﹑訓練﹑預測。
資料分為Sample(特徵)、Label(真值)。
訓練則是利用資料的Sample與Label來運練模型。
預測為訓練好的模型來預測數值。

資料

特徵可以把它想像是真值的標籤,例如屬於a這種的人,身高是多少﹑體種是多少等。

$samples = [[1, 3], [1, 4], [2, 4], [3, 1], [4, 1], [4, 2]];
$labels = ['a', 'a', 'a', 'b', 'b', 'b'];

訓練

接下來我們設定一個新分類器,需要兩個參數k與距離,k值是預測時候取最近的k的Sample來預測數值。

$classifier = new KNearestNeighbors($k=3, new Minkowski($lambda=4));

其中如何去訂定最近的距離呢?而計算距離的公式有很多種,我們介紹最常使用的3種方法。

  1. 直線距離:兩個質點p﹑q的最點距離c
  2. 曼哈頓距離:為每個維度(x軸﹑y軸)的距離總和(a+b)
  3. 切比雪夫距離:為每個維度的最大距離(b)
    https://ithelp.ithome.com.tw/upload/images/20190922/20091333tmvz8K0djC.png

並且利用資料訓練分類器

$classifier->train($samples, $labels);

預測

接下來就可以試試看預測標籤啦!!

$classifier->predict([3, 2]);

完整Code:

<?php
    require_once __DIR__ . '/vendor/autoload.php';

    use Phpml\Classification\KNearestNeighbors;
    use Phpml\Math\Distance\Minkowski;

    $samples = [[1, 3], [1, 4], [2, 4], [3, 1], [4, 1], [4, 2]];
    $labels = ['a', 'a', 'a', 'b', 'b', 'b'];

    $classifier = new KNearestNeighbors($k=3, new Minkowski($lambda=4));
    $classifier->train($samples, $labels);

    echo $classifier->predict([3, 2]);
    // return 'b'

    echo "<br>";
    
    var_dump($classifier->predict([[3, 2], [1, 5]]));
    // return ['b', 'a']
?>

(參考來源:PHP ML)


上一篇
[2020鐵人賽Day5]邂逅PHP Machine Learning-KNearestNeighbors (KNN) 快速說明
下一篇
[2020鐵人賽Day7]邂逅PHP Machine Learning-用KNearestNeighbors (KNN) 來定位 - 資料處理(花朵分類)
系列文
學習PHP Machine Learning的冒險歷程30

尚未有邦友留言

立即登入留言