KNN算法(R语言)

作者: 三猫后端 | 来源:发表于2017-11-07 09:00 被阅读89次

原文链接:聚类(三):KNN算法(R语言)

微信公众号:机器学习养成记    搜索添加微信公众号:chenchenwings

k最临近(KNN)算法是最简单的分类算法之一,属于有监督的机器学习算法。

算法流程

KNN的核心思想是:找出特征空间中距离待分类点最近的k个点,如果这k个点大多数属于某一个类别,则该样本也属于这个类别。


k值一般取20以下的整数。下图为从网上截取的图片,可以直观看到与点x最临近的5个点里,有4个为红色圆点,因此将点x的类别判断为红色圆点一类。


R语言实现

在R中实现knn聚类,可以使用class包中点knn()函数。在下面的例子中,我们使用UCI的[乳腺癌特征数据集]进行演示。首先,读入网上的数据:

#读取网上的数据并设置变量名

url <- 'http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data'

wdbc.data <- read.csv(url,header = F)

names(wdbc.data) <- c('ID','Diagnosis','radius_mean','texture_mean','perimeter_mean',                'area_mean','smoothness_mean','compactness_mean','concavity_mean',

'concave points_mean','symmetry_mean','fractal dimension_mean','radius_sd','texture_sd','perimeter_sd','area_sd','smoothness_sd','compactness_sd','concavity_sd','concave points_sd','symmetry_sd','fractal dimension_sd','radius_max_mean','texture_max_mean','perimeter_max_mean','area_max_mean','smoothness_max_mean','compactness_max_mean','concavity_max_mean','concavepoints_max_mean','symmetry_max_mean','fractal dimension_max_mean')

因为有的变量取值大,有的变量取值小,所以我们在使用knn进行分类前,要先对数据通过归一化来进行无量纲处理。

#编写归一化函数

normalize <- function(x)

{

return ((x-min(x))/(max(x)-min(x)))

}

#对数据进行归一化

wdbc.data.min_max <- as.data.frame(lapply(wdbc.data[3:length(wdbc.data)],normalize))

wdbc.data.min_max$Diagnosis <- wdbc.data$Diagnosis

区分训练集和测试集,并纪录相应的分类标签。

m<-(dim(wdbc.data.min_max))[1]

val<-sample(1:m,size=round(m/3),replace=FALSE,prob=rep(1/m,m))

data.train<-wdbc.data.min_max[-val,]

data.test<-wdbc.data.min_max[val,]

data.train.label<-data.train$Diagnosis

data.test.label<-data.test$Diagnosis

data.train<-wdbc.data.min_max[-val,- length(wdbc.data.min_max)]

data.test<-wdbc.data.min_max[val,- length(wdbc.data.min_max)]

用knn算法进行分类,并用实际的分类标签与预测出的分类结果进行效果检测。

library(class)

test.pre.labels <- knn(data.train,data.test,data.train.label,k=7)

library(gmodels)

CrossTable(x = data.test.label, y = test.pre.labels, prop.chisq = F)

检测结果为:


选取两个变量作为横纵坐标进行画图,观察实际类别与预测的分类结果。

plot(data.test$texture_mean,data.test$radius_mean,col=test.pre.labels,pch=as.integer(data.test.label))

颜色代表分类后得到的结果,形状代表真实的类别。从检测结果和图上都可以看出,分类结果基本与真实结果一致。


KNN优缺点

优点

(1)算法原理简单,无需估计参数和训练。

(2)适合稀有事件的分类问题。

缺点

(1)计算量太大,需要计算与每个点的距离。

(2)可解释性不强。

(3)样本不平衡时,k个最近的点中,大容量类别的点占据了大多数,但大容量类别不一定为待分类点的真实类别。

本公众号其他聚类篇文章:

聚类(一):DBSCAN算法实现(r语言)

聚类(二):k-means算法(R&python)


微信公众号:机器学习养成记    搜索添加微信公众号:chenchenwings


扫描二维码,关注我们。

如需转载,请在开篇显著位置注明作者和出处,并在文末放置机器学习养成记二维码和添加原文链接。

快来关注我们吧!



相关文章

  • KNN算法(R语言)

    原文链接:聚类(三):KNN算法(R语言) 微信公众号:机器学习养成记 搜索添加微信公众号:chenchenwi...

  • R语言-KNN算法

    kNN算法原理 1、K最近邻(k-NearestNeighbor,KNN)分类算法,是一个理论上比较成熟的方法,也...

  • R语言--邻近算法KNN

    KNN(k邻近算法)是机器学习算法中常见的用于分类或回归的算法。它简单,训练数据快,对数据分布没有要求,使它成为机...

  • 机器学习算法实现(五):KNN

    K近邻(KNN)算法R语言实践 第一步:数据集分为训练集和测试集 index <-sample(1:nrow(ir...

  • KNN与K-Means算法的区别

    内容参考:Kmeans算法与KNN算法的区别kNN与kMeans聚类算法的区别 KNN-近邻算法-分类算法 思想:...

  • knn算法

    knn算法 knn算法简介 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法。所谓K...

  • KNN近邻算法总结

    目录 一、KNN近邻算法思想 二、KNN模型三大要素 三、KNN算法实现步骤 四、KNN算法的KD树实现 五、总结...

  • 机器学习笔记汇总

    kNN算法:K最近邻(kNN,k-NearestNeighbor)分类算法

  • 机器学习与R语言学习笔记01:kNN

    通过将《机器学习与R语言》一书中的代码tidyverse化,来学习这本书。 书中第一个例子是利用kNN算法来诊断乳...

  • 01 KNN算法 - 概述

    KNN算法全称是K近邻算法 (K-nearst neighbors,KNN) KNN是一种基本的机器学习算法,所谓...

网友评论

    本文标题:KNN算法(R语言)

    本文链接:https://www.haomeiwen.com/subject/jsjdmxtx.html