首頁  >  文章  >  後端開發  >  K 最近鄰分類,分類:監督機器學習

K 最近鄰分類,分類:監督機器學習

王林
王林原創
2024-07-19 14:58:38828瀏覽

k-最近鄰分類

定義和目的

k-最近鄰 (k-NN) 分類是一種非參數、基於實例的學習演算法,用於機器學習,根據特徵空間中最近鄰的類別對資料點進行分類。它透過考慮資料點的 k 個最近鄰的類別來為資料點分配類別。 k-NN 分類的主要目的是利用與現有標記資料的相似性來預測新資料點的類別。

主要目標:

  • 分類:根據最近鄰居的多數投票或加權投票將新資料點分配給預先定義的類別之一。
  • 估計:決定資料點屬於特定類別的可能性。
  • 理解關係:辨識特徵空間中哪些資料點相似。

k-NN 分類的工作原理

1。距離度量:該演算法使用距離度量(通常為歐幾里德距離)來確定資料點的「接近程度」。

  • 歐幾裡得距離
    • d(p, q) = sqrt((p1 - q1)^2 + (p2 - q2)^2 + ... + (pn - qn)^2)
    • 測量 n 維空間中兩點 p 與 q 之間的直線距離。

2。選擇 k:參數 k 指定在做出分類決策時要考慮的最近鄰居的數量。

  • 小 k:可能導致過度擬合,即模型對訓練資料過於敏感。
  • 大 k:可能導致欠擬合,即模型過於泛化,可能會錯過資料中更精細的模式。

3。多數投票:新數據點的預測類別是其 k 個最近鄰居中最常見的類別。

  • 多數票
    • 統計每個類別在 k 個鄰居中出現的次數。
    • 將計數最高的類別分配給新資料點。

4。加權投票:在某些情況下,鄰居會根據距離進行加權,距離較近的鄰居對分類的影響更大。

  • 加權投票
    • 以距離的倒數來衡量每個鄰居的投票。
    • 對每個班級的加權投票進行求和。
    • 將加權總和最高的類別分配給新資料點。

關鍵概念

  1. 非參數:k-NN 是一種非參數方法,這意味著它不會對資料的基本分佈做出任何假設。這使得它可以靈活地處理各種類型的資料。

  2. 基於實例的學習:此演算法儲存整個訓練資料集並根據資料中的局部模式進行預測。它也被稱為“惰性”學習演算法,因為它會延遲處理直到發出查詢。

  3. 距離計算:距離測量的選擇可以顯著影響模型的表現。常見指標包括歐幾里德距離、曼哈頓距離和閔可夫斯基距離。

  4. k 的選擇:k 的值是一個關鍵的超參數。交叉驗證通常用於確定給定資料集的最佳 k 值。

k-最近鄰 (k-NN) 分類範例

k-最近鄰 (k-NN) 分類是一種非參數、基於實例的學習演算法,用於根據最近鄰的類別對資料點進行分類。此範例示範如何使用合成資料實現用於多類別分類的 k-NN、評估模型的效能以及可視化三個類別的決策邊界。

Python 程式碼範例

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:

knn classification

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn