K最近邻算法(KNN)---sklearn+python实现方式

1. KNN算法简介

K近邻算法(K-Nearest Neighbors,简称KNN)是一种基本的分类和回归方法。它的核心思想是样本在特征空间中的最邻近,即样本特征空间中的K个最相似样本的分类结果来决定新样本所属的类别。其中,K为用户自定义的正整数。

KNN算法被广泛应用于各种领域,如推荐系统、生物科技、金融等等。它的优点在于模型简单易懂,具有较高的准确率,对于数据无需任何假设,本身自带特征选择方法等等。但相对的,KNN算法因为需要计算样本之间的距离,在大数据集和高维数据上表现不佳,算法耗时较长。

2. KNN算法的sklearn+python实现

2.1 KNN算法在sklearn中的实现

在sklearn库中,KNN算法的实现位于neighbors模块中。其中,KNeighborsClassifier类是一个分类器,用于KNN分类问题;KNeighborsRegressor类是一个回归器,用于KNN回归问题。这两个类的初始化参数相似,主要包括:

n_neighbors: K值,默认为5

weights: 用于指定权重计算方式,默认为均匀权重

algorithm: 用于指定用于计算的算法,默认为自动选择

leaf_size: 用于指定BallTree或KDTree的叶结点数目,默认为30

p: 用于指定距离度量的方式,默认为欧几里得距离(2范数),其他可选值为曼哈顿距离(1范数)、闵可夫斯基距离等

2.2 在python中实现KNN算法

下面让我们来看看在python中如何实现KNN算法。首先,我们需要加载数据集和预处理数据,这里选择使用iris数据集,方法如下:

from sklearn.datasets import load_iris

iris = load_iris()

X = iris.data

y = 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.3, random_state=42)

然后,我们需要实现KNN算法。核心代码如下:

import numpy as np

from collections import Counter

class KNN:

def __init__(self, n_neighbors=5, p=2):

self.n_neighbors = n_neighbors

self.p = p

def predict(self, X_train, y_train, x_test):

distances = [np.linalg.norm(x_train - x_test, ord=self.p) for x_train in X_train]

k_neighbors = np.argsort(distances)[:self.n_neighbors]

k_neighbor_labels = [y_train[i] for i in k_neighbors]

most_common = Counter(k_neighbor_labels).most_common(1)

return most_common[0][0]

上述代码中的predict函数中,我们首先计算测试样本与每个训练样本之间的距离,然后取出其中的K个最邻近样本,根据这些样本的标签投票得出测试样本的预测结果。

3. KNN算法应用案例

KNN算法应用广泛,下面以鸢尾花数据集为例,演示如何使用KNN算法对鸢尾花进行分类。首先,我们将数据集随机分为训练集和测试集,代码如下:

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

iris = load_iris()

X = iris.data

y = iris.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

接着,我们使用KNeighborsClassifier类实现KNN算法并进行训练,代码如下:

from sklearn.neighbors import KNeighborsClassifier

knn = KNeighborsClassifier(n_neighbors=5)

knn.fit(X_train, y_train)

然后,我们可以使用测试集进行预测,并计算预测准确率,代码如下:

from sklearn.metrics import accuracy_score

y_pred = knn.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)

print("Accuracy: {:.2f}%".format(accuracy*100))

运行代码,我们得到准确率为97.78%。

4. 总结

KNN算法是一种简单易懂、应用广泛的分类和回归方法。该算法的核心思想是利用最邻近样本的标签来预测新样本的标签。在sklearn库中,KNN算法的实现位于neighbors模块中。同时,我们也可以通过自己的代码实现KNN算法,本文分享了KNN算法在python中的实现方式。最后,本文以鸢尾花数据集为例,演示了如何使用KNN算法对鸢尾花进行分类。通过本文的介绍和实践,您应该已经对KNN算法有了一定的了解和掌握,希望对您有所帮助。

后端开发标签