使用活检数据集通过强制引入的NAs-Knn示例

时间:2019-05-23 02:25:05

标签: r

我正在尝试使用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

1 个答案:

答案 0 :(得分:0)

traintest数据帧不应具有因子列,即最后一列。该因子仅在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)