如和自己实现一个knn算法
时间: 2023-05-11 15:03:50 浏览: 86
KNN算法是一种基于实例的学习方法,它的基本思想是通过计算待分类样本与训练集中各个样本之间的距离,找到与待分类样本最近的k个训练样本,然后根据这k个训练样本的类别进行投票,将待分类样本归为投票最多的类别。
要实现一个KNN算法,首先需要确定距离度量方法,常用的距离度量方法有欧氏距离、曼哈顿距离、切比雪夫距离等。然后需要确定k值,即选择最近的k个邻居进行投票。最后需要确定分类决策规则,常用的分类决策规则有多数表决规则、加权多数表决规则等。
以下是一个简单的KNN算法的实现代码:
```
import numpy as np
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((self.X_train - x) ** 2, axis=1))
nearest_neighbors = np.argsort(distances)[:self.k]
nearest_labels = self.y_train[nearest_neighbors]
y_pred.append(np.bincount(nearest_labels).argmax())
return np.array(y_pred)
```
这个KNN类有三个方法,分别是初始化方法__init__、训练方法fit和预测方法predict。在初始化方法中,可以指定k值,默认为3。在训练方法中,需要传入训练数据X和标签y。在预测方法中,需要传入待预测数据X,返回预测结果y_pred。
使用这个KNN类可以很方便地实现KNN算法,例如:
```
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(k=5)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
print('Accuracy:', accuracy_score(y_test, y_pred))
```
这个例子使用了sklearn中的鸢尾花数据集,将数据集分为训练集和测试集,然后使用KNN算法进行分类,并计算准确率。