k-最近鄰 (k-NN) 分類是一種非參數、基於實例的學習演算法,用於機器學習,根據特徵空間中最近鄰的類別對資料點進行分類。它透過考慮資料點的 k 個最近鄰的類別來為資料點分配類別。 k-NN 分類的主要目的是利用與現有標記資料的相似性來預測新資料點的類別。
1。距離度量:該演算法使用距離度量(通常為歐幾里德距離)來確定資料點的「接近程度」。
2。選擇 k:參數 k 指定在做出分類決策時要考慮的最近鄰居的數量。
3。多數投票:新數據點的預測類別是其 k 個最近鄰居中最常見的類別。
4。加權投票:在某些情況下,鄰居會根據距離進行加權,距離較近的鄰居對分類的影響更大。
非參數:k-NN 是一種非參數方法,這意味著它不會對資料的基本分佈做出任何假設。這使得它可以靈活地處理各種類型的資料。
基於實例的學習:此演算法儲存整個訓練資料集並根據資料中的局部模式進行預測。它也被稱為“惰性”學習演算法,因為它會延遲處理直到發出查詢。
距離計算:距離測量的選擇可以顯著影響模型的表現。常見指標包括歐幾里德距離、曼哈頓距離和閔可夫斯基距離。
k 的選擇:k 的值是一個關鍵的超參數。交叉驗證通常用於確定給定資料集的最佳 k 值。
k-最近鄰 (k-NN) 分類是一種非參數、基於實例的學習演算法,用於根據最近鄰的類別對資料點進行分類。此範例示範如何使用合成資料實現用於多類別分類的 k-NN、評估模型的效能以及可視化三個類別的決策邊界。
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。分割資料集
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中文網其他相關文章!