R语言---knn算法
(2017-03-17 10:03:48)
标签:
it |
分类: R语言数据分析 |
KNN算法即为k近邻算法,主要用于分类也可以用于回归,是机器学习中最简答的算法之一,其主要思路是:如果一个样本在空间中的k个最相似的样本大多数属于某一个类别,则该样本也属于这个类别。这个思想想恰好符合物以类聚,人以群分的思想。knn算法主要对于样本在特征空间中有交叉或重叠的待分样本,knn算法比其他分类算法更为合适。对于分类将待分类样本的类别确定为k个近邻的绝大多数类别;对于回归问题,预测样本的响应变量值为k个近邻响应变量的平均值。
R语言实现knn算法的函数包很多,主要有:
1、class函数包中的knn、knn.cv函数;
2、caret函数包中的knn3函数;
3、kknn函数包中的kknn函数;
下面分别应用三个函数包中的函数运行knn算法。
(1)
class函数包中的knn函数,调用方式为:
knnClassify <- knn(train, test, class,
k)
上式中的参数分别为:train为训练样本的预测变量及,test为测试样本集,class为分类标签,k为近邻数,这个参数k需要训练得到,可以通过交叉验证的方式也可以使用caret函数包中的train函数进行调优。
(2)
caret函数包中的knn3,这个调用方式比较多,有像knn函数的调用方式,也有像lm那样的的方式,这里查看相应的帮助就一目了然了;
(3)
kknn函数包中的kknn函数,调用格式如下所示:
kknn(formula = formula(train), train, test, na.action = na.omit(), k = 7, distance = 2, kernel = "optimal", ykernel = NULL, scale=TRUE, contrasts = c('unordered' = "contr.dummy", ordered = "contr.ordinal"))
参数比较多,这里介绍几个主要的,formula是与R语言线性回归格式一样的,这个可以参看lm函数的,train及为训练集(既包含观测又包含标签),test为测试集,na.action是对缺失值的处理,k为近邻数目等。
既然R语言里面有这么多的关于knn的实现的函数,那么这些函数到底有什么区别呢?这里我主要是查看R语言的帮助文档知道一点点的不同,其主要的不同应该就是关于k近邻距离的衡量方式不同,有的是欧式距离,比如class函数包中的knn函数,也有闵可夫斯基距离(Minkowski distance) ,如kknn函数包中的kknn函数,这是我对R语言里面的k近邻实现方法的一点总结和见解,有什么不对和欠妥的地方还请多多指正http://www/uc/myshow/blog/misc/gif/E___6724EN00SIGG.gif。
点滴积累,慢慢成长。