KNN算法 - 寻找最近邻居

首页 / 机器学习入门教程 / KNN算法 - 寻找最近邻居

K最近邻(KNN)算法是一种监督的ML算法,可用于分类以及回归预测问题,但是,它主要用于行业中的分类预测问题。以下两个属性将很好地定义KNN-

  • 惰性学习算法    -  KNN是一种惰性学习算法,因为它没有专门的训练阶段,并且在分类时将所有数据用于训练。

  • 非参数学习算法 -  KNN也是一种非参数学习算法,因为它不假设基础数据。

KNN算法

K最近邻(KNN)算法使用"特征相似度"来预测新数据点的值,这进一步意味着,将根据新数据点与训练集中的点的匹配程度为该新数据点分配一个值。无涯教程可以通过以下步骤了解其工作方式-

链接:https://www.learnfk.comhttps://www.learnfk.com/python-machine-learning/machine-learning-with-python-knn-algorithm-finding-nearest-neighbors.html

来源:LearnFk无涯教程网

第1步   -  要实现任何算法,都需要数据集,因此,在KNN的第一步中,必须加载训练以及测试数据。

第2步   -  接下来,需要选择K的值,即最近的数据点, K可以是任何整数。

第3步   -  对于测试数据中的每个点,请执行以下操作-

  •     3.1 - 借助以下任意一种方法来计算测试数据与每行训练数据之间的距离:欧几里得距离,曼哈顿距离,距离计算最常用的方法是欧几里得。

  •     3.2 - 现在,基于距离值,将它们按升序排序。

  •     3.3 - 接下来,它将从排序后的数组中选择前K行。

  •     3.4 - 现在,它将基于这些行中最常见的类别为测试点分配一个类别。

第4步    -  结束

以下是了解K的概念和KNN算法的工作的示例-

假设有一个可以绘制如下的数据集-

Concept of K

现在,无涯教程需要将带有黑点的新数据点(在点60,60处)分类为蓝色或红色类。假设K=3,即它将找到三个最近的数据点。下图显示-

KNN Algorithm

可以在上图中看到带有黑点的数据点的三个最近邻居。在这三个中,有两个属于红色等级,因此黑点也将被分配为红色等级。

代码实现

众所周知,K最近邻算法(KNN)可用于分类和回归。以下是Python中使用KNN作为分类器和回归器的配方-

KNN分类器

首先,从导入必要的python包开始-

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

接下来,如下所示从其网络链接下载iris数据集:

path="https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"

接下来,需要为数据集分配列名称,如下所示:

headernames=['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']

现在,需要将数据集读取为pandas数据框,如下所示:

dataset=pd.read_csv(path, names=headernames)
dataset.head()
sepal-lengthsepal-widthpetal-lengthpetal-widthClass
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa

数据预处理将在以下脚本行的帮助下完成。

X=dataset.iloc[:, :-1].values
y=dataset.iloc[:, 4].values

接下来,将数据分为训练和测试拆分。以下代码将数据集拆分为60%的训练数据和40%的测试数据-

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test=train_test_split(X, y, test_size=0.40)

接下来,将按如下方式进行数据缩放-

from sklearn.preprocessing import StandardScaler
scaler=StandardScaler()
scaler.fit(X_train)
X_train=scaler.transform(X_train)
X_test=scaler.transform(X_test)

接下来,借助sklearn的KNeighborsClassifier类训练模型,如下所示-

from sklearn.neighbors import KNeighborsClassifier
classifier=KNeighborsClassifier(n_neighbors=8)
classifier.fit(X_train, y_train)

最后,需要进行预测。可以在以下脚本的帮助下完成-

y_pred=classifier.predict(X_test)

接下来,按如下所示打印输出-

from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
result = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(result)
result1 = classification_report(y_test, y_pred)
print("Classification Report:",)
print (result1)
result2 = accuracy_score(y_test,y_pred)
print("Accuracy:",result2)
Confusion Matrix:
[[21 0 0]
[ 0 16 0]
[ 0 7 16]]
Classification Report:
                  precision   recall   f1-score   support
    Iris-setosa        1.00     1.00       1.00        21
Iris-versicolor        0.70     1.00       0.82        16
 Iris-virginica        1.00     0.70       0.82        23
      micro avg        0.88     0.88       0.88        60
      macro avg        0.90     0.90       0.88        60
   weighted avg        0.92     0.88       0.88        60

Accuracy: 0.8833333333333333

KNN回归器

首先,从导入必要的Python包开始-

import numpy as np
import pandas as pd

接下来,如下所示从其网络链接下载iris数据集:

path="https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"

接下来,需要为数据集分配列名称,如下所示:

headernames=['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']

现在,需要将数据集读取为pandas数据框,如下所示:

data = pd.read_csv(url, names = headernames)
array = data.values
X = array[:,:2]
Y = array[:,2]
data.shape
output:(150, 5)

接下来,从 sklearn 导入 KNeighborsRegressor 以适合模型-

from sklearn.neighbors import KNeighborsRegressor
knnr=KNeighborsRegressor(n_neighbors=10)
knnr.fit(X, y)

最后,无涯教程可以找到MSE,如下所示:

print ("The MSE is:",format(np.power(y-knnr.predict(X),2).mean()))
The MSE is: 0.12226666666666669

这一章《KNN算法 - 寻找最近邻居》你学到了什么?在下面做个笔记吧!做站不易,你的分享是对我们最大的支持,感谢!😊

好记忆不如烂笔头。留下你的足迹吧 :)

相关推荐

从0开始做增长 -〔刘津 - 〕

职场求生攻略 -〔臧萌 - 〕

WebAssembly入门课 -〔于航 - 〕

Spring编程常见错误50例 -〔傅健 - 〕

展平不规则列表并reshape 另一个相同长度的平面列表,重建原始元素顺序

如何在python中读取包含二进制数据的sys.stdin(忽略错误)?

自定义命名实体识别

在 pivot Pandas 中分组数据

读取 Turtle 文件并使用 SPARQL 查询图形

Selenium Python,如何在没有“url”的情况下将PDF下载到特定位置

视频推荐

Python机器学习 - 03-损失函数 更多视频教程 »