下面是一個簡單的示例代碼,實現了knn算法:
```python
import numpy as np
from collections import Counter
def knn(train_X, train_y, test_X, k):
distances = []
# 計算測試樣本與訓練樣本之間的距離
for i in range(len(train_X)):
distance = np.sqrt(np.sum(np.square(test_X - train_X[i])))
distances.append((distance, train_y[i]))
# 按距離從小到大排序
distances.sort(key=lambda x: x[0])
# 選擇距離最近的k個樣本
neighbors = []
for i in range(k):
neighbors.append(distances[i][1])
# 根據k個樣本的標簽進行投票,選擇出現次數最多的標簽作為預測結果
counter = Counter(neighbors)
prediction = counter.most_common(1)[0][0]
return prediction
# 測試數據
train_X = np.array([[1, 1], [1, 2], [2, 2], [3, 3], [4, 4]])
train_y = np.array([0, 0, 1, 1, 1])
test_X = np.array([[2, 3]])
# 使用knn算法進行預測
prediction = knn(train_X, train_y, test_X, 3)
print("預測結果:", prediction)
```
在這個示例中,我們使用numpy庫進行數據處理,collections庫中的Counter類用于計算標簽的出現次數。首先,計算測試樣本與訓練樣本之間的歐式距離,并將距離和對應的標簽保存在列表中。然后,根據距離從小到大排序,選擇距離最近的k個樣本。最后,根據k個樣本的標簽進行投票,選擇出現次數最多的標簽作為預測結果。在這個例子中,我們使用一個簡單的二維數據集進行測試,預測結果為1。