Maison > développement back-end > tutoriel php > Comment implémenter l'algorithme K voisin le plus proche en PHP

Comment implémenter l'algorithme K voisin le plus proche en PHP

WBOY
Libérer: 2023-07-07 11:10:01
original
1140 Les gens l'ont consulté

Comment implémenter l'algorithme K plus proche voisin en PHP

L'algorithme K plus proche voisin est un algorithme d'apprentissage automatique simple et couramment utilisé, largement utilisé dans les problèmes de classification et de régression. Son principe de base est de classer l'échantillon à classer dans la catégorie à laquelle appartiennent les K échantillons connus les plus proches en calculant la distance entre l'échantillon à classer et les échantillons connus. Dans cet article, nous présenterons comment implémenter l'algorithme du K-plus proche voisin en PHP et fournirons des exemples de code.

  1. Préparation des données
    Tout d'abord, nous devons préparer des exemples de données connus et des exemples de données à classer. On sait que les exemples de données contiennent des catégories et des valeurs de caractéristiques, tandis que les exemples de données à classer ne contiennent que des valeurs de caractéristiques. Pour simplifier l'exemple, nous supposons que les données d'échantillon connues et les données d'échantillon à classer sont représentées sous forme de tableaux. Voici un exemple de données :

Exemples de données connues :
$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)),
Copier après la connexion

);

Exemples de données à classer :
$unknownSample = array('features' => array(2, 2 ) );

  1. Calculer la distance
    Ensuite, nous devons écrire une fonction pour calculer la distance entre l'échantillon à classer et l'échantillon connu. Les méthodes de mesure de distance couramment utilisées incluent la distance euclidienne, la distance de Manhattan, etc. Voici un exemple de calcul de la distance euclidienne :

fonction euclideanDistance($sample1, $sample2) {

$sum = 0;
for ($i = 0; $i < count($sample1); $i++) {
    $sum += pow($sample1[$i] - $sample2[$i], 2);
}
return sqrt($sum);
Copier après la connexion

}

  1. Trouver les K voisins les plus proches
    Dans cette étape, nous devons écrire une fonction qui trouve la distance la plus proche K échantillons connus de l'échantillon à classer. Voici un exemple de fonction :

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);
Copier après la connexion

}

  1. Classification
    Enfin, nous devons écrire une fonction pour classer en fonction des catégories des K voisins les plus proches . Voici un exemple de fonction :

function classify($neighbours) {

$classes = array();
foreach ($neighbors as $neighbor) {
    $classes[] = $neighbor['class'];
}
$classCounts = array_count_values($classes);
arsort($classCounts);
return key($classCounts);
Copier après la connexion

}

  1. Exemple complet
    Ce qui suit est un exemple de code complet :
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;
Copier après la connexion

Le code ci-dessus affichera la catégorie de l'échantillon dans être classé.

Résumé :
Cet article présente comment implémenter l'algorithme K voisin le plus proche en PHP. En calculant la distance entre l'échantillon à classer et l'échantillon connu, K les plus proches voisins sont trouvés, puis classés selon les catégories de ces plus proches voisins. L'algorithme K plus proche voisin est un algorithme simple et couramment utilisé, adapté à de nombreux problèmes de classification et de régression. L'implémentation de l'algorithme K plus proche voisin à l'aide de PHP est relativement simple et ne nécessite que l'écriture de quelques fonctions. J'espère que cet article pourra aider les lecteurs à comprendre et à appliquer l'algorithme du K-plus proche voisin.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal