R 验证数据中缺少类别

R 验证数据中缺少类别,r,validation,categorical-data,dummy-variable,R,Validation,Categorical Data,Dummy Variable,我在R中基于训练数据集建立了一个分类模型,其中包含12个分类预测因子,每个变量包含数十到数百个类别 问题在于,在我用于验证的数据集中,一些变量的类别少于训练数据中的类别 例如,如果我在训练数据变量v1中有3个类别-'a'、'b'、'c',那么在验证数据集中v1只有2个类别-'a'、'b' 在基于树的方法(如决策树或随机森林)中,这没有问题,但在需要准备虚拟变量矩阵的逻辑回归方法(我使用LASSO)中,训练数据矩阵和验证数据矩阵中的列数不匹配。如果我们回到变量v1的例子,在训练数据中,我得到了三个

我在
R
中基于训练数据集建立了一个分类模型,其中包含12个分类预测因子,每个变量包含数十到数百个类别

问题在于,在我用于验证的数据集中,一些变量的类别少于训练数据中的类别

例如,如果我在训练数据变量v1中有3个类别-
'a'、'b'、'c'
,那么在验证数据集中v1只有2个类别-
'a'、'b'

在基于树的方法(如决策树或随机森林)中,这没有问题,但在需要准备虚拟变量矩阵的逻辑回归方法(我使用
LASSO
)中,训练数据矩阵和验证数据矩阵中的列数不匹配。如果我们回到变量v1的例子,在训练数据中,我得到了三个虚拟变量,在验证数据中,我只得到了2个


你知道如何解决这个问题吗?

你可以通过正确设置音量来避免这个问题。看看下面这个非常愚蠢的例子:

set.seed(106)
thedata <- data.frame(
  y = rnorm(100),
  x = factor(sample(letters[1:3],100,TRUE))
)
head(model.matrix(y~x, data = thedata))
thetrain <- thedata[1:7,]
length(unique(thetrain$x))
head(model.matrix(y~x, data = thetrain))
当以某种方式使用函数
data.frame()
或任何其他删除因子的
级别信息的方法来构造训练集时,就会出现问题

请尝试以下操作:

thetrain$x <- factor(thetrain$x) # erases the levels
levels(thetrain$x)
head(model.matrix(y~x, data = thetrain))

请注意,此
xlev
参数实际上来自
model.frame
,并且
model.matrix
不会在任何情况下调用
model.frame
。因此,该解决方案不能保证始终有效,但它应该适用于数据帧。

可能更多的是交叉验证的问题。您能给出一个可重复的示例吗?你看过model.matrix中的xlev参数了吗?
thetrain$x <- factor(thetrain$x) # erases the levels
levels(thetrain$x)
head(model.matrix(y~x, data = thetrain))
thetrain$x <- factor(thetrain$x, levels = c("a","b","c"))
thetrain$x <- factor(thetrain$x) # erases the levels
levels(thetrain$x)
head(model.matrix(y~x, data = thetrain,
                  xlev = list(x = c('a','b','c'))))