K最近邻(KNN)算法是一种监督的ML算法,可用于分类以及回归预测问题,但是,它主要用于行业中的分类预测问题。以下两个属性将很好地定义KNN-
惰性学习算法 - KNN是一种惰性学习算法,因为它没有专门的训练阶段,并且在分类时将所有数据用于训练。
非参数学习算法 - KNN也是一种非参数学习算法,因为它不假设基础数据。
KNN算法
K最近邻(KNN)算法使用"特征相似度"来预测新数据点的值,这进一步意味着,将根据新数据点与训练集中的点的匹配程度为该新数据点分配一个值。无涯教程可以通过以下步骤了解其工作方式-
第1步 - 要实现任何算法,都需要数据集,因此,在KNN的第一步中,必须加载训练以及测试数据。
第2步 - 接下来,需要选择K的值,即最近的数据点, K可以是任何整数。
第3步 - 对于测试数据中的每个点,请执行以下操作-
3.1 - 借助以下任意一种方法来计算测试数据与每行训练数据之间的距离:欧几里得距离,曼哈顿距离,距离计算最常用的方法是欧几里得。
3.2 - 现在,基于距离值,将它们按升序排序。
3.3 - 接下来,它将从排序后的数组中选择前K行。
3.4 - 现在,它将基于这些行中最常见的类别为测试点分配一个类别。
第4步 - 结束
以下是了解K的概念和KNN算法的工作的示例-
假设有一个可以绘制如下的数据集-
现在,无涯教程需要将带有黑点的新数据点(在点60,60处)分类为蓝色或红色类。假设K=3,即它将找到三个最近的数据点。下图显示-
可以在上图中看到带有黑点的数据点的三个最近邻居。在这三个中,有两个属于红色等级,因此黑点也将被分配为红色等级。
代码实现
众所周知,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-length | sepal-width | petal-length | petal-width | Class | |
---|---|---|---|---|---|
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算法 - 寻找最近邻居 - 无涯教程网无涯教程网提供K最近邻(KNN)算法是一种监督的ML算法,可用于分类以及回归预测问题,但是,它主要用于...https://www.learnfk.com/python-machine-learning/machine-learning-with-python-knn-algorithm-finding-nearest-neighbors.html