искусственный интеллект — Как увеличить количество функций в PHP-AI в PHP?

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

"sample","language""Hello, how are you?","english",
"Je voudrais une boîte de chocolats.","french"...

Тем не менее, когда я пытаюсь обучить ИИ с двумя функциями, основанными на титановой выживаемости (гипотеза: влияет ли количество братьев и сестер на супружескую жизнь на выживаемость), с такими данными:

"SibSp","Parch","Survived",
"1", "1", "1",
"3", "3", "1",
"4", "1", "0"...

Я получаю эту ошибку:

Phpml \ Exception \ InvalidArgumentException Размер указанных массивов не совпадает

Мой фрагмент кода выглядит так, $request->features содержит количество функций, которые этот фрейм данных имеет с features +1 будет держать фактический результат (1 = выжил, 0 = умер):

$dataset = new CsvDataset($file, (int) $request->features);
$vectorizer = new TokenCountVectorizer(new WordTokenizer());
$tfIdfTransformer = new TfIdfTransformer();

$samples = [];

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

for($i = 0; $i <= count($samples) -1; $i++):
$vectorizer->fit($samples[$i]);
$vectorizer->transform($samples[$i]);

$tfIdfTransformer->fit($samples[$i]);
$tfIdfTransformer->transform($samples[$i]);
endfor;

$dataset = new ArrayDataset($samples, $dataset->getTargets()); # This throws the error

я использую PHP-AI / PHP-ML и вот пример того, как работает ИИ с фрейм данных только 1 функция, предоставляемая платформой.

Я понимаю ошибку, $dataset->getTargets() содержит только 1 массив, где как $samples содержит 2 массива. Однако это поставило меня в тупик, поскольку так и должно быть (в теории).

Я храню классификатор (или обученный ИИ) как сериализованный объект в моей базе данных, как только он обучен запоминать свое обученное состояние. Все работает нормально, когда я использую только фрейм данных с одной функцией. У кого-нибудь есть опыт использования PHP-AI в библиотеке PHP-ML, который может помочь?

Как я могу увеличить количество функций внутри PHP-AI?

Обновление, чтобы показать, какие значения хранятся в моих массивах:

$samples выглядит так (массив братьев и сестер, массив супругов):

array ( 0 => array ( 0 => array ( ), 1 => array ( ), 2 => array ( ), 3 => array ( ), 4 => array ( ), 5 => array ( ), 6 => array ( ), 7 => array ( ), ), 1 => array ( 0 => array ( ), 1 => array ( ), 2 => array ( ), 3 => array ( ), 4 => array ( ), 5 => array ( ), 6 => array ( ), 7 => array ( ), ), )

$dataset->getTargets() выглядит так (выжил или умер)

array ( 0 => '1', 1 => '1', 2 => '0', 3 => '1', 4 => '0', 5 => '0', 6 => '1', 7 => '1', )

Я считаю, что $samples массив должен быть 1 массивом, содержащим дочерние массивы [SibSp, Spous]. Я не могу думать, как реорганизовать массив, чтобы быть таким.

2

Решение

После того, как я покопался в коде, изучил ошибку и выяснил, как ее обойти, я понял, что $samples данные должны быть выражены как

Array [ 0 => [SibSp, Spous], 1 => [SibSp, Spous], ... ]

Итак, перебирая данные так:

$result = [];
foreach($samples as $arr) {
foreach($arr as $k => $v) {
$result[$k][] = $v;
}
}

Я могу достичь этого желаемого результата. Мне все еще нужно было вставить образцы в векторизатор $sample но окончательный набор данных пришлось перефразировать:

for($i = 0; $i <= count($samples) -1; $i++):
$vectorizer->fit($samples[$i]);
$vectorizer->transform($samples[$i]);

$tfIdfTransformer->fit($samples[$i]);
$tfIdfTransformer->transform($samples[$i]);

endfor;

$dataset = new ArrayDataset($result, $dataset->getTargets());
1

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

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

По вопросам рекламы [email protected]