数据挖掘学习------------------4-分类方法-2-K-紧邻(KNN)
来源:互联网 发布:济南百度快照优化公司 编辑:程序博客网 时间:2024/06/02 06:57
4.2K-近邻(KNN)
1、思想
①通过计算每个训练样例到待分类样品的距离。
②取待分类样品距离最近的K个训练样例。
③K个样品种中那个类别的训练样例占多数,则待分类元组就属于那个类别。
小例子:
如图:x:为测试点,-:为负类,+:为正类
①看(a)1-近邻圆圈中心的数据,只有一个负类和测试点在一起,说明测试点是个负类。
②看(c)3-近邻圆圈中心的数据,有一个负类,两个正类和测试点在一起,根据多数表决方案,该测试点为正类
③看(b)2-近邻圆圈中心的数据,有一个负类,一个正类和测试点在一起,在类别相同的情况下,可随机选择一个作为类标号来分类该点。
2、步骤
①初始化距离为最大值
②计算未知样本和每个训练样本的距离dist
③得到目前K个近邻样本中的最大距离maxdist
④如果dist小于maxdist,则将该训练样本作为K-近邻样本。
⑤重复步骤②③④,直到未知样本和所有训练样本的距离都算完
⑥统计K个近邻样本中每个类别出现的次数
⑦选择出现频率最大的类别作为未知样本的类别
(1)思考:
①如果K太小,预测目标容易产生变动性。
②如果K太大,近邻分类器可能会误分类测试样例,因为近邻表中可能包含远离近邻的数据点。
(2)解决:
①推定K值得有益途径是通过有效参考的数目这个概念,有效参数的数目是和K值相关,大致等于n / K;
②n是训练数据集中实例的数目。
③在实践中往往通过若干次试验来确定K值,取分类误差最小的K值。
3、实例
介绍:
一家银行的工作人员通过电话调查客户是否愿意购买一种理财产品,并记录调查结果y。另外,银行的这些客服的一些资料X,包括16个属性。
希望建立一个分类器,来预测一个新客户是否愿意购买该产品。
(1)环境准备
(2)导入数据集和预处理
(3)设置交叉验证方式
(4)训练KNN分类器
4、优缺点
(1)优点:
①KNN方法在类别决策时,只与极少量的相邻样本有关,因此,采用这种方法可以较好地避免样本的不平衡问题。
②KNN方法主要靠周围有限的近邻样本,而不是靠判别类域的方法来确定所属类别,因此对于类域的交叉或重叠较多的待分样本集来说,KNN更为适合。
(2)缺点:
①计算量较大,因为对每个待分类的样本都要计算它到全体已知样本的距离,才能求得它的K个最邻近点。
(3)改进
①对于计算量大的问题目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本。这样可以挑选出对分类计算有效的样本,使样本总数合理的减少,以同时达到减少计算量,减少 存储的双重效果。该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。
②对样本进行组织与管理,分群分层,尽可能将计算压缩到在接近测试样本领域的小范围内,避免盲目地与训练样本集中的每一个样本经行距离计算。
- 数据挖掘学习------------------4-分类方法-2-K-紧邻(KNN)
- 数据挖掘---分类算法之K近邻(KNN)算法
- 数据挖掘十大算法翻译——8kNN(k邻近分类)
- 数据挖掘之KNN分类
- 【数据挖掘】分类之kNN
- 数据挖掘之KNN分类
- 数据挖掘之KNN分类
- 使用Orange进行数据挖掘之分类(2)------KNN分类
- 数据挖掘学习------------------4-分类方法-4-神经网络(ANN)
- 机器学习/数据挖掘——kNN分类器
- 数据挖掘算法(一)--K近邻算法 (KNN)
- 数据挖掘学习------------------4-分类方法-3-贝叶斯分类(Bayes)
- 【数据挖掘算法】KNN学习
- 数据挖掘学习------------------4-分类方法-1-基本概念
- 数据挖掘学习------------------4-分类方法-6-判别分析
- 机器学习(二)k-近邻分类算法(kNN)
- 机器学习(KNN-K最邻近分类)
- 机器学习与数据挖掘-K最近邻(KNN)算法的实现(java和python版)
- AbstractQueuedSynchronizer的实现分析(上)
- SQL 简介
- python中utils
- 移动端调试神器(eruda)
- 【linux】nohup运行jar包出现nohup: redirecting stderr to stdout解决办法
- 数据挖掘学习------------------4-分类方法-2-K-紧邻(KNN)
- sts下使用配置git
- 进程基础总结
- ENVI简要操作
- redis 集群在windows上的配置
- 深度学习入门教程
- 反转链表
- 郝斌数据结构(1)----数据结构基本分类和链表创建
- 使用prismjs实现Jekyll代码语法高亮并显示行号