k-最近傍 (k-NN) 分類は、特徴空間内の最近傍のクラスに基づいてデータ ポイントを分類するために機械学習で使用されるノンパラメトリックなインスタンスベースの学習アルゴリズムです。 。 k 個の最近傍のクラスを考慮して、データ ポイントにクラスを割り当てます。 k-NN 分類の主な目的は、既存のラベル付きデータとの類似性を利用して、新しいデータ ポイントのクラスを予測することです。
1.距離メトリック: アルゴリズムは距離メトリック (通常はユークリッド距離) を使用して、データ ポイントの「近さ」を判断します。
2. k の選択: パラメーター k は、分類の決定を行うために考慮する最近傍の数を指定します。
3.多数決: 新しいデータ ポイントの予測クラスは、その k 個の最近傍の中で最も一般的なクラスです。
4.重み付け投票: 場合によっては、隣接するものは距離に応じて重み付けされ、より近い隣接するものほど分類に大きな影響を与えます。
ノンパラメトリック: k-NN はノンパラメトリック手法であり、データの基礎となる分布について何の仮定も行わないことを意味します。これにより、さまざまな種類のデータを柔軟に処理できるようになります。
インスタンスベースの学習: アルゴリズムはトレーニング データセット全体を保存し、データ内のローカル パターンに基づいて予測を行います。クエリが作成されるまで処理を遅らせるため、「遅延」学習アルゴリズムとしても知られています。
距離計算: 距離メトリックの選択は、モデルのパフォーマンスに大きな影響を与える可能性があります。一般的なメトリックには、ユークリッド距離、マンハッタン距離、ミンコフスキー距離などがあります。
k の選択: k の値は重要なハイパーパラメーターです。相互検証は、特定のデータセットの k の最適値を決定するためによく使用されます。
k-最近傍 (k-NN) 分類は、最近傍のクラスに基づいてデータ ポイントを分類するために使用されるノンパラメトリックなインスタンスベースの学習アルゴリズムです。この例では、合成データを使用してマルチクラス分類に k-NN を実装し、モデルのパフォーマンスを評価し、3 つのクラスの決定境界を視覚化する方法を示します。
1.ライブラリをインポート
import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score, classification_report
このブロックは、データ操作、プロット、機械学習に必要なライブラリをインポートします。
2. 3 つのクラスでサンプル データを生成する
np.random.seed(42) # For reproducibility n_samples = 300 # Class 0: Cluster at the top-left corner X0 = np.random.randn(n_samples // 3, 2) * 0.5 + [-2, 2] # Class 1: Cluster at the top-right corner X1 = np.random.randn(n_samples // 3, 2) * 0.5 + [2, 2] # Class 2: Cluster at the bottom-center X2 = np.random.randn(n_samples // 3, 2) * 0.5 + [0, -2] # Combine all classes X = np.vstack((X0, X1, X2)) y = np.array([0] * (n_samples // 3) + [1] * (n_samples // 3) + [2] * (n_samples // 3))
このブロックは、特徴空間の異なる領域にある 3 つのクラスの合成データを生成します。
3.データセットを分割します
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
このブロックは、モデル評価のためにデータセットをトレーニング セットとテスト セットに分割します。
4. k-NN 分類器の作成と学習
k = 5 # Number of neighbors knn_classifier = KNeighborsClassifier(n_neighbors=k) knn_classifier.fit(X_train, y_train)
このブロックは、指定された近傍数で k-NN 分類器を初期化し、トレーニング データセットを使用してトレーニングします。
5.予測を立てる
y_pred = knn_classifier.predict(X_test)
このブロックは、トレーニングされたモデルを使用してテスト セットで予測を行います。
6. Evaluate the Model
accuracy = accuracy_score(y_test, y_pred) print(f"Accuracy: {accuracy:.2f}") print("\nClassification Report:") print(classification_report(y_test, y_pred))
Output:
Accuracy: 1.00 Classification Report: precision recall f1-score support 0 1.00 1.00 1.00 22 1 1.00 1.00 1.00 16 2 1.00 1.00 1.00 22 accuracy 1.00 60 macro avg 1.00 1.00 1.00 60 weighted avg 1.00 1.00 1.00 60
This block calculates and prints the accuracy and classification report, providing insights into the model's performance.
7. Visualize the Decision Boundary
h = 0.02 # Step size in the mesh x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) Z = knn_classifier.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.figure(figsize=(12, 8)) plt.contourf(xx, yy, Z, cmap=plt.cm.RdYlBu, alpha=0.8) plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.RdYlBu, edgecolors='black') plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.title(f'k-NN Classification (k={k})') plt.colorbar() plt.show()
This block visualizes the decision boundaries created by the k-NN classifier, illustrating how the model separates the three classes in the feature space.
Output:
This structured approach demonstrates how to implement and evaluate k-NN for multiclass classification tasks, providing a clear understanding of its capabilities and the effectiveness of visualizing decision boundaries.
以上がK 最近傍分類、分類: 教師あり機械学習の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。