Python 中的 K-Nearest Neighbors (KNN)

K近邻(kNN)是一种(社区/教程/监督机器学习)技术,可以用来处理分类和回归任务。

最接近邻居K算法的想法

我们的行为是由我们成长的伴侣塑造的,我们的父母也以各种方式塑造了我们的个性,如果你在喜欢运动的人中长大,很可能你最终会爱体育。

如果你有一个亲密的朋友,和他(她)一起度过大部分时间,你最终会有相似的兴趣和相同的爱好,这就是 kNN 与 k=1. 2. 如果你不断与一组 5 的人在一起,那么这个组中的每个人都会对你的行为产生影响,你最终会成为 5 的平均值。

kNN分类器使用多数投票原则识别数据点的类别.如果 k 设置为 5,则检查接近的 5 个点的类别。

我们是否见证了接近的人,但数据点是如何被认为是接近的?数据点之间的距离被测量。有各种技术来估计距离。欧克利底距离(与p=2的明科夫斯基距离)是最常用的距离测量之一。下图解释了如何计算在2维空间中两个点之间的欧克利底距离。它是使用位置的x和y坐标之间的差异的平方来确定的。

Euclidean Distance KNN

在Python中实施KNN算法

现在让我们进入Python中的KNN的实施,我们将通过步骤来帮助您打破代码并更好地理解它。

1、导入模块

1import numpy as np
2import pandas as pd
3
4import matplotlib.pyplot as plt
5
6from sklearn.datasets import make_blobs
7from sklearn.neighbors import KNeighborsClassifier
8from sklearn.model_selection import train_test_split

2、创建数据集

Scikit-learn有许多工具来创建合成数据集,这些工具非常适合测试机器学习算法。

1X, y = make_blobs(n_samples = 500, n_features = 2, centers = 4,cluster_std = 1.5, random_state = 4)

此代码生成一个由 500 个样本组成的数据集,分为四个类,共有两种特征。 使用相关参数,您可以快速更改样本、特征和类的数量。

3、可视化数据集

1plt.style.use('seaborn')
2plt.figure(figsize = (10,10))
3plt.scatter(X[:,0], X[:,1], c=y, marker= '*',s=100,edgecolors='black')
4plt.show()

Data Visualization KNN

4、将数据分成培训和测试数据集

对于每个受监督的机器学习方法,将数据集分为训练和测试集是至关重要的。我们首先训练模型,然后将其放在数据集的不同部分上进行测试。

1X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 0)

通过列车大小和测试大小选项,我们可以确定原始数据的使用量分别用于列车和测试组,默认分离为列车组的75%,测试组的25%。

五、分类实施

之后,我们将构建一个 kNN 分类对象. 我开发两个分类器具有 k 值 1 和 5 来证明 k 值的相关性. 然后使用列车组进行模型训练. k 值使用 n_neighbors 参数选择。

1knn5 = KNeighborsClassifier(n_neighbors = 5)
2knn1 = KNeighborsClassifier(n_neighbors=1)

6、KNN分类器的预测

然后,在测试集中,我们预测目标值,并将其与实际值进行比较。

1knn5.fit(X_train, y_train)
2knn1.fit(X_train, y_train)
3
4y_pred_5 = knn5.predict(X_test)
5y_pred_1 = knn1.predict(X_test)

预测两个 k 值的准确性

1from sklearn.metrics import accuracy_score
2print("Accuracy with k=5", accuracy_score(y_test, y_pred_5)*100)
3print("Accuracy with k=1", accuracy_score(y_test, y_pred_1)*100)

对 k 的值的准确性如下:

1Accuracy with k=5 93.60000000000001
2Accuracy with k=1 90.4

8、可视化预测

让我们看看测试集和预测值与 k=5 和 k = 1 来看看 k 值的影响。

1plt.figure(figsize = (15,5))
2plt.subplot(1,2,1)
3plt.scatter(X_test[:,0], X_test[:,1], c=y_pred_5, marker= '*', s=100,edgecolors='black')
4plt.title("Predicted values with k=5", fontsize=20)
5
6plt.subplot(1,2,2)
7plt.scatter(X_test[:,0], X_test[:,1], c=y_pred_1, marker= '*', s=100,edgecolors='black')
8plt.title("Predicted values with k=1", fontsize=20)
9plt.show()

Visualize Predictions KNN

如何找到实现 KNN 的最佳 k 值

  1. k=1:模型过于狭窄,没有得到适当的普遍化;它对噪音也具有很高的敏感性;该模型预测了列车上以前未知的新数据点,其准确度很高,但在新鲜的、以前未见的数据点上,它是一个不好的预测器;因此,我们很可能有一个过度合适的模型
  2. k=100:模型在列车和测试组上都过于宽泛和不可靠。

KNN算法的限制

KNN是一个简单的算法,它不依赖于任何内部的机器学习模型来生成预测。KNN是一种分类方法,它只需要知道有多少类别(一个或多个)。

这种简单性的缺点在于,它无法预测不寻常的事情(如新疾病),KNN无法实现,因为它不知道在健康的人口中罕见物品的流行程度是什么。

虽然KNN在测试集中达到高精度,但在时间和记忆方面更慢,更昂贵,需要大量的内存来存储整个训练数据集用于预测。

最后,考虑到我们迄今为止所讨论的一切,我们应该记住,KNN不适合大型数据集。

结论

希望您现在能够更好地了解 KNN 算法,我们已经研究了 KNN 如何保存完整的数据集以产生预测的各种想法。

KNN是几种不使用学习模型来预测的懒惰学习算法之一. 通过平均到来的观察和已经可用的数据之间的相似性,KNN在飞行中创建了预测。

谢谢你的阅读!

Published At
Categories with 技术
comments powered by Disqus