一:作业题目:鸢尾花的KNN算法重构
KNN算法又称为K近邻算法,K的含义是指考虑训练集中与新数据点最近的任意K个邻居(比如说,距离新数据点最近的3个或5个邻居),而不是只考虑距离新数据点最近的那一个。然后,我们可以利用这些邻居中数量最多的类分别作出预测。
二:算法设计:
(1):KNN算法的原理:
如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。通俗地说便是:近朱者赤,近墨者黑。(2):具体过程:
①:计算任意两点间距离:即计算出给定测试对象与测试集中每个对象的距离,也就是计算多维数组间的距离。
②:在众多邻居中找出最近邻:计算出测试对象与测试集中每个对象的距离后,对距离进行排序并从中找出距离最近的k个对象。
③:对k个近邻进行分类:
(1):使用恰当的数据集:此次我们使用scikit-learn的datasets模块中的鸢尾花(Iris)数据集,我们可以调用load_iris函数来进行数据的加载。
(2)衡量模型是否成功:训练集与测试集的划分:为测定模型是否有效,我们将收集好的带标签数据分为两部分,一部分数据作为训练数据用于构建机器学习模型;另一部分数据作测试数据用于评估模型性能;在对数据进行拆分之前,先利用伪随机数生成器将数据集打乱。给伪随机数设立随机种子random.seed(0),使得每次切割的数据集一致。其中训练集占75%,测试集占25%;
定义函数:splitDateSets(),默认训练集的比例为0.75
返回值为X_train,Y_train,y_test和y_test。
(3)K取值的确定以及K算法的实现:
主要包括KNN训练以及KNN模型精度的计算,既包括利用训练数据构建模型的算法,亦包括对新数据点进行预测的算法,并且还包括从训练集中所提取的信息。
构建模型只需对训练数据加以保存,若想做到预测新数据点,需要在训练数据集中找到最近的数据点作为最近邻。
(4)最终分类决策时确定样本类别的方法如何选择;④:两点间距离的计算:又称欧几里得距离,二维空间中任意两点间距离计算公式为:d=√((X-X1)2+〖(Y-Y1)〗2 )
三:有注释的源代码:
(1):加载数据集,生成随机数列:
(2):分割数据集为:75%训练集和25%测试集
(3):预测功能的实现:
(4):KNN评估模型的建立:
(5):主函数;输出预测结果:
四:测试用例设计以及调试过程截屏:
(1)测试用例设计:
(2):调试过程:
:评估模型的调试
生成随机数列功能的调试
:预测功能实现的调试
五:总结:
通过此次作业我得以将KNN算法进行再次的
复习和熟悉,由于不能对库中的函数进行调用,就要求我们必须对KNN算法的每一步骤及其功能都要非常的熟悉。此次作业难就难在:首先对于第一次接触Python的人来说,利用编程语言来叙述一个算法的流程是有难度的,如果基础不够扎实只能边写边查,但是这样的做法显然十分浪费时间,因此极易使人产生挫败感。
对于split()函数,课本及其他书籍中均调用sciket-learn中的函数时使用过一个种子数,使得它能够每次生成相同的序列。而使用permutation()每次的执行结果都是不同的。这里应当改进下,可以使用Python中的集合或者列表及推导式,集合的内部实现保证了元素不重复。