Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erklärung des K-Means-Algorithmus in PHP

Detaillierte Erklärung des K-Means-Algorithmus in PHP

王林
王林Original
2023-07-08 16:42:071475Durchsuche

Detaillierte Erklärung des K-Means-Algorithmus in PHP

Der K-Means-Algorithmus ist ein häufig verwendeter Clustering-Analysealgorithmus und wird häufig in den Bereichen Data Mining und maschinelles Lernen eingesetzt. In diesem Artikel wird der Prozess der Implementierung des K-Means-Algorithmus mithilfe von PHP detailliert vorgestellt und Codebeispiele bereitgestellt.

  1. Algorithmusprinzip

Der K-Means-Algorithmus unterteilt die Abtastpunkte im Datensatz in mehrere Cluster, sodass der Abstand zwischen den Abtastpunkten innerhalb des Clusters so gering wie möglich und der Abstand zwischen den Abtastpunkten zwischen den Clustern so gering wie möglich ist groß wie möglich. Der spezifische Implementierungsprozess ist wie folgt:

1.1 Initialisierung

Zuerst muss die Anzahl der Cluster K bestimmt werden. Dann werden K Stichprobenpunkte zufällig aus dem Datensatz als anfängliche Mittelpunkte ausgewählt.

1.2 Zuweisung

Berechnen Sie für jeden Stichprobenpunkt im Datensatz den Abstand zwischen ihm und allen Mittelpunkten und weisen Sie ihn dem nächstgelegenen Cluster zu.

1.3 Update

Berechnen Sie für jeden Cluster den Mittelwert der Stichprobenpunkte im Cluster als neuen Mittelpunkt.

1.4 Iteration wiederholen

Wiederholen Sie den Zuordnungs- und Aktualisierungsprozess, bis sich die Stichprobenpunkte im Cluster nicht mehr ändern oder die vorgegebene Anzahl von Iterationen erreicht ist.

  1. PHP-Codebeispiel

Das Folgende ist ein Codebeispiel zur Implementierung des K-Means-Algorithmus mit 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);

?>

Im obigen Code definieren wir zunächst eine kMeans-Funktion, um den K-Means-Algorithmus auszuführen. Anschließend wird die Funktion „calculeDistance“ implementiert, um den euklidischen Abstand zwischen zwei Abtastpunkten zu berechnen. Schließlich wird die Funktion „calcuteMean“ implementiert, mit der der Mittelwert der Stichprobenpunkte innerhalb des Clusters berechnet wird.

  1. Ergebnisanzeige

Gemäß dem obigen Code führen wir eine Clusteranalyse für einen einfachen zweidimensionalen Datensatz durch und drucken die Ergebnisse aus. Die Ausgabe zeigt die Clusterzuordnung.

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
                )

        )
)

Die obigen Ergebnisse zeigen, dass der K-Means-Algorithmus die Abtastpunkte in zwei Cluster unterteilt. Der erste Cluster enthält drei Abtastpunkte [2, 10], [2, 5] und [1, 2]. Der Cluster enthält fünf weitere Abtastpunkte.

Anhand des obigen Codes und der Beispieldaten können wir sehen, dass der Prozess der Verwendung von PHP zur Implementierung des K-Means-Algorithmus sehr einfach ist und gleichzeitig effektive Clustering-Ergebnisse erzielt werden können.

Zusammenfassung

Der K-Means-Algorithmus ist ein häufig verwendeter Clusteranalysealgorithmus. Durch die Aufteilung der Stichprobenpunkte im Datensatz in mehrere Cluster wird das Ziel erreicht, den Abstand innerhalb eines Clusters zu minimieren und den Abstand zwischen Clustern zu maximieren. Dieser Artikel enthält detaillierte Verfahren und Codebeispiele für die Implementierung des K-Means-Algorithmus mit PHP und demonstriert ihn anhand eines einfachen zweidimensionalen Datensatzes. Leser können relevante Parameter entsprechend den tatsächlichen Anforderungen anpassen, um sie auf ihre eigenen Datenanalyseaufgaben anzuwenden.

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des K-Means-Algorithmus in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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