【陆勤践行】用R做K近邻(KNN)
摘要:K近邻是一种常用的分类方法,在R中对iris数据集进行K近邻分类并评估分类模型。
关键词:R iris数据集 KNN
K近邻算法,一种常用的简单的分类算法,一种基于实例学习的算法,对新的测试样例基于距离相似度的法则确定其K个最近的邻居,根据K个最近邻居中“少数服从多数”的原则确定新测试样例的类标签。
如何用R做K近邻,Come on!
第一步:获得数据(Get your data)
做机器学习,需要数据。
在此,我们采用iris数据集,它是R中默认自带的数据,也是用在机器学习做分类的常用数据集。
iris
第二步:理解数据(Know the data)
常用方法,对数据进行探索性分析(EDA)
方式一,图形表示
利用ggvis包,绘制散点图。(绘制散点图的方法,很多哦,大家可以尝试别的方法)
library(ggvis)
iris %>%ggvis(~Sepal.Length, ~Sepal.Width, fill=~Species) %>% layer_points()
iris %>%ggvis(~Petal.Length, ~Petal.Width, fill=~Species) %>% layer_points()
方式二:数据结构分析法
head(iris)
str(iris)
table(iris$Species)
round(prop.table(table(iris$Species))*100,digits=1 )
summary(iris)
summary(iris[c("Petal.Width","Sepal.Width")])
第三步,确定问题的类型,属于分类问题
第四步:使用机器学习算法KNN
install.packages("class")
library(class)
any(grepl("class",installed.packages()))#检验class包是否安装
第五步:准备数据
#数据归一化处理
#归一化函数,最大–最小化归一化
normalize <- function(x){
num <- x – min(x)
denom <- max(x) – min(x)
return(num/denom)
}
iris_norm <-as.data.frame(lapply(iris[,1:4], normalize))
summary(iris_norm)
第六步:训练数据集和测试数据集
set.seed(1234)
ind <- sample(2,nrow(iris), replace=TRUE, prob=c(0.67, 0.33))
iris_train <-iris[ind==1, 1:4]
iris_test <-iris[ind==2, 1:4]
train_label <-iris[ind==1, 5]
test_label <-iris[ind==2, 5]
第七步:构建KNN模型
iris_pred <-knn(train=iris_train, test=iris_test, cl=train_label, k=3)
第八步:模型评价
#可以采用交叉联表
table(test_label,iris_pred)
#或者
#gmodels包中的CrossTable()函数
install.packages("gmodels")
library(gmodels)
CrossTable(x=test_label,y=iris_pred, prop.chisq=FALSE)
如何解决分类问题呢?小编的心得,可以按着数据挖掘的标准流程来开展,推荐IBM的CRISP-DM,即从商业理解、数据理解、数据准备、模型构建、模型评估和模型部署,逐步思考。商业理解环节确定挖掘的目标,数据理解阶段完成对数据的探索性分析和变量的选择,数据准备阶段进行数据的预处理,即数据清洗、集成、变换和规约,以生成能够用来建模的数据集,模型构建阶段确定合适的建模的方法并且构建模型,模型评估阶段完成对模型的好坏的评价并且进一步优化模型,模型部署即把最佳的模型进行应用。
朋友们,Happy thinking and Coding!
【互动交流】
中国数据人QQ群:290937046,使命:让更多人懂数据、用数据。陆勤微信:luqin360 ,多交流。
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!