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算法有了一定的了解和掌握,希望对您有所帮助。