Laravel 5 — Как прогнозировать с несколькими функциями в Php-ai / Php-ml в переполнении стека

Я использую Php-AI / Php-мл фреймворк. в пример, который они дают, AI использует только одну функцию, которая бесполезна, но на главной странице 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 но я понятия не имею, что с ним не так.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector