パイプライン

機械学習では、データセットから処理および学習をするためにアルゴリズムの系列を実行することは一般的です。例えば:

* 各ドキュメントのテキストをトークンに分割する。
* 各ドキュメントの単語を数値の特徴ベクトルに変換する ([Token Count Vectorizer](machine-learning/feature-extraction/token-count-vectorizer/))。
* 特徴ベクトルとラベルを使って予測モデルを学習する。

PHP-ML はそのようなワークフローをパイプラインとして表現します。これは変換器と予測器の系列から成ります。

コンストラクタのパラメータ

  • $transformers (array|Transformer[]) - 変換器インタフェースを実装するオブジェクトの系列
  • $estimator (Estimator) - 訓練および予測をできる評価器
use Phpml\Classification\SVC;
use Phpml\FeatureExtraction\TfIdfTransformer;
use Phpml\Pipeline;

$transformers = [
    new TfIdfTransformer(),
];
$estimator = new SVC();

$pipeline = new Pipeline($transformers, $estimator);

まず、パイプラインは欠測値を置き換え、それから標本を正規化し、最後にSVC評価器を訓練します。従って、準備されたパイプラインは予測された標本のために各変換ステップを繰り返します。

use Phpml\Classification\SVC;
use Phpml\Pipeline;
use Phpml\Preprocessing\Imputer;
use Phpml\Preprocessing\Normalizer;
use Phpml\Preprocessing\Imputer\Strategy\MostFrequentStrategy;

$transformers = [
    new Imputer(null, new MostFrequentStrategy()),
    new Normalizer(),
];
$estimator = new SVC();

$samples = [
    [1, -1, 2],
    [2, 0, null],
    [null, 1, -1],
];

$targets = [
    4,
    1,
    4,
];

$pipeline = new Pipeline($transformers, $estimator);
$pipeline->train($samples, $targets);

$predicted = $pipeline->predict([[0, 0, 0]]);

// $predicted == 4