rm(list=ls())
library(class) library(kknn) library(sampling)
使用kknn包的数据集miete。
data("miete") dim(miete)
分层抽样对5个等级抽取等量样本。计算每一等级应抽取的样本数
n <- round(2/3*nrow(miete)/5) n
names(miete)
sub_train <- strata(miete,stratanames = "nmkat",size=rep(n,5),method = "srswor")
data_train <- miete[sub_train$ID_unit,c(-1,-3,-12)] data_test <- miete[-sub_train$ID_unit,c(-1,-3,-12)]
dim(data_train)
dim(data_test)
按照次序向knn函数中一次放入训练集中各属性变量(除第12个变量nmkat)、测试集(除第12个变量nmkat)、训练集中的判别变量(第12个变量nmkat)
names(data_train)
fit_pre_knn <- knn(data_train[,-12],data_test[,-12],cl=data_train[,12]) fit_pre_knn
table(data_test$nmkat,fit_pre_knn)
输出错误率
error_knn <- sum(as.numeric(as.numeric(fit_pre_knn)!=as.numeric(data_test$nmkat)))/nrow(data_test) error_knn
error_knn <- rep(0,20) for(i in 1:20){ fit_pre_knn=knn(data_train[,-12],data_test[,-12],cl=data_train[,12],k=i) error_knn[i]=sum(as.numeric(as.numeric(fit_pre_knn)!=as.numeric(data_test$nmkat)))/nrow(data_test) } error_knn
plot(error_knn,type="b",xlab="K")
问题:class包的knn只能做分类问题,不能做回归问题。
回归问题需要另外找思路,找包和函数。
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.