使用python写一个KNN算法
时间: 2024-05-16 07:16:51 浏览: 95
好的,下面是一个简单的 Python 代码实现 KNN 算法:
```python
import numpy as np
class KNN:
def __init__(self, k):
self.k = k
def fit(self, X, y):
self.X_train = X
self.y_train = y
def predict(self, X):
y_pred = []
for i in range(len(X)):
distances = np.sqrt(np.sum(np.square(self.X_train - X[i]), axis=1))
indexes = np.argsort(distances)[:self.k]
k_nearest_labels = [self.y_train[j] for j in indexes]
label = max(set(k_nearest_labels), key=k_nearest_labels.count)
y_pred.append(label)
return y_pred
```
其中,`KNN` 类有三个方法:
- `__init__(self, k)`:初始化方法,参数 `k` 表示 KNN 算法中的 K 值,即选择最近的 K 个邻居。
- `fit(self, X, y)`:训练方法,输入训练数据 `X` 和标签 `y`。
- `predict(self, X)`:预测方法,输入测试数据 `X`,输出预测结果。
以上代码实现了 KNN 算法的基本流程:
1. 计算测试数据与训练数据之间的距离。
2. 选择最近的 K 个邻居。
3. 统计邻居中出现次数最多的标签作为预测结果。
如果需要使用该类进行预测,可以按照以下步骤进行:
```python
# 加载数据
from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target
# 划分数据集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
knn = KNN(k=5)
knn.fit(X_train, y_train)
# 预测结果
y_pred = knn.predict(X_test)
# 计算准确率
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
```
以上代码中,首先加载了鸢尾花数据集,然后划分数据集为训练集和测试集,接着使用 `KNN` 类进行训练和预测,并计算准确率。
阅读全文