1、 网络教育学院数据挖掘课 程 大 作 业 题 目: Knn算法原理以及python实现 姓 名: 学习中心: 第一大题:讲述自己在完成大作业过程中遇到的困难,解决问题的思路,以及相关感想,或者对这个项目的认识,或者对Python与数据挖掘的认识等等,300-500字。 答:数据分析和数据挖掘并不是相互独立的,数据分析通常是直接从数据库取出已有信息,进行一些统计、可视化、文字结论等,最后可能生成一份研究报告性质的东西,以此来辅助决策。但是如果要分析已有信息背后的隐藏信息,而这些信息通过观察往往是看不到的,这是就需要用到数据挖掘,作为分析之前要走的一个门槛。数据挖掘不是简单的认为推测就可以,它往往
2、需要针对大量数据,进行大规模运算,才能得到一些统计学规律。 科技的快速发展和数据的存储技术的快速进步,使得各种行业或组织的数据得以海量积累。但是,从海量的数据当中,提取有用的信息成为了一个难题。在海量数据面前,传统的数据分析工具和方法很无力。由此,数据挖掘技术就登上了历史的舞台。数据挖掘是一种技术,将传统的数据分析方法与处理大量数据的复杂算法相结合,从大量的、不完全的、有噪声的、模糊的、随机的数据中,提取隐含在其中的、人们事先不知道的、但又是潜在有用信息和知识的过程。 第二大题:完成下面一项大作业题目。题目一:Knn算法原理以及python实现答:一、knn算法介绍邻近算法,或者说K最近邻(k
3、NN, k-NearestNeighbor)分类算法是数据挖掘 分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说 的是每个样本都可以用它最接近的 k个邻居来代表。kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别, 则该样 本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只 依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。kNN方法在类别决策时,只与极少量的相邻样本有关。由于kNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,kNN
4、方法较其他方法更为适合。二、核心概括主要的思想是计算待分类样本与训练样本之间的差异性,并将差异按照由小 到大排序,选出前面K个差异最小的类别,并统计在K个中类别出现次数最多的 类别为最相似的类,最终将待分类样本分到最相似的训练样本的类中。与投票 (Vote)的机制类似。三、 knn算法流程1.准备数据,对数据进行预处理2.选用合适的数据结构存储训练数据和测试元组3.设定参数,如k4.维护一个大小为k的的按距离由大到小的优先级队列,用于存储最近邻训 练元组。随机从训练元组中选取k个元组作为初始的最近邻元组,分别计算测试 元组到这k个元组的距离,将训练元组标号和距离存入优先级队列遍历训练元组集,计
5、算当前训练元组与测试元组的距离,将所得距离L与优先级队列中的最大距离Lmax进行比较。若L=Lmax则舍弃该元组,遍历下一个元组。若L Lmax删除优先级队列中最大距离的元组,将当前训练元组存入优先级队列。遍历完毕,计算优先级队列中k个元组的多数类,并将其作为测试元组 的类别。测试元组集测试完毕后计算误差率,继续设定不同的k值重新进行训练,最后取误差率最小的k值。四、代码实现使用python程序模拟KNN算法Created on Sat Jun 22 18:38:22 2019author: zhe nIIHHimport nu mpy as npimport collect ions as
6、csdata=np.array( 203,1,126,1,89,1,70,1,196,2,211,2,221,2,311 ,3,271,3)feature = data:,0 # 特征print(feature)label = data:,-1 #结果分类print(label)predictPoint = 200 # 预测数据print( 预测输入特征为: + str(predictPoint)distance = list(map(lambda x : abs(predictPoint - x), feature) # 各 点到预测点的距离print(distance)sortIndex
7、= np.argsort(distance) #排序,返回排序后各数据的原始下标print(sortIndex)sortLabel = labelsortIndex # 根据下标重新进行排序print(sortLabel)# k = 3 # 设置 k 值大小为 3for k in range(1,label.size+1):result = cs.Counter(sortLabel0:k).most_common(1)00 #根据 k值计算前 k 个数据中出现次数最多的分类,即为预测的分类print( 当 k= + str(k) + 时预测分类为: + str(result)五、结果203 1
8、26 89 70 196 211 221 311 2711 1 1 1 2 2 2 3 3预测输入特征为: 2003, 74, 111, 130, 4, 11, 21, 111, 710 4 5 6 8 1 2 7 31 2 2 2 3 1 1 3 1当 k=1 时预测分类为: 1当 k=2 时预测分类为: 1当 k=3 时预测分类为: 2当 k=4 时预测分类为: 2当 k=5 时预测分类为: 2当 k=6 时预测分类为: 2当 k=7 时预测分类为: 1当 k=8 时预测分类为: 1当 k=9 时预测分类为: 1 总结1. 根据训练数据和结果可知,当k较小时【比如本次当k=1】,若训练数据存在异常数据时容易出现预测错误的情况,因此一般 K 值都不能太小!2. 当 k 值较大时,某个分类的训练数据越多,预测成此分类的可能性越大, 因此,训练数据要先根据分类进行再平衡!3. 一般 k 值的选择与分类数量有关,分类数量越大,k 一般也越大,一般为取值为: type2type 之间!4. 一般 k 值的选择和训练数据的大小有关, 可以取值为训练数据的平方根左 右为宜!