首頁  >  文章  >  後端開發  >  如何用PHP實作K近鄰演算法

如何用PHP實作K近鄰演算法

WBOY
WBOY原創
2023-07-07 10:58:391023瀏覽

如何用PHP實作K近鄰演算法

K近鄰演算法是一種簡單且常用的機器學習演算法,廣泛應用於分類與迴歸問題。它的基本原理是透過計算待分類樣本與已知樣本之間的距離,將待分類樣本歸類為距離最近的K個已知樣本所屬的類別。在本文中,我們將介紹如何用PHP實作K近鄰演算法,並提供程式碼範例。

  1. 資料準備
    首先,我們需要準備已知樣本資料和待分類樣本資料。已知樣本資料包含類別和特徵值,待分類樣本資料只有特徵值。為了簡化範例,我們假設已知樣本資料和待分類樣本資料均以陣列的形式表示。以下是一個範例資料:

已知樣本資料:
$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));

  1. 計算距離
    接下來,我們需要寫一個函數,用於計算待分類樣本與已知樣本之間的距離。常用的距離度量法有歐氏距離、曼哈頓距離等。以下是一個計算歐氏距離的範例:

function euclideanDistance($sample1, $sample2) {

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

}

  1. #尋找K個最近鄰居
    在這一步,我們需要寫一個函數,用於尋找距離待分類樣本最近的K個已知樣本。以下是一個範例函數:

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

}

  1. #進行分類
    最後,我們需要寫一個函數,根據K個最近鄰居的類別進行分類。以下是一個範例函數:

function classify($neighbors) {

$classes = array();
foreach ($neighbors as $neighbor) {
    $classes[] = $neighbor['class'];
}
$classCounts = array_count_values($classes);
arsort($classCounts);
return key($classCounts);

}

    ## 完整範例
  1. 以下是一個完整的範例代碼:
  2. 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;
    
以上程式碼將輸出待分類樣本的類別。

總結:

本文介紹如何用PHP實作K近鄰演算法。透過計算待分類樣本與已知樣本之間的距離,找到K個最近鄰居,然後根據這些最近鄰居的類別進行分類。 K近鄰演算法是一種簡單且常用的演算法,適用於許多分類和迴歸問題。使用PHP實作K近鄰演算法相對簡單,只需寫幾個函數即可完成。希望本文能幫助讀者理解並應用K近鄰演算法。

以上是如何用PHP實作K近鄰演算法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn