【发布时间】:2020-08-18 10:17:27
【问题描述】:
我无法从相关帖子中找到任何关于 factor() 调用产生 NA 值的答案。我还在学习 R,如果你觉得这篇文章很愚蠢,我很抱歉。 在第一次调用 factor() 时,数据集中产生了 167 个 NA 值。使用 upSample(),“类”列被添加到数据集中,这就是我从 R 文档中读取的内容(通过 help("upSample") )。在这行代码之后,通过 str(),我发现它具有类似的趋势,如“is_patient”列(预测器/类变量),通过 sum(is.na()),它给出了 832 个 NA 值。现在肯定有问题。 我在 createDataPartition() 调用时也收到了警告。我仍然在积极的希望中前进。但我知道这会变得丑陋,正如在训练 SVM 模型时所预期的那样,由于 NA 值它失败了。以下是代码、数据集和错误图像的链接:
https://github.com/JordanTheDodger/SVM- ps:代码不长,我也贴一下:
library(readr)
library(party)
library(caret)
library(ggplot2)
library(pROC)
df <- read_csv(file.choose())
str(df)
head(df)
names(df)
df <- df[,-2]
sum(is.na(df))
df$alkphos[is.na(df$alkphos)] <- median(df$alkphos, na.rm = T)
mdf <- df
str(mdf$is_patient)
head(mdf)
#factor
mdf$is_patient <- factor(mdf$is_patient, levels = c(0,1))
str(mdf) #1st factor call 2 levels, 167 producing na values
sum(is.na(mdf))
set.seed(1234)
mdf <- data.frame(mdf)
str(mdf) # 1st data.frame call, 2 levels
names(mdf)
#updsmpling
mdf <- upSample(x=mdf, mdf$is_patient)
mdf <- mdf[sample(nrow(mdf)),]
names(mdf) # "Class" column is added
str(mdf)
sum(is.na(mdf)) #832 na values
mdf <- subset(mdf[c(1:10)])
sum(is.na(mdf))#416 NA values
data_part <- createDataPartition(y= mdf$is_patient, p=0.7, list=FALSE)
#spliting the dataset
training <- mdf[data_part,]
testing <- mdf[-data_part,]
str(training)
sum(is.na(training)) #292 NA values
trainCtrl <- trainControl(method = "repeatedcv", number = 10, repeats = 3)
set.seed(7777)
svmModel3 <- train(is_patient ~ ., data = training, method = "svmRadial",
trControl = trainCtrl, preProcess = c("center", "scale"),
tuneLength = 20)
svmModel3
predictor <- predict(svmModel3)
【问题讨论】: