機器學習 - K近鄰演算法 (KNN)



KNN 是一種監督學習演算法,可用於分類和迴歸問題。KNN 的核心思想是找到給定測試資料點 k 個最近的資料點,並使用這些最近鄰來進行預測。k 值是一個需要調整的超引數,它表示要考慮的鄰居數量。

對於分類問題,KNN 演算法將測試資料點分配給在 k 個最近鄰中出現頻率最高的類別。換句話說,鄰居數量最多的類別就是預測類別。

對於迴歸問題,KNN 演算法將測試資料點分配給 k 個最近鄰值的平均值。

用於衡量兩個資料點之間相似度的距離度量是影響 KNN 演算法效能的重要因素。最常用的距離度量是歐幾里德距離、曼哈頓距離和明可夫斯基距離。

KNN 演算法的工作原理

KNN 演算法可以概括為以下步驟:

  • 載入資料 - 第一步是將資料集載入到記憶體中。這可以使用 pandas 或 numpy 等各種庫來完成。

  • 分割資料 - 下一步是將資料分割成訓練集和測試集。訓練集用於訓練 KNN 演算法,而測試集用於評估其效能。

  • 規範化資料 - 在訓練 KNN 演算法之前,必須規範化資料,以確保每個特徵對距離度量計算的貢獻相同。

  • 計算距離 - 資料規範化後,KNN 演算法計算測試資料點與訓練集中每個資料點之間的距離。

  • 選擇 k 個最近鄰 - KNN 演算法根據上一步計算的距離選擇 k 個最近鄰。

  • 進行預測 - 對於分類問題,KNN 演算法將測試資料點分配給在 k 個最近鄰中出現頻率最高的類別。對於迴歸問題,KNN 演算法將測試資料點分配給 k 個最近鄰值的平均值。

  • 評估效能 - 最後,使用準確率、精確率、召回率和 F1 分數等各種指標來評估 KNN 演算法的效能。

Python 實現

現在我們已經討論了 KNN 演算法的理論,讓我們使用 scikit-learn 在 Python 中實現它。Scikit-learn 是 Python 中一個流行的機器學習庫,它提供了用於分類和迴歸問題的各種演算法。

我們將使用 Iris 資料集,這是一個流行的機器學習資料集,其中包含有關三種不同鳶尾花物種的資訊。該資料集具有四個特徵,包括萼片長度、萼片寬度、花瓣長度和花瓣寬度,以及一個目標變數,即花的種類。

要在 Python 中實現 KNN,我們需要遵循前面提到的步驟。以下是使用 Iris 資料集在 Python 中實現 KNN 的程式碼:

示例

# import libraries
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# load the Iris dataset
iris = load_iris()

#split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(iris.data,
iris.target, test_size=0.35, random_state=42)

#normalize the data
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

#initialize the KNN algorithm
knn = KNeighborsClassifier(n_neighbors=5)

#train the KNN algorithm
knn.fit(X_train, y_train)

#make predictions on the test set
y_pred = knn.predict(X_test)

#evaluate the performance of the KNN algorithm
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: {:.2f}%".format(accuracy*100))

輸出

執行此程式碼時,將產生以下輸出:

Accuracy: 98.11%
廣告