KNN アルゴリズムは、小規模なデータセットや低次元の特徴空間に適した、シンプルで使いやすい分類アルゴリズムです。画像分類やテキスト分類などの分野で優れたパフォーマンスを発揮し、実装の簡単さと理解のしやすさで人気があります。
KNN アルゴリズムの基本的な考え方は、分類対象のサンプルの特性とトレーニング サンプルの特性を比較することによって最も近い K 近傍を見つけ、分類を決定することです。これらの K 近傍のカテゴリに基づくサンプルのカテゴリ。 KNN アルゴリズムは、ラベル付きカテゴリを含むトレーニング セットと分類されるテスト セットを使用します。 KNN アルゴリズムの分類プロセスには、次のステップが含まれます: まず、分類されるサンプルとすべてのトレーニング サンプルの間の距離を計算します。次に、K 個の最近傍を選択し、次に、K 個の最近傍のカテゴリに従って投票して、分類されたサンプルのカテゴリ。最終的に、分類されるサンプルのカテゴリは、投票結果で最も多くの票を獲得したカテゴリとして決定されます。これらの手順を通じて、KNN アルゴリズムは分類対象のサンプルを正確に分類できます。
1. 距離の計算
未分類のテスト サンプルの場合、トレーニング セット内のすべてのサンプルとの間の距離を計算する必要があります。一般的に使用されるのは、ユークリッド法やマンハッタン法などの方法です。
2. K 近傍の選択
計算された距離に基づいて、分類するサンプルに最も近い K 個のトレーニング セット サンプルを選択します。これらのサンプルは、分類されるサンプルの K 個の近傍です。
3. カテゴリの決定
K 近傍のカテゴリに基づいて、分類するサンプルのカテゴリを決定します。 「多数決法」は通常、分類対象のサンプルのカテゴリを決定するために使用されます。つまり、K 個の近傍の中で最も多く出現するカテゴリが、分類対象のサンプルのカテゴリとして選択されます。
KNN アルゴリズムは比較的単純ですが、注意が必要な問題がいくつかあります。まず第一に、K 値の選択はアルゴリズムのパフォーマンスに大きな影響を及ぼし、通常は相互検証やその他の方法を通じて最適な K 値を決定する必要があります。第 2 に、KNN アルゴリズムはデータ セットのサイズと次元に影響されやすいため、大規模で高次元のデータ セットを処理する場合には効率の問題が発生します。さらに、KNN アルゴリズムには「カテゴリの不均衡」という問題もあります。つまり、特定のカテゴリのサンプル数が少ないため、アルゴリズムがこれらのカテゴリに対して分類効果が低下する可能性があります。
次は、Python を使用して KNN アルゴリズムを実装する分類の例です。コードは次のとおりです:
import numpy as np from collections import Counter class KNN: def __init__(self, k): self.k = k def fit(self, X, y): self.X_train = X self.y_train = y def predict(self, X_test): predictions = [] for x_test in X_test: distances = [] for x_train in self.X_train: distance = np.sqrt(np.sum((x_test - x_train)**2)) distances.append(distance) idx = np.argsort(distances)[:self.k] k_nearest_labels = [self.y_train[i] for i in idx] most_common = Counter(k_nearest_labels).most_common(1) predictions.append(most_common[0][0]) return np.array(predictions)
この KNN クラスのコンストラクターで渡されるパラメーター k分類するために選択する近傍の数を示します。 fit メソッドは、トレーニング セット X とそれに対応するラベル y を受け入れてモデルをトレーニングするために使用されます。予測メソッドはテスト セットを分類するために使用され、テスト セット X_test を受け入れ、予測されたラベルを返します。
予測メソッドでは、各テスト サンプルについて、まずトレーニング セット内のすべてのサンプルからの距離を計算し、最も近い k 個のサンプルを選択します。次に、これら k 個のサンプルの中で最も頻繁に出現するラベルがカウントされ、テスト サンプルの分類ラベルとして使用されます。
次は、この KNN クラスを分類に使用する例です。データ セットは 2 次元平面上の点セットであり、赤い点はカテゴリ 1 を表し、青い点はカテゴリ 1 を表します。カテゴリ 2 を表します:
import matplotlib.pyplot as plt # 生成数据集 X = np.random.rand(200, 2) * 5 - 2.5 y = np.zeros(200) y[np.sum(X**2, axis=1) > 2] = 1 # 分割训练集和测试集 train_idx = np.random.choice(200, 150, replace=False) test_idx = np.array(list(set(range(200)) - set(train_idx))) X_train, y_train = X[train_idx], y[train_idx] X_test, y_test = X[test_idx], y[test_idx] # 训练模型并进行预测 knn = KNN(k=5) knn.fit(X_train, y_train) y_pred = knn.predict(X_test) # 计算准确率并绘制分类结果 accuracy = np.mean(y_pred == y_test) print("Accuracy:", accuracy) plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred) plt.show()
このコードを実行すると、分類結果の画像が表示されます。このうち、色は予測カテゴリを表し、赤はカテゴリ 1、青はカテゴリ 2 を表します。分類結果に基づいて、モデルの精度を計算できます。
この例では、2 次元平面上で KNN アルゴリズムを適用し、距離を計算して近傍を決定し、カテゴリに従って分類する方法を示します。実際のアプリケーションでは、KNN アルゴリズムは画像分類、テキスト分類などの分野で使用でき、シンプルで効果的な分類アルゴリズムです。
以上がKNN アルゴリズム分類の基本原理と例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。