我正在处理我使用插入符号包进行培训的数据集。我的类变量有7个级别,我使用数据集文档创建标签。发生了其中一个级别在数据集中没有任何数据,并且我有以下错误... Error in train.default(x, y, weights = w, ...) : One or more factor levels in the outcome has no data: 'vwnfp'
。简单的方法应该是摆脱这个水平,这应该工作。但是我想知道在插入符号包中是否有任何参数可以处理这种情况。我确实尝试添加na.action = 'na.omit'
。我也想知道使用preProcess
参数是否可以处理这个问题,但我之前从未使用过preProcess
而我的尝试都没有成功。这是我训练数据的代码......
fit.control <- trainControl(method = 'cv', number = 10)
grid <- expand.grid(cp = seq(0, 0.05, 0.005))
trained.tree <- train(Type_of_glass ~ ., data = data.train, method = 'rpart',
trControl = fit.control, metric = 'Accuracy', maximize = TRUE,
tuneGrid = grid, na.action = 'na.omit')
数据集位于以下网址中:http://archive.ics.uci.edu/ml/machine-learning-databases/glass/glass.data
这是我用来操作数据集的代码......
# Loading dataset and transform
data <- read.csv(file = 'data.csv',
head = FALSE)
colnames(data) <- c('Id', 'Ri', 'Na', 'Ma', 'Al',
'Si', 'K', 'Ca', 'Ba', 'Fe',
'Type_of_glass')
str(data)
data <- subset(data, select = -Id)
data$Type_of_glass <- factor(data$Type_of_glass,
levels = c(1, 2, 3, 4, 5, 6, 7),
labels = c('bwfp', 'bwnfp', 'vwfp', 'vwnfp',
'c', 't', 'h'))
str(data)
# Spliting training and test dataset
set.seed(2)
sample.train <- sample(1:nrow(data), nrow(data) * .8)
sample.test <- setdiff(1:nrow(data), sample.train)
data.train <- data[sample.train, ]
data.test <- subset(data[sample.test, ], select = -Type_of_glass)
我不想手动摆脱这个级别,因为在生产中,经过训练后,看不见的数据集会按原样通过模型。如何在数据集中处理这种情况?