Start · Sprachen · PHP · Referenz · SVMModel

SVMModel

Klasse

Repräsentiert ein trainiertes Support-Vector-Machine-Modell und ermöglicht Klassifizierung, Regression und Wahrscheinlichkeitsschätzungen.

seit PHP 0.1.5 Kategorie: misc

Signatur

class SVMModel

Beschreibung

SVMModel ist die zentrale Klasse der PHP-SVM-Erweiterung (php-svm) und repräsentiert ein fertig trainiertes Support-Vector-Machine-Modell. Instanzen dieser Klasse werden in der Regel nicht direkt instanziiert, sondern über die Methode SVM::train() oder durch das Laden einer gespeicherten Modelldatei mit SVMModel::__construct() erzeugt.

Mit einem SVMModel-Objekt lassen sich neue Datenpunkte klassifizieren (predict()), Wahrscheinlichkeitswerte für Klassen ermitteln (predict_probability()) sowie Informationen über das Modell abrufen – etwa die Anzahl der Klassen (getNrClass()), die Klassenlabels (getLabels()) oder den SVM-Typ (getType()). Das Modell kann zudem persistent auf dem Dateisystem gespeichert (save()) und später wieder geladen werden.

SVMs sind besonders geeignet für Klassifikationsaufgaben mit hochdimensionalen Merkmalsvektoren, wie z.B. Textklassifizierung, Bilderkennung oder bioinformatische Anwendungen. Die Erweiterung basiert auf der bewährten libsvm-Bibliothek.

Voraussetzung für die Nutzung ist die Installation der PECL-Erweiterung svm (pecl install svm) sowie die libsvm-Bibliothek auf dem System.

Beispiele

Modell trainieren, speichern und für Vorhersagen nutzen

<?php
// SVM-Objekt konfigurieren
$svm = new SVM();
$svm->setOption(SVM::OPT_KERNEL_TYPE, SVM::KERNEL_RBF);

// Trainingsdaten: Arrays mit [Label, Feature1, Feature2, ...]
$trainingData = [
    [1,  0.1, 0.3, 0.9],
    [1,  0.2, 0.1, 0.8],
    [-1, 0.8, 0.9, 0.1],
    [-1, 0.7, 0.8, 0.2],
];

// Modell trainieren — gibt ein SVMModel-Objekt zurück
$model = $svm->train($trainingData);

// Modell speichern
$model->save('/tmp/mein_svm_modell.model');

// Einen neuen Datenpunkt klassifizieren
$testPoint = [0.15, 0.25, 0.85];
$label = $model->predict($testPoint);

echo 'Vorhergesagte Klasse: ' . $label . PHP_EOL;
// Vorhergesagte Klasse: 1
Vorhergesagte Klasse: 1

Gespeichertes Modell laden und Modellinformationen abrufen

<?php
// Gespeichertes Modell von Festplatte laden
$model = new SVMModel('/tmp/mein_svm_modell.model');

// Modellinformationen ausgeben
echo 'SVM-Typ: '          . $model->getType()    . PHP_EOL;
echo 'Anzahl Klassen: '   . $model->getNrClass() . PHP_EOL;
echo 'Klassenlabels: '    . implode(', ', $model->getLabels()) . PHP_EOL;

// Wahrscheinlichkeitsschätzung (nur wenn Modell mit Wahrscheinlichkeiten trainiert wurde)
if ($model->checkProbabilityModel()) {
    $probabilities = [];
    $label = $model->predict_probability([0.15, 0.25, 0.85], $probabilities);
    echo 'Klasse: ' . $label . PHP_EOL;
    foreach ($probabilities as $klasse => $wahrscheinlichkeit) {
        echo '  P(Klasse ' . $klasse . ') = ' . round($wahrscheinlichkeit, 4) . PHP_EOL;
    }
}

// Wichtig · Fallstricke

PECL-Erweiterung erforderlich: SVMModel ist Teil der PECL-Erweiterung svm und steht nicht in Standard-PHP-Installationen zur Verfügung. Die Erweiterung muss separat installiert werden (pecl install svm). Außerdem muss libsvm auf dem System vorhanden sein.

Wahrscheinlichkeitsschätzungen: Die Methode predict_probability() funktioniert nur dann korrekt, wenn das Modell explizit mit der Option SVM::OPT_PROBABILITY trainiert wurde. Andernfalls liefert checkProbabilityModel() false.

Skalierung der Eingabedaten: SVMs reagieren empfindlich auf unterschiedliche Wertebereiche der Features. Es wird dringend empfohlen, Eingabedaten vor dem Training und vor der Vorhersage zu normalisieren (z.B. auf den Bereich [0, 1] oder [-1, 1]).

Speicherformat: Das über save() gespeicherte Modell verwendet das native libsvm-Textformat und ist damit auch mit anderen libsvm-basierten Werkzeugen kompatibel.