【问题标题】:Factor producing NA values during SVM in R在 R 中的 SVM 期间产生 NA 值的因子
【发布时间】: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)

【问题讨论】:

    标签: r dataframe svm


    【解决方案1】:

    我找到了解决方案。通过仔细检查因子文档,我需要使用 as.interger() 转换具有 int 数据类型的列,然后执行因子分解。参考下面代码sn-p:

    is_patient <- df$is_patient levels(is_patient)[is_patient] is_patient = factor(is_patient) as.numeric(is_patient)

    【讨论】:

      猜你喜欢
      • 2018-06-05
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 2018-05-28
      • 2020-07-05
      • 1970-01-01
      相关资源
      最近更新 更多