您的位置:首页 > 其它

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、弱点:
     计算量大、对异常值、不平衡数据敏感。

############################ 代码开始 ############################





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据挖掘 r语言 KNN