PHPで機械学習(php-ml)

  • 2
    いいね
  • 0
    コメント

概要

もう機械学習といえばやって当たり前でしょくらいの感覚になりつつあるような気がして
以前ちょっとさわってはみましたが、、、

本当にサンプルを実行するだけ何となく動きはわかったものの、例えばこれを使って何かプロダクトに反映する
みたいな部分は難しいなぁと思っていました。
理由はPythonが読めない、書けない!(笑)のも大きな理由だなと思い、
普段慣れているPHPで機械学習がないかと探したところ良さそうなものがあったので試してみました。

準備

composerでパッケージのインストール

$ sudo composer require php-ai/php-ml

以上。

サンプルコード

サンプルコードもいっぱい乗っていますが、いくつかピックアップして紹介します。

k近傍法

k近傍法は、ほぼあらゆる機械学習アルゴリズムの中で最も単純である。あるオブジェクトの分類は、その近傍のオブジェクト群の投票によって決定される(すなわち、k 個の最近傍のオブジェクト群で最も一般的なクラスをそのオブジェクトに割り当てる)

サンプルコードの実行

require_once 'vendor/autoload.php';

use Phpml\Classification\KNearestNeighbors;

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

$classifier = new KNearestNeighbors();
$classifier->train($samples, $labels);

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

複合線形回帰

線形回帰に付いている複合という単語は、2つ以上の標本パラメータが目的を予測するために使われることを意味します。

サンプルコード

require_once 'vendor/autoload.php';

use Phpml\Regression\LeastSquares;

$samples = [[73676, 1996],
            [77006, 1998],
            [10565, 2000],
            [146088, 1995],
            [15000, 2001],
            [65940, 2000],
            [9300, 2000],
            [93739, 1996],
            [153260, 1994],
            [17764, 2002],
            [57000, 1998],
            [15000, 2000]];
$targets = [2000,
            2750,
            15500,
            960,
            4400,
            8800,
            7100,
            2550,
            1025,
            5900,
            4600,
            4400];

$regression = new LeastSquares();
$regression->train($samples, $targets);
echo $regression->predict([60000, 1996]);
// return 4094.82

ピアソン相関

2つの確率変数の間にある線形な関係の強弱を測る指標である。
普通、単に相関係数といえばピアソンの積率相関係数を指す。

サンプルコード

require_once 'vendor/autoload.php';

use Phpml\Math\Statistic\Correlation;

$x = [43, 21, 25, 42, 57, 59];
$y = [99, 65, 79, 75, 87, 82];

Correlation::pearson($x, $y);
// return 0.549

感想

導入からサンプルコード実行までかなり簡単に使えると思いました。PHPが慣れている人ならサンプルコードから実際に学習データを何かしらのプロダクタトに反映させて機械学習を取り入れるというのできそうかなという印象でした。やはり普段慣れているコードだと違うなと実感しました。笑
ただ他の資料とかでも見ますがやはりPythonができるならPythonを使った方がいいのかなと思います。(TensorFlow,Chainer,Kerasなどなど)
こちらにもあるようにPythonは人気が高まりつつあるような気もするので、そろそろ勉強した方がいいのかなと思いました。。(Pythonが2017年の覇権言語に)

参考資料