我正在尝试使用R中的Biopsy数据集运行代码。这个想法是创建Knn机器学习。
感谢您的帮助。
我试图运行代码,但收到一些警告。例如强制引入的NA。
cc = c(1:100)*0
for (i in 1:100) {
L<- sample(1:nrow(biopsy_sem_NA_nas_Linhas),round(nrow(biopsy_sem_NA_nas_Linhas)/3))
train_sem_NA_Linhas = biopsy_sem_NA_nas_Linhas[-L,2:11]
test_sem_NA_Linhas = biopsy_sem_NA_nas_Linhas[L,2:11]
cl = factor( biopsy_sem_NA_nas_Linhas[-L, 11])
fit = knn(train_sem_NA_Linhas, test_sem_NA_Linhas, cl, k = 5)
c_matrix = table(fit[1:length(L)], factor(biopsy_sem_NA_nas_Linhas[L, 11]))
acc[i] = cat('Accurancy:', sum(diag(c_matrix))/sum(c_matrix)*100, '%')
}
mean(acc)
出现以下错误:
knn中的错误(train_sem_NA_Linhas,test_sem_NA_Linhas,cl,k = 5): 外部函数调用中的NA / NaN / Inf(参数6) 另外:警告消息: 1:在knn(train_sem_NA_Linhas,test_sem_NA_Linhas,cl,k = 5)中: 强制引入的NA 2:在knn(train_sem_NA_Linhas,test_sem_NA_Linhas,cl,k = 5)中: 强制引入的NAs
答案 0 :(得分:0)
train
和test
数据帧不应具有因子列,即最后一列。该因子仅在cl
中提供。您可以在knn
函数的文档中进行检查。
我删除了cat
部分,因为您不能使用字符串的平均值。但是,如果您确实想要包含消息的列表,则应尝试使用paste
。
library(MASS)
library(tidyverse)
library(class)
data("biopsy")
biopsy_sem_NA_nas_Linhas <- biopsy %>%
na.omit() #creatind the biopsy data "sem NA"
acc = c(1:100)*0
for (i in 1:100) {
L<- sample(1:nrow(biopsy_sem_NA_nas_Linhas),round(nrow(biopsy_sem_NA_nas_Linhas)/3))
#without the last column, the one with the factors
train_sem_NA_Linhas = biopsy_sem_NA_nas_Linhas[-L,2:10]
test_sem_NA_Linhas = biopsy_sem_NA_nas_Linhas[L,2:10]
cl = factor( biopsy_sem_NA_nas_Linhas[-L, 11])
fit = knn(train_sem_NA_Linhas, test_sem_NA_Linhas, cl = cl, k = 5)
c_matrix = table(fit[1:length(L)], factor(biopsy_sem_NA_nas_Linhas[L, 11]))
acc[i] = sum(diag(c_matrix))/sum(c_matrix)*100
}
mean(acc)