使用python写一个KNN算法
时间: 2024-02-02 16:03:08 浏览: 34
好的,下面是使用Python实现KNN算法的示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
class KNN:
def __init__(self, k=3):
self.k = k
def fit(self, X, y):
self.X_train = X
self.y_train = y
def predict(self, X):
y_pred = []
for x in X:
distances = [np.sqrt(np.sum((xt - x)**2)) for xt in self.X_train]
k_indices = np.argsort(distances)[:self.k]
k_nearest_labels = [self.y_train[i] for i in k_indices]
most_common_label = max(set(k_nearest_labels), key=k_nearest_labels.count)
y_pred.append(most_common_label)
return np.array(y_pred)
# 测试数据
X_train = np.array([[1, 2], [2, 1], [3, 4], [4, 3]])
y_train = np.array([0, 0, 1, 1])
X_test = np.array([[2.5, 3]])
# 创建KNN实例
knn = KNN(k=3)
# 训练模型
knn.fit(X_train, y_train)
# 预测结果
y_pred = knn.predict(X_test)
# 输出预测结果
print(y_pred)
# 可视化结果
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train)
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred, marker='x')
plt.show()
```
这个示例代码中,我们首先定义了一个KNN类,其中包含了构造函数、fit函数和predict函数。构造函数中传入一个整数k,代表KNN算法中选择的最近邻数目。fit函数用于训练模型,其中传入训练数据和对应的标签。predict函数用于预测新的数据点的标签。
在测试数据中,我们选取了四个数据点,其中(x1, y1)和(x2, y2)标签为0,(x3, y3)和(x4, y4)标签为1。我们通过创建KNN实例、训练模型和预测结果,并可视化结果。
这个示例只是一个简单的KNN实现,实际应用中可能需要对数据进行预处理、优化算法等。