KNN(k-NearestNeighbor)是监督学习的分类技术中最简单的方法之一,K指k个最近的邻居的意思,
简单的说:就是物以类聚,当有一条预测数据要看他属于哪个类别时,在训练数据集中,找出K个最近的点,看这k个最近的邻居都是什么类别,最终确定这条预测数据归属什么类别
优点:思想简单,算法简单,易于理解,没有像别的算法那些需要运用矩阵、概率,核心就是算距离
缺点:计算量大,可以理解为平时不努力,临阵磨枪,
别的机器学习算法,如神经网络,是对训练数据进行计算后,得到一个模型,当要预测数据时只要将预测数据套入模型计算一下就可以得到结果,虽然在这个计算模型过程的计算量还是非常大(平时努力学习),但预测时还是非常快的,
可参考 机器学习(1)--神经网络初探
而KNN基本没有训练这一说,只有在预测某条数据时,计算与所有训练数据的点的距离,所以说平时不努力,临阵磨枪,
本例使用数据集简介:以鸢尾花的特征作为数据,共有数据集包含150个数据集,
分为3类setosa(山鸢尾), versicolor(变色鸢尾), virginica(维吉尼亚鸢尾)
每类50个数据,每条数据包含4个属性数据 和 一个类别数据.
本例程序流程简述:随机抽取一定比例(预设70%)做为训练集,剩下的做为测试集,最终统计出测试的正确率
#-*- coding:utf-8 -*-
data='''5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
5.0,3.4,1.5,0.2,Iris-setosa
4.4,2.9,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
5.4,3.7,1.5,0.2,Iris-setosa
4.8,3.4,1.6,0.2,Iris-setosa
4.8,3.0,1.4,0.