>백엔드 개발 >PHP 튜토리얼 >PHP의 K-평균 알고리즘에 대한 자세한 설명

PHP의 K-평균 알고리즘에 대한 자세한 설명

王林
王林원래의
2023-07-08 16:42:071471검색

PHP의 K-평균 알고리즘에 대한 자세한 설명

K-평균 알고리즘은 일반적으로 사용되는 클러스터링 분석 알고리즘으로 데이터 마이닝 및 기계 학습 분야에서 널리 사용됩니다. 이번 글에서는 PHP를 이용하여 K-means 알고리즘을 구현하는 과정을 자세히 소개하고 코드 예시를 제공하겠습니다.

  1. 알고리즘 원리

K-평균 알고리즘은 데이터 세트의 샘플 포인트를 여러 클러스터로 나누어 클러스터 내 샘플 포인트 간의 거리를 최대한 줄이고 클러스터 간 샘플 포인트 간의 거리를 다음과 같이 만듭니다. 가능한 한 크게. 구체적인 구현 과정은 다음과 같습니다.

1.1 초기화

먼저 클러스터 K의 개수를 결정해야 합니다. 그런 다음 K개의 샘플 포인트가 데이터 세트에서 초기 중심점으로 무작위로 선택됩니다.

1.2 할당

데이터 세트의 각 샘플 포인트에 대해 해당 포인트와 모든 중심점 사이의 거리를 계산하고 가장 가까운 클러스터에 할당합니다.

1.3 업데이트

각 클러스터에 대해 클러스터에 있는 샘플 포인트의 평균을 새로운 중심점으로 계산합니다.

1.4 반복 반복

클러스터의 샘플 포인트가 더 이상 변경되지 않거나 미리 결정된 반복 횟수에 도달할 때까지 할당 및 업데이트 프로세스를 반복합니다.

  1. PHP 코드 예제

다음은 PHP를 사용하여 K-평균 알고리즘을 구현하는 코드 예제입니다.

<?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);

?>

위 코드에서는 먼저 K-평균 알고리즘을 수행하기 위해 kMeans 함수를 정의합니다. 그런 다음 두 샘플 포인트 사이의 유클리드 거리를 계산하기 위해 계산 거리 함수가 구현됩니다. 마지막으로 클러스터 내 샘플 포인트의 평균을 계산하는 데 사용되는calculateMean 함수가 구현됩니다.

  1. 결과 표시

위 코드에 따라 간단한 2차원 데이터 세트에 대해 군집 분석을 수행하고 결과를 인쇄합니다. 출력에는 클러스터 할당이 표시됩니다.

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
                )

        )
)

위의 결과는 K-평균 알고리즘이 샘플 포인트를 두 개의 클러스터로 나누는 것을 보여줍니다. 첫 번째 클러스터에는 세 개의 샘플 포인트 [2, 10], [2, 5] 및 [1, 2]가 포함됩니다. 클러스터에는 5개의 다른 샘플 포인트가 포함되어 있습니다.

위의 코드와 샘플 데이터를 통해 PHP를 사용하여 K-평균 알고리즘을 구현하는 과정이 매우 간단함과 동시에 효과적인 클러스터링 결과를 얻을 수 있음을 알 수 있습니다.

요약

K-평균 알고리즘은 일반적으로 사용되는 군집 분석 알고리즘으로, 데이터 세트의 샘플 포인트를 여러 군집으로 나누어 군집 내 거리를 최소화하고 군집 간 거리를 최대화한다는 목표를 달성합니다. 이 기사에서는 PHP를 사용하여 K-평균 알고리즘을 구현하기 위한 자세한 절차와 코드 예제를 제공하고 이를 간단한 2차원 데이터 세트로 보여줍니다. 독자는 실제 필요에 따라 관련 매개변수를 조정하여 자신의 데이터 분석 작업에 적용할 수 있습니다.

위 내용은 PHP의 K-평균 알고리즘에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.