Как предсказать с несколькими функциями в Php-AI / Php-мл в PHP - PullRequest
0 голосов
/ 05 января 2019

Я использую фреймворк Php-ai / Php-ml . В примере , который они дают , ИИ использует только одну функцию, которая бесполезна, но на главной странице git они также приводят этот пример использования более чем одной функции:

$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]);

На основе примера, предоставляющего только одну функцию, и вторичного примера, предоставляющего две функции. Я пытался воссоздать это:

Я пытаюсь воссоздать это, используя две функции. Мой текущий фрагмент кода выглядит так:

public function train(Request $request) {

    # CSV File
    $file = $request->file('dataframe');

    # Features + 1 will be the labels column
    $dataset = new CsvDataset($file, (int) $request->features);

    $vectorizer = new TokenCountVectorizer(new WordTokenizer());
    $tfIdfTransformer = new TfIdfTransformer();

    $finalSamples = [];
    for($i = 0; $i <= $request->features -1; $i++):
        $samples = [];
        foreach ($dataset->getSamples() as $sample)
            $samples[] = $sample[$i];

        $vectorizer->fit($samples);
        $vectorizer->transform($samples);

        $tfIdfTransformer->fit($samples);
        $tfIdfTransformer->transform($samples);

        $finalSamples[] = $samples;
    endfor;

    # This gives us an output of Array[ 0 => [Feature 1, Feature 2], 1 => [Feature 1, Feature 2], ... ] like shown on example two.

    $result = [];
    foreach($finalSamples as $arr)
        foreach($arr as $k => $v)
            $result[$k][] = $v;

    $dataset = new ArrayDataset($result, $dataset->getTargets());
    $randomSplit = new StratifiedRandomSplit($dataset, 0.1);

    $classifier = new SVC(Kernel::RBF, 10000);

    # Train with half of the data frame
    $classifier->train($randomSplit->getTrainSamples(), $randomSplit->getTrainLabels());

    $predictedLabels = $classifier->predict($randomSplit->getTestSamples());
    $inputLabels     = $randomSplit->getTestLabels();
}

Мой CSV-файл выглядит так:

"SibSp","Parch","Survived",
"1", "1", "1",
"3", "3", "1",
"4", "1", "0"
"4", "0", "1",
"5", "2", "0"
"3", "1", "0",
"2", "2", "1",
"0", "0", "1"

Проблема теперь в том, когда я визуализирую данные, что я делаю так:

$newDataFrame   = [];
$incorrect      = 0;

for($i = 0; $i <= count($inputLabels) -1; $i++):
    $newDataFrame[] = (object) ['input' => $inputLabels[$i], 'output' => $predictedLabels[$i]];
    if($inputLabels[$i] != $predictedLabels[$i]) $incorrect++;
ndfor;

$correct = count($inputLabels) - $incorrect;
$score   = round((float)Accuracy::score(isset($request->train) ? $randomSplit->getTestLabels() : $inputLabels, $predictedLabels) * 100 );

Данные всегда отображаются как 1 правильные, 1 неправильные и оцениваются в 50 (%).

Как я могу использовать этот классификатор для использования нескольких функций, а не только одной? Я думаю, что проблема заключается в создании ArrayDataSet, но я понятия не имею, что с ним не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...