k近邻法:R实现(一)
来源:互联网 发布:swift 源码下载 编辑:程序博客网 时间:2024/04/29 03:37
转载于:机器学习算法的R语言实现(一):KNN
KNN是有监督的学习算法,其特点有:
1、精度高,对异常值不敏感
2、只能处理数值型属性
3、计算复杂度高(如已知分类的样本数为n,那么对每个未知分类点要计算n个距离)
KNN算法步骤:
需对所有样本点(已知分类+未知分类)进行归一化处理。
然后,对未知分类的数据集中的每个样本点依次执行以下操作:
1、计算已知类别数据集中的点与当前点(未知分类)的距离。
2、按照距离递增排序
3、选取与当前距离最小的k个点
4、确定前k个点所在类别的出现频率
5、返回前k个点出现频率最高的类别作为当前点的预测类别
<span style="font-family:Times New Roman;font-size:14px;"># 选择iris数据集为例,iris共有150条数据#先大致看一下数据head(iris)#对iris进行归一化处理,scale归一化的公式为(x-mean(x))/sqrt(var(x))iris_s <- data.frame(scale(iris[, 1:4]))iris_s <- cbind(iris_s, iris[, 5])names(iris_s)[5] = "Species"#随机选出100条记录作为已知分类的样本集sample_list <- sample(1:150, size = 100)iris_know <- iris_s[sample_list, ]#剩余的50条记录作为未知分类的样本iris_unknow <- iris_s[-sample_list, ]#对测试集中的每一个样本,计算其与已知样本的距离,因为已经归一化,此处直接使用欧氏距离length_know <- nrow(iris_know)length_unknow <- nrow(iris_unknow)for (i in 1:length_unknow){ dis_know <- data.frame(dis = rep(0, length_know)) for (j in 1:length_know){ #计算已知点和未知点的距离 dis_know[j, 1] <- dist(rbind(iris_unknow[i, 1:4], iris_know[j, 1:4]), method = "euclidean") names(dis_know)[1] = "dis" # 保存已知样本分类 dis_know[j, 2] <- iris_know[j, 5] names(dis_know)[2] = "Species" } #按距离从小到大排序 dis_know <- dis_know[order(dis_know$dis), ] #定义K的大小 k <-5 #按因子(也就是分类)进行排序 type_freq <- as.data.frame(table(dis_know[1:k, ]$Species)) #按计数值进行排序 type_freq <- type_freq[order(-type_freq$Freq), ] # 记录频数最大的类型 iris_unknow[i, 6] <- type_freq[1,1] names(iris_unknow)[6] = "Species.pre"}#输出分类结果iris_unknow[, 5:6]</span>
0 0
- k近邻法:R实现(一)
- k近邻法:R实现(二)
- K近邻法算法(KNN)及其R实现
- K近邻算法(knn)及R实现
- R语言:k近邻
- K近邻法(一)
- K近邻(KNN)算法---Python实现(一)
- (一)python3实现K-近邻
- k-近邻算法(R语言实现)+10折K近邻算法
- 分类算法——K近邻算法及其R实现
- k近邻法的实现:kd树
- k近邻法的实现:kd树
- K-近邻法(KNN)的实现
- k近邻法的C++实现
- KNN k近邻法tensorflow实现
- 统计学习方法--K近邻法 python实现
- K-最近邻法(KNN) C++实现
- k值近邻法python3实现
- C语言编程(练习4:数组与指针)
- 背包问题的几种解法总结
- 有关核心系统单元测试的简要分析
- crosswalk 快速入门,利用WebRTC(html)开始开发视频通话
- 分布式系统学习:Hadoop集群部署(1)
- k近邻法:R实现(一)
- Linux 系统内核的调试_01
- 使用ffmpeg转码pcm至aac格式
- Windows下编译Qt的MySQL数据库驱动
- 苹果IOS开发者账号总结
- JAVA负载均衡
- ISE中如何将自己的verilog源代码.v或VHDL源代码.vhd封装打包成IP核?
- OnGlobalLayoutListener获得一个视图的高度
- Python中的文件和目录操作实现代码