Rumah > pembangunan bahagian belakang > tutorial php > Penjelasan terperinci tentang algoritma K-means dalam PHP

Penjelasan terperinci tentang algoritma K-means dalam PHP

王林
Lepaskan: 2023-07-08 16:44:02
asal
1499 orang telah melayarinya

Penjelasan terperinci tentang algoritma K-means dalam PHP

Algoritma K-means ialah algoritma analisis pengelompokan yang biasa digunakan dan digunakan secara meluas dalam bidang perlombongan data dan pembelajaran mesin. Artikel ini akan memperkenalkan secara terperinci proses pelaksanaan algoritma K-means menggunakan PHP dan memberikan contoh kod.

  1. Prinsip algoritma

Algoritma K-means membahagikan titik sampel dalam set data kepada berbilang kelompok, supaya jarak antara titik sampel dalam kelompok adalah sekecil mungkin, dan jarak antara titik sampel antara kelompok adalah sebagai besar mungkin. Proses pelaksanaan khusus adalah seperti berikut:

1.1 Permulaan

Pertama, bilangan kluster K perlu ditentukan. Kemudian titik sampel K dipilih secara rawak daripada set data sebagai titik pusat awal.

1.2 Tugasan

Untuk setiap titik sampel dalam set data, hitung jarak antara titik itu dan semua titik tengah dan tetapkan ia kepada kelompok terdekat.

1.3 Kemas kini

Bagi setiap kluster, kirakan min titik sampel dalam kluster sebagai titik tengah baharu.

1.4 Ulangi lelaran

Ulang peruntukan dan proses kemas kini sehingga titik sampel dalam gugusan tidak lagi berubah, atau bilangan lelaran yang telah ditetapkan dicapai.

  1. Contoh kod PHP

Berikut ialah contoh kod untuk melaksanakan algoritma K-means menggunakan 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);

?>
Salin selepas log masuk

Dalam kod di atas, kami mula-mula mentakrifkan fungsi kMeans untuk melaksanakan algoritma K-means. Kemudian fungsi calculateDistance dilaksanakan untuk mengira jarak Euclidean antara dua titik sampel. Akhirnya, fungsi calculateMean dilaksanakan, yang digunakan untuk mengira min titik sampel dalam kelompok.

  1. Paparan hasil

Mengikut kod di atas, kami melakukan analisis kelompok pada set data dua dimensi yang mudah dan mencetak hasilnya. Output akan menunjukkan peruntukan kluster.

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
                )

        )
)
Salin selepas log masuk

Keputusan di atas menunjukkan bahawa algoritma K-means membahagikan titik sampel kepada dua kelompok Kelompok pertama mengandungi tiga titik sampel [2, 10], [2, 5] dan [1, 2]. kelompok mengandungi lima titik sampel lain.

Melalui kod dan data sampel di atas, kita dapat melihat bahawa proses penggunaan PHP untuk melaksanakan algoritma K-means adalah sangat mudah, dan pada masa yang sama, hasil pengelompokan yang berkesan boleh diperolehi.

Ringkasan

Algoritma K-means ialah algoritma analisis kelompok yang biasa digunakan Dengan membahagikan titik sampel dalam set data kepada berbilang kelompok, ia mencapai matlamat untuk meminimumkan jarak dalam kelompok dan memaksimumkan jarak antara kelompok. Artikel ini menyediakan prosedur terperinci dan contoh kod untuk melaksanakan algoritma K-means menggunakan PHP dan menunjukkannya dengan set data dua dimensi yang mudah. Pembaca boleh melaraskan parameter yang berkaitan mengikut keperluan sebenar untuk menerapkannya pada tugas analisis data mereka sendiri.

Atas ialah kandungan terperinci Penjelasan terperinci tentang algoritma K-means dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan