我试图使用包cvTools
来估计LDA拟合的分类错误。我过去成功地使用过cvTools和其他模型,但是使用LDA它并没有按预期工作。
data <- rbind(data.frame(cls='A', x=rnorm(10, mean=5)),
data.frame(cls='B', x=rnorm(10, mean=10)))
cv.fit <- cvFit(
lda,
formula=cls ~ x,
data=data,
cost=function(true, pred) {
mean(true != pred)
},
K=10
)
似乎cvTools在内部使用通用predict
模型函数。 predict.lda
不会返回类标签的简单向量,而是返回包含属性class
,posterior
和x
的列表。
如果我在成本函数中设置调试断点,我看到true
是类标签的向量,但pred
表示转换为向量的列表。
所以我的问题是我如何仍然可以将cvTools与LDA一起使用。
我的第一个想法是通过继承lda
来提供一个新的预测方法,希望cvTools然后调用我的预测函数,该函数返回类标签的向量:
lda.fit <- lda(cls ~ x, data)
class(lda.fit) <- c('ldaCV', class(lda.fit))
predict.ldaCV <- function(m, newdata) {
MASS:::predict.lda(m, newdata)$class
}
cv.fit <- cvFit(
lda.fit,
data=data,
y=data$cls,
cost=function(true, pred) {
mean(true != pred)
},
K=10
)
然而,没有任何改变。 pred
仍然是混乱的清单。