Maison >développement back-end >tutoriel php >Explication détaillée de l'algorithme K-means en PHP

Explication détaillée de l'algorithme K-means en PHP

王林
王林original
2023-07-08 16:42:071475parcourir

Explication détaillée de l'algorithme K-means en PHP

L'algorithme K-means est un algorithme d'analyse de clustering couramment utilisé et est largement utilisé dans les domaines de l'exploration de données et de l'apprentissage automatique. Cet article présentera en détail le processus de mise en œuvre de l'algorithme K-means à l'aide de PHP et fournira des exemples de code.

  1. Principe de l'algorithme

L'algorithme K-means divise les points d'échantillonnage dans l'ensemble de données en plusieurs clusters, de sorte que la distance entre les points d'échantillonnage au sein du cluster soit aussi petite que possible et que la distance entre les points d'échantillonnage entre les clusters soit aussi petite que possible. le plus grand possible. Le processus spécifique de mise en œuvre est le suivant :

1.1 Initialisation

Tout d'abord, le nombre de clusters K doit être déterminé. Ensuite, K points d'échantillonnage sont sélectionnés au hasard dans l'ensemble de données comme points centraux initiaux.

1.2 Affectation

Pour chaque point d'échantillonnage de l'ensemble de données, calculez la distance entre celui-ci et tous les points centraux et attribuez-le au cluster le plus proche.

Mise à jour 1.3

Pour chaque cluster, calculez la moyenne des points d'échantillonnage dans le cluster comme nouveau point central.

1.4 Répéter l'itération

Répétez le processus d'allocation et de mise à jour jusqu'à ce que les points d'échantillonnage dans le cluster ne changent plus ou que le nombre prédéterminé d'itérations soit atteint.

  1. Exemple de code PHP

Ce qui suit est un exemple de code pour implémenter l'algorithme K-means en utilisant PHP :

<?php

function kMeans($data, $k, $iterations) {
  // 初始化簇中心点
  $centers = [];
  for ($i = 0; $i < $k; $i++) {
    $centers[] = $data[array_rand($data)];
  }

  // 迭代分配和更新过程
  for ($iteration = 0; $iteration < $iterations; $iteration++) {
    $clusters = array_fill(0, count($centers), []);

    foreach ($data as $point) {
      // 计算样本点与各个中心点的距离
      $distances = [];
      foreach ($centers as $center) {
        $distance = calculateDistance($point, $center);
        $distances[] = $distance;
      }

      // 将样本点分配到最近的簇
      $clusterIndex = array_search(min($distances), $distances);
      $clusters[$clusterIndex][] = $point;
    }

    // 更新中心点
    $newCenters = [];
    foreach ($clusters as $cluster) {
      $newCenter = calculateMean($cluster);
      $newCenters[] = $newCenter;
    }

    // 判断是否达到终止条件
    if ($centers == $newCenters) {
      break;
    }

    $centers = $newCenters;
  }

  return $clusters;
}

// 计算两个样本点之间的欧氏距离
function calculateDistance($point1, $point2) {
  $distance = 0;
  for ($i = 0; $i < count($point1); $i++) {
    $distance += pow($point1[$i] - $point2[$i], 2);
  }
  return sqrt($distance);
}

// 计算簇内样本点的均值
function calculateMean($cluster) {
  $mean = [];
  $dimension = count($cluster[0]);
  for ($i = 0; $i < $dimension; $i++) {
    $sum = 0;
    foreach ($cluster as $point) {
      $sum += $point[$i];
    }
    $mean[] = $sum / count($cluster);
  }
  return $mean;
}

// 测试代码
$data = [
  [2, 10],
  [2, 5],
  [8, 4],
  [5, 8],
  [7, 5],
  [6, 4],
  [1, 2],
  [4, 9],
];

$k = 2;
$iterations = 100;

$clusters = kMeans($data, $k, $iterations);

print_r($clusters);

?>

Dans le code ci-dessus, nous définissons d'abord une fonction kMeans pour exécuter l'algorithme K-means. Ensuite, la fonction calculateDistance est implémentée pour calculer la distance euclidienne entre deux points d'échantillonnage. Enfin, la fonction calculateMean est implémentée, qui est utilisée pour calculer la moyenne des points d'échantillonnage au sein du cluster.

  1. Affichage des résultats

Selon le code ci-dessus, nous effectuons une analyse de cluster sur un simple ensemble de données bidimensionnelles et imprimons les résultats. La sortie affichera l’allocation du cluster.

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => 2
                    [1] => 10
                )

            [1] => Array
                (
                    [0] => 2
                    [1] => 5
                )

            [2] => Array
                (
                    [0] => 1
                    [1] => 2
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => 8
                    [1] => 4
                )

            [1] => Array
                (
                    [0] => 5
                    [1] => 8
                )

            [2] => Array
                (
                    [0] => 7
                    [1] => 5
                )

            [3] => Array
                (
                    [0] => 6
                    [1] => 4
                )

            [4] => Array
                (
                    [0] => 4
                    [1] => 9
                )

        )
)

Les résultats ci-dessus montrent que l'algorithme K-means divise les points d'échantillonnage en deux groupes. Le premier groupe contient trois points d'échantillon [2, 10], [2, 5] et [1, 2]. le cluster contient cinq autres points d’échantillonnage.

Grâce au code ci-dessus et aux exemples de données, nous pouvons voir que le processus d'utilisation de PHP pour implémenter l'algorithme K-means est très simple et qu'en même temps, des résultats de clustering efficaces peuvent être obtenus.

Résumé

L'algorithme K-means est un algorithme d'analyse de cluster couramment utilisé en divisant les points d'échantillonnage de l'ensemble de données en plusieurs clusters, il atteint l'objectif de minimiser la distance au sein d'un cluster et de maximiser la distance entre les clusters. Cet article fournit des procédures détaillées et des exemples de code pour implémenter l'algorithme K-means à l'aide de PHP et le démontre avec un simple ensemble de données bidimensionnelles. Les lecteurs peuvent ajuster les paramètres pertinents en fonction des besoins réels pour les appliquer à leurs propres tâches d'analyse de données.

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!

Déclaration:
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