kNN方法R实现
2014-04-17 08:41
162 查看
kNN方法R实现
转载于http://blog.csdn.net/wolfbloodbj/article/details/8842399
参考资料:1、基于肖凯大牛的博客
2、R IN A NUTSHELL
3、DATA MINING WITH R
############################ 翻译开始 ############################
《R IN A NUTSHELL》
与回归类似,线性方法对于分类计算时存在一些问题。下面介绍几个ML的分类算法
K近邻
其中一个最简单的处理分类问题的技巧是k近邻算法。工作原理如下:
1、首先指定“训练”数据集
2、对于一个新的即将被预测分类的观测值,算法试图找到距离这个新的观测值最近的K个观测值,并预测这个新的观测值的类别。
3、新观测值的类别由与其最近的k个观测值类别占比最多的类别决定,作为该新值的类别。
4、不像其它模型,k近邻并没有创建一个模型对象。而是,你需要提供训练数据以及测试数据作为参数。
《DATA MINING WITH R》重点翻译
k近邻算法属于所谓的惰性学习算法。这种算法的不是为了通过训练集训练一个模型。他们简单的存储这些数据,并且最主要的工作是在预测方面。
给定一个新的测试样本,算法将会通过查找训练数据集中相似的哪些样本来进行预测。使用训练集中K个最近的样本对给定测试样本进行预测。(分类/回归)
对于分类:
预测通常是通过投票(少数服从多数)来预测,并且期望的k值是一个奇数。然而,更精确的投票算法是计算每一个测试样本与k个样本之间的距离。
对于回归:
将会求这些k个最近的样本的目标变量的均值。
这类模型依赖与样本之间的相似性。也就是样本间的“不同”或距离。但是大部分会选择欧式距离。
注意事项:
1、knn算法对选择的属性单位和异常值非常敏感,这样会扭曲相似性的概念。
2、变量应该被归一化(标准化)处理,否则我们会低估变量的差异,并且这个值会低于均值(多变量数据必须标准化)
3、k值的选择。比如seq(1:11, by = 2)。然后,大的k值需要避免是因为使用远离测试样本的k个训练样本是有风险的。
显然,选择k依赖于训练样本数据的密度。太过稀疏(sparse)的数据会招致(incur)更大的风险。
4、理想的模型估计可以通过实验设计方法来处理。
############################ 翻译结束 ############################
############################ 总结 ############################
如果我们已经拥有一些已知类别的数据,要对一些未知类别的数据进行分类。基本思路就是将数据看作是在多元空间中的点,
先计算未知点和周围k个已知点之间的距离。然后根据周围k个已知点的类别进行投票来决定未知点的类别。
例如设k为3,对某个未知点找出其周围最近的三个已知点,如果这三个点有两个属于A类,一个属于B类,那么根据多数原则,将未知点的类别预测为A类。
1、可处理分类、回归问题
2、优点:
算法简单,可处理非线性判别边界,参数简单(距离和k)
3、弱点:
计算量大、对异常值、不平衡数据敏感。
############################ 代码开始 ############################
![](http://img.my.csdn.net/uploads/201304/23/1366731247_5801.png)
![](http://img.my.csdn.net/uploads/201304/23/1366731273_7127.png)
![](http://img.my.csdn.net/uploads/201304/23/1366731531_2913.png)
相关文章推荐
- [置顶] 基于DL的计算机视觉(2)--实现图像分类最简单的方法:KNN
- CS231n作业笔记1.1: KNN中的距离矩阵vectorize的实现方法(无循环)
- 机器学习之KNN算法原理及Python实现方法详解
- 统计学习方法学习(四)--KNN及kd树的java实现
- kNN方法R实现
- kNN算法python实现和简单数字识别的方法
- kNN算法实现,及python库和函数的使用方法回顾
- 机器学习KNN方法介绍及实现并实践(约会满意度统计)
- Python用 KNN 进行验证码识别的实现方法
- node-schedule 实现定时任务使用方法记录
- Python实现屏幕输出进度条的方法
- 五种单件模式之Singleton的实现方法详解
- Visual C++中Tab View的多种实现方法
- 一种实现Win32消息处理处理函数的新方法 - 基于Thunk实现的类成员消息处理函数
- Android学习之实现Canvas基本画图方法
- Win7文件夹无法附到“windows资源管理器”实现快速打开的解决方法
- Python实现基于权重的随机数2种方法
- C++抽奖程序实现方法
- 另类方法实现rvm及相关软件安装到指定目录
- ASP.NET实现MVC中获取当前URL、controller及action的方法