ホームページ  >  記事  >  バックエンド開発  >  PHP で K 最近傍アルゴリズムを実装する方法

PHP で K 最近傍アルゴリズムを実装する方法

WBOY
WBOYオリジナル
2023-07-07 10:58:391095ブラウズ

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. Classify
    最後に、K 個の最近傍のカテゴリに基づいて分類する関数を作成する必要があります。以下はサンプル関数です:

function destroy($neighbors) {

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

}

  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;

上記のコードは、分類されるサンプルのカテゴリを出力します。

概要:
この記事では、PHP を使用して K 最近傍アルゴリズムを実装する方法を紹介します。分類されるサンプルと既知のサンプルの間の距離を計算することにより、K 個の最近傍が見つかり、これらの最近傍のカテゴリに従って分類されます。 K 最近傍アルゴリズムは、多くの分類および回帰問題に適したシンプルで一般的に使用されるアルゴリズムです。 PHP を使用した K 最近傍アルゴリズムの実装は比較的簡単で、いくつかの関数を記述するだけで完了します。この記事が読者の K 最近傍アルゴリズムの理解と適用に役立つことを願っています。

以上がPHP で K 最近傍アルゴリズムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。