Я использую 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
но я понятия не имею, что с ним не так.
Задача ещё не решена.
Других решений пока нет …