mirror of
https://github.com/Llewellynvdm/php-ml.git
synced 2024-09-22 12:19:02 +00:00
60 lines
1.3 KiB
PHP
60 lines
1.3 KiB
PHP
<?php
|
|
|
|
declare (strict_types = 1);
|
|
|
|
namespace Phpml\SupportVectorMachine;
|
|
|
|
class DataTransformer
|
|
{
|
|
/**
|
|
* @param array $samples
|
|
* @param array $labels
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function trainingSet(array $samples, array $labels): string
|
|
{
|
|
$set = '';
|
|
$numericLabels = self::numericLabels($labels);
|
|
foreach ($labels as $index => $label) {
|
|
$set .= sprintf('%s %s %s', $numericLabels[$label], self::sampleRow($samples[$index]), PHP_EOL);
|
|
}
|
|
|
|
return $set;
|
|
}
|
|
|
|
/**
|
|
* @param array $labels
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function numericLabels(array $labels): array
|
|
{
|
|
$numericLabels = [];
|
|
foreach ($labels as $label) {
|
|
if (isset($numericLabels[$label])) {
|
|
continue;
|
|
}
|
|
|
|
$numericLabels[$label] = count($numericLabels);
|
|
}
|
|
|
|
return $numericLabels;
|
|
}
|
|
|
|
/**
|
|
* @param array $sample
|
|
*
|
|
* @return string
|
|
*/
|
|
private static function sampleRow(array $sample): string
|
|
{
|
|
$row = [];
|
|
foreach ($sample as $index => $feature) {
|
|
$row[] = sprintf('%s:%s', $index + 1, $feature);
|
|
}
|
|
|
|
return implode(' ', $row);
|
|
}
|
|
}
|