写一段KNN预测的代码
时间: 2023-12-01 15:57:39 浏览: 35
好的,对于KNN算法的预测代码如下:
```
import numpy as np
from collections import Counter
# 训练数据
X_train = np.array([[1, 1], [1, 2], [2, 2], [4, 4], [4, 5], [5, 5]])
y_train = np.array(['A', 'A', 'A', 'B', 'B', 'B'])
# 预测数据
X_predict = np.array([[3, 3], [1, 3], [5, 4]])
# KNN算法预测函数
def predict(X_train, y_train, X_predict, k):
y_predict = []
for x in X_predict:
# 计算测试数据与训练数据的距离
distances = [np.sqrt(np.sum((x - x_train) ** 2)) for x_train in X_train]
# 根据距离排序,选择最近的k个点
sorted_index = np.argsort(distances)
k_nearest_labels = [y_train[i] for i in sorted_index[:k]]
# 统计k个点中每个类别的数量
vote_counter = Counter(k_nearest_labels)
# 获得数量最多的类别
max_count = max(vote_counter.values())
most_voted_label = [k for k, v in vote_counter.items() if v == max_count]
# 如果数量最多的类别有多个,随机选择一个
y_predict.append(np.random.choice(most_voted_label))
return np.array(y_predict)
# 进行预测
y_predict = predict(X_train, y_train, X_predict, k=3)
print(y_predict)
```
这段代码实现了KNN算法的预测功能。其中,X_train和y_train是训练数据,X_predict是要预测的数据。函数predict接受这三个参数,以及一个k值,表示要选择最近的k个点进行预测。最终返回一个预测结果的数组y_predict。