python实现knn算法
时间: 2023-08-30 22:10:33 浏览: 122
利用 Python 实现 KNN 算法
KNN算法是一种基本的分类与回归算法,是一种基于实例的学习方法。下面是用Python实现KNN算法的示例代码:
```python
import numpy as np
from collections import Counter
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 = [self._predict(x) for x in X]
return np.array(y_pred)
def _predict(self, x):
# 计算距离
distances = [np.sqrt(np.sum((x - x_train) ** 2)) for x_train in self.X_train]
# 获得k个最近邻的标签
k_idx = np.argsort(distances)[:self.k]
k_labels = [self.y_train[i] for i in k_idx]
# 投票
most_common = Counter(k_labels).most_common(1)
return most_common[0][0]
```
上面的代码实现了一个KNN类,包括fit方法和predict方法。其中,fit方法用于训练模型,传入训练集的特征X和标签y;predict方法用于预测测试集的标签。在_predict方法中,首先计算测试样本和每个训练样本之间的距离,然后选取距离最近的k个训练样本,统计它们的标签,最后返回出现次数最多的标签作为预测结果。
使用示例:
```python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据集
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)
# 创建KNN对象
knn = KNN(k=3)
# 训练模型
knn.fit(X_train, y_train)
# 预测测试集
y_pred = knn.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)
```
上面的代码使用sklearn库中的iris数据集作为例子,将数据集分为训练集和测试集,创建KNN对象,训练模型,预测测试集,并计算准确率。
阅读全文