白话KNN算法及KNN实现鸢尾花分类
KNN原理:
KNN又叫K近邻,是机器学习中的常见和很容易理解的分类算法,算法的原理思路是:通过计算待测样本到每个训练集的样本的距离,取K个的最近距离的训练集,判断该待测样本的类别为这个K训练集所对应的类别最多的。
算法核心思想
如果一个样本在特征空间中K个最相邻的样本中的大多数属于某一类别,则该样本也属于这个类别,并具有这个类别上样本的特性。
鸢尾花数据集介绍
通过sklearn.datasets.load_iris()
加载并返回鸢尾花数据集,数据集主要有150行数据,包括三个相关鸢尾花种类的50个样品,三个种类分别是:山鸢尾,虹膜锦葵,变色鸢尾。
代码展示
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
def knncls():
# 加载数据
iris = load_iris()
# 分割数据集
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.25)
# 特征工程 标准化
std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)
# knn算法流程
knn = KNeighborsClassifier()
knn.fit(x_train, y_train)
y_predict = knn.predict(x_test)
# # 预测结果展示
labels = ["山鸢尾", "虹膜锦葵", "变色鸢尾"]
for i in range(len(y_predict)):
print("%d: 真实值:%s \t预测值:%s" % ((i+1), labels[y_predict[i]], labels[y_test[i]]))
print("准确率:", knn.score(x_test, y_test))
if __name__ == '__main__':
knncls()
结果
1: 真实值:变色鸢尾 预测值:变色鸢尾
2: 真实值:变色鸢尾 预测值:变色鸢尾
3: 真实值:山鸢尾 预测值:山鸢尾
4: 真实值:山鸢尾 预测值:山鸢尾
5: 真实值:变色鸢尾 预测值:变色鸢尾
6: 真实值:变色鸢尾 预测值:变色鸢尾
7: 真实值:虹膜锦葵 预测值:虹膜锦葵
8: 真实值:变色鸢尾 预测值:变色鸢尾
9: 真实值:山鸢尾 预测值:山鸢尾
10: 真实值:虹膜锦葵 预测值:虹膜锦葵
11: 真实值:变色鸢尾 预测值:变色鸢尾
12: 真实值:虹膜锦葵 预测值:虹膜锦葵
13: 真实值:变色鸢尾 预测值:变色鸢尾
14: 真实值:变色鸢尾 预测值:变色鸢尾
15: 真实值:山鸢尾 预测值:山鸢尾
16: 真实值:虹膜锦葵 预测值:虹膜锦葵
17: 真实值:变色鸢尾 预测值:变色鸢尾
18: 真实值:山鸢尾 预测值:山鸢尾
19: 真实值:虹膜锦葵 预测值:虹膜锦葵
20: 真实值:虹膜锦葵 预测值:虹膜锦葵
21: 真实值:山鸢尾 预测值:山鸢尾
22: 真实值:虹膜锦葵 预测值:虹膜锦葵
23: 真实值:虹膜锦葵 预测值:虹膜锦葵
24: 真实值:山鸢尾 预测值:山鸢尾
25: 真实值:虹膜锦葵 预测值:虹膜锦葵
26: 真实值:变色鸢尾 预测值:变色鸢尾
27: 真实值:山鸢尾 预测值:山鸢尾
28: 真实值:山鸢尾 预测值:山鸢尾
29: 真实值:虹膜锦葵 预测值:虹膜锦葵
30: 真实值:虹膜锦葵 预测值:虹膜锦葵
31: 真实值:变色鸢尾 预测值:变色鸢尾
32: 真实值:山鸢尾 预测值:山鸢尾
33: 真实值:山鸢尾 预测值:山鸢尾
34: 真实值:变色鸢尾 预测值:变色鸢尾
35: 真实值:虹膜锦葵 预测值:虹膜锦葵
36: 真实值:变色鸢尾 预测值:变色鸢尾
37: 真实值:山鸢尾 预测值:山鸢尾
38: 真实值:山鸢尾 预测值:山鸢尾
准确率: 1.0