KnnR语言实现学习笔记

前言:来自《机器学习与R语言实践》课程

# 利用R自带的iris数据集,随机抽取1/2的样本作为训练集,另外一半的样本作为测试集来验证模型的效果
iris1<-iris
# 利用caret包的createDataPartition函数按不同类别等比例抽取50%
library(caret)
prop.table(table(iris1$Species)) #查看iris1数据集中Species变量类别分布
ind <- createDataPartition(iris1$Species,times=1,p=0.5,list=F)
traindata <-iris1[ind,]  #构建训练集
testdata <- iris1[-ind,] #构建测试集
prop.table(table(traindata$Species)) #查看traindata数据集中Species变量类别分布
prop.table(table(testdata$Species))  #查看testdata数据集中Species变量类别分布


# 利用class包中的knn函数对测试集的分类进行预测。
library(class)
a=knn(traindata[,1:4],testdata[,1:4],traindata[,5],k=3) #指定k值为3
# 查看结果
(b=t(table(predicted=a,observed=testdata$Species)))
# 查看误差率
paste(round((sum(b)-sum(diag(b)))/sum(b),2)*100,"%",sep="")


# 利用kknn包中的kknn函数对测试集的数据进行预测。  
library(kknn)
a=kknn(Species~.,traindata,testdata)
# 查看结果
(b=table(observed=testdata$Species,predicted=a$fitted.values))
# 查看误差率
paste0(round((sum(b)-sum(diag(b)))/sum(b),2)*100,"%")


# 利用caret包中的train函数对测试集的数据进行预测。
# 调整模型参数,找出最优的k值
library(caret)
fitControl <- trainControl(method="repeatedcv",
                           number=10,repeats=3)
knnmodel <- train(x=traindata[,-5],y=traindata[,5],
                  method="knn",trControl = fitControl)
plot(knnmodel)
#对测试集进行预测,查看预测结果
a=predict(knnmodel,testdata[,-5])
(b=table(observed=testdata$Species,predicted=a))
# 查看误差率
paste0(round((sum(b)-sum(diag(b)))/sum(b),2)*100,"%")


# 当k=5时,knn函数
library(class)
a=knn(traindata[,1:4],testdata[,1:4],traindata[,5],k=5) #指定k值为5
# 查看结果
(b=t(table(predicted=a,observed=testdata$Species)))
# 查看误差率
paste(round((sum(b)-sum(diag(b)))/sum(b),2)*100,"%",sep="")

你可能感兴趣的:(机器学习,机器学习,R语言,KNN,分类器)