Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan algoritma jiran terdekat K dalam PHP

Bagaimana untuk melaksanakan algoritma jiran terdekat K dalam PHP

WBOY
WBOYasal
2023-07-07 10:58:391095semak imbas

Cara melaksanakan K algoritma jiran terdekat dalam PHP

K algoritma jiran terdekat ialah algoritma pembelajaran mesin yang mudah dan biasa digunakan, digunakan secara meluas dalam masalah klasifikasi dan regresi. Prinsip asasnya adalah untuk mengelaskan sampel yang akan dikelaskan ke dalam kategori di mana sampel K yang diketahui terdekat tergolong dengan mengira jarak antara sampel yang akan dikelaskan dan sampel yang diketahui. Dalam artikel ini, kami akan memperkenalkan cara melaksanakan algoritma jiran terdekat K dalam PHP dan memberikan contoh kod.

  1. Penyediaan data
    Pertama, kita perlu menyediakan data sampel yang diketahui dan data sampel untuk dikelaskan. Adalah diketahui bahawa data sampel mengandungi kategori dan nilai ciri, manakala data sampel yang akan dikelaskan hanya mempunyai nilai ciri. Untuk memudahkan contoh, kami menganggap bahawa kedua-dua data sampel yang diketahui dan data sampel yang akan dikelaskan diwakili dalam bentuk tatasusunan. Berikut ialah data sampel:

Data sampel yang diketahui:
$knownSamples = tatasusunan(

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

); ) );


Kira jarak

Seterusnya, kita perlu menulis fungsi untuk mengira jarak antara sampel yang akan dikelaskan dan sampel yang diketahui. Kaedah pengukuran jarak yang biasa digunakan termasuk jarak Euclidean, jarak Manhattan, dsb. Berikut ialah contoh pengiraan jarak Euclidean:

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

Mencari K jiran terdekat

Dalam langkah ini, kita perlu menulis fungsi terdekat yang mencari jarak K sampel sampel yang diketahui untuk dikelaskan. Berikut ialah contoh fungsi:

  1. function findNeighbors($knownSamples, $unknownSample, $k) {
  2. $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);
}

Klasifikasi

Akhir sekali, kita perlu menulis fungsi untuk mengelas berdasarkan kategori K yang terdekat . Berikut ialah contoh fungsi:

  1. function classify($jiran) {
  2. $classes = array();
    foreach ($neighbors as $neighbor) {
        $classes[] = $neighbor['class'];
    }
    $classCounts = array_count_values($classes);
    arsort($classCounts);
    return key($classCounts);
}

Contoh penuh

Berikut ialah kod sampel lengkap:
  1. 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;
    

    Kod di atas akan mengeluarkan kategori sampel dikelaskan.
Ringkasan:

Artikel ini memperkenalkan cara melaksanakan algoritma jiran terdekat K dalam PHP. Dengan mengira jarak antara sampel yang akan dikelaskan dan sampel yang diketahui, K jiran terdekat ditemui, dan kemudian dikelaskan mengikut kategori jiran terdekat ini. Algoritma jiran terdekat K ialah algoritma yang mudah dan biasa digunakan sesuai untuk banyak masalah klasifikasi dan regresi. Melaksanakan algoritma jiran terdekat K menggunakan PHP adalah agak mudah dan hanya memerlukan penulisan beberapa fungsi untuk diselesaikan. Saya harap artikel ini dapat membantu pembaca memahami dan menggunakan algoritma jiran terdekat K.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan algoritma jiran terdekat K dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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