Heim > Backend-Entwicklung > PHP-Tutorial > So implementieren Sie den K-Nächste-Nachbarn-Algorithmus in PHP

So implementieren Sie den K-Nächste-Nachbarn-Algorithmus in PHP

WBOY
Freigeben: 2023-07-07 11:10:01
Original
1139 Leute haben es durchsucht

So implementieren Sie den K-Nächste-Nachbarn-Algorithmus in PHP

Der K-Nächste-Nachbarn-Algorithmus ist ein einfacher und häufig verwendeter Algorithmus für maschinelles Lernen, der häufig bei Klassifizierungs- und Regressionsproblemen verwendet wird. Sein Grundprinzip besteht darin, die zu klassifizierende Probe in die Kategorie zu klassifizieren, zu der die nächsten K bekannten Proben gehören, indem der Abstand zwischen der zu klassifizierenden Probe und den bekannten Proben berechnet wird. In diesem Artikel stellen wir die Implementierung des K-Nearest-Neighbor-Algorithmus in PHP vor und stellen Codebeispiele bereit.

  1. Datenvorbereitung
    Zuerst müssen wir bekannte Probendaten und zu klassifizierende Probendaten vorbereiten. Es ist bekannt, dass die Beispieldaten Kategorien und Merkmalswerte enthalten, während die zu klassifizierenden Beispieldaten nur Merkmalswerte enthalten. Zur Vereinfachung des Beispiels gehen wir davon aus, dass sowohl die bekannten Probendaten als auch die zu klassifizierenden Probendaten in Form von Arrays dargestellt werden. Das Folgende sind Beispieldaten:

Bekannte Beispieldaten:
$knownSamples = array(

array('class' => 'A', 'features' => array(2, 3)),
array('class' => 'A', 'features' => array(4, 5)),
array('class' => 'B', 'features' => array(1, 1)),
array('class' => 'B', 'features' => array(3, 2)),
Nach dem Login kopieren

);

Zu klassifizierende Beispieldaten:
$unknownSample = array('features' => array(2, 2 ) );

  1. Abstand berechnen
    Als nächstes müssen wir eine Funktion schreiben, um den Abstand zwischen der zu klassifizierenden Probe und der bekannten Probe zu berechnen. Zu den häufig verwendeten Methoden zur Entfernungsmessung gehören die euklidische Entfernung, die Manhattan-Entfernung usw. Hier ist ein Beispiel für die Berechnung des euklidischen Abstands:

function euclideanDistance($sample1, $sample2) {

$sum = 0;
for ($i = 0; $i < count($sample1); $i++) {
    $sum += pow($sample1[$i] - $sample2[$i], 2);
}
return sqrt($sum);
Nach dem Login kopieren

}

  1. K nächste Nachbarn finden
    In diesem Schritt müssen wir eine Funktion schreiben, die den Abstand ermittelt Der nächste K bekannte Proben der zu klassifizierenden Probe. Hier ist eine Beispielfunktion:

function findNeighbors($knownSamples, $unknownSample, $k) {

$distances = array();
foreach ($knownSamples as $knownSample) {
    $distance = euclideanDistance($knownSample['features'], $unknownSample['features']);
    $distances[] = array('class' => $knownSample['class'], 'distance' => $distance);
}
usort($distances, function ($a, $b) {
    return $a['distance'] - $b['distance'];
});
return array_slice($distances, 0, $k);
Nach dem Login kopieren

}

  1. Classification
    Schließlich müssen wir eine Funktion schreiben, um basierend auf den Kategorien der K nächsten Nachbarn zu klassifizieren . Das Folgende ist eine Beispielfunktion:

function classify($neighbors) {

$classes = array();
foreach ($neighbors as $neighbor) {
    $classes[] = $neighbor['class'];
}
$classCounts = array_count_values($classes);
arsort($classCounts);
return key($classCounts);
Nach dem Login kopieren

}

  1. Vollständiges Beispiel
    Das Folgende ist ein vollständiger Beispielcode:
function euclideanDistance($sample1, $sample2) {
    $sum = 0;
    for ($i = 0; $i < count($sample1); $i++) {
        $sum += pow($sample1[$i] - $sample2[$i], 2);
    }
    return sqrt($sum);
}

function findNeighbors($knownSamples, $unknownSample, $k) {
    $distances = array();
    foreach ($knownSamples as $knownSample) {
        $distance = euclideanDistance($knownSample['features'], $unknownSample['features']);
        $distances[] = array('class' => $knownSample['class'], 'distance' => $distance);
    }
    usort($distances, function ($a, $b) {
        return $a['distance'] - $b['distance'];
    });
    return array_slice($distances, 0, $k);
}

function classify($neighbors) {
    $classes = array();
    foreach ($neighbors as $neighbor) {
        $classes[] = $neighbor['class'];
    }
    $classCounts = array_count_values($classes);
    arsort($classCounts);
    return key($classCounts);
}

$knownSamples = array(
    array('class' => 'A', 'features' => array(2, 3)),
    array('class' => 'A', 'features' => array(4, 5)),
    array('class' => 'B', 'features' => array(1, 1)),
    array('class' => 'B', 'features' => array(3, 2)),
);

$unknownSample = array('features' => array(2, 2));

$neighbors = findNeighbors($knownSamples, $unknownSample, 3);
$class = classify($neighbors);

echo "待分类样本的类别为:" . $class;
Nach dem Login kopieren

Der obige Code gibt die Kategorie des Beispiels aus klassifiziert werden.

Zusammenfassung:
Dieser Artikel stellt vor, wie man den K-Nächste-Nachbarn-Algorithmus in PHP implementiert. Durch Berechnen des Abstands zwischen der zu klassifizierenden Stichprobe und der bekannten Stichprobe werden K nächste Nachbarn gefunden und dann entsprechend der Kategorie dieser nächsten Nachbarn klassifiziert. Der K-Algorithmus für den nächsten Nachbarn ist ein einfacher und häufig verwendeter Algorithmus, der für viele Klassifizierungs- und Regressionsprobleme geeignet ist. Die Implementierung des K-Nearest-Neighbor-Algorithmus mit PHP ist relativ einfach und erfordert nur das Schreiben einiger Funktionen. Ich hoffe, dass dieser Artikel den Lesern helfen kann, den K-Nearest-Neighbor-Algorithmus zu verstehen und anzuwenden.

Das obige ist der detaillierte Inhalt vonSo implementieren Sie den K-Nächste-Nachbarn-Algorithmus in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage