K近鄰算法的原理以及實(shí)現(xiàn)
K 近鄰算法 (K-Nearest Neighbors,KNN) 是一種基于實(shí)例的監(jiān)督學(xué)習(xí)算法,它通過找到數(shù)據(jù)點(diǎn)周圍的鄰居,來預(yù)測新數(shù)據(jù)點(diǎn)的類別。KNN 算法是一種簡單而有效的算法,它的核心思想是“就近”采樣,即根據(jù)數(shù)據(jù)點(diǎn)之間的距離來確定類別。
KNN 算法的原理可以分為以下幾個步驟:
1. 特征提?。簩τ谳斎霐?shù)據(jù),首先需要將其轉(zhuǎn)換為特征向量。特征向量是通過計(jì)算數(shù)據(jù)點(diǎn)之間的距離來確定的。
2. 計(jì)算距離:KNN 算法通過計(jì)算數(shù)據(jù)點(diǎn)之間的距離來確定類別。具體來說,它計(jì)算所有數(shù)據(jù)點(diǎn)之間的距離,然后選擇 k 個最近鄰的數(shù)據(jù)點(diǎn),根據(jù)最近鄰的類別來確定新數(shù)據(jù)點(diǎn)的類別。
3. 預(yù)測新數(shù)據(jù):對于未知的新數(shù)據(jù)點(diǎn),KNN 算法會將其分配給距離最近的 k 個數(shù)據(jù)點(diǎn)的類別之和最小的類別。
下面是一個使用 Python 實(shí)現(xiàn)的簡單 KNN 示例:
```python??
import numpy as np??
from sklearn.neighbors import KNeighborsClassifier??
from sklearn.model_selection import train_test_split
# 加載數(shù)據(jù)集??
iris = load_iris()??
X = iris.data??
y = iris.target
# 將數(shù)據(jù)集劃分為訓(xùn)練集和測試集??
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 創(chuàng)建 KNN 模型??
knn = KNeighborsClassifier(n_neighbors=5)
# 訓(xùn)練模型??
knn.fit(X_train, y_train)
# 預(yù)測新數(shù)據(jù)??
y_pred = knn.predict(X_test)
# 輸出預(yù)測結(jié)果??
print("預(yù)測結(jié)果:", y_pred)??
```
在這個示例中,我們使用了 KNN 算法對鳶尾花數(shù)據(jù)集進(jìn)行分類。輸出結(jié)果為預(yù)測的新數(shù)據(jù)集類別。