Я немного покопался в пакете caret и методах, перечисленных @phiver. tldr; см. ниже подробности об использовании trim на bayesglm, C5.0, C5.0Cost, C5.0Rules, C5.0Tree, glm, glmnet, rpart, rpart2 и treebag. Иначе, установка trim=T
для других методов не оказывает влияния
Байесглм и Глм
Вывод данных, ненужных для прогнозирования, обрезается из модели, так что подогнанная модель имеет постоянный размер по отношению к размеру обучающих данных. Функция обрезки
function(x) {
x$y = c()
x$model = c()
x$residuals = c()
x$fitted.values = c()
x$effects = c()
x$qr$qr = c()
x$linear.predictors = c()
x$weights = c()
x$prior.weights = c()
x$data = c()
x$family$variance = c()
x$family$dev.resids = c()
x$family$aic = c()
x$family$validmu = c()
x$family$simulate = c()
attr(x$terms,".Environment") = c()
attr(x$formula,".Environment") = c()
x$R <- c() #Not in a glm
x$xNames <- c()
x$xlevels <- c()
x
}
Это основано главным образом на этом посте , который содержит интересный анализ с этим ограничением:
Одна точка и одна оговорка. Вы можете полностью обнулить model$family
;
Функция предсказания по-прежнему будет возвращать значение по умолчанию, значение ссылки
(то есть predict(model, newdata=data)
) будет работать). Тем не мение,
predict(model, newdata=data, type='response')
потерпит неудачу. Вы все еще можете
восстановить ответ, передав значение ссылки через обратную
функция связи: в случае логистической регрессии это сигмовидная кишка
функция, sigmoid(x) = 1/(1 + exp(-x))
.
Предостережение: многие другие вещи, кроме предсказания, что вы могли бы
как делать с моделью GLM не удастся на урезанной версии: в
в частности summary()
, anova()
и step()
. Так что любая характеристика, которая
Вы хотите сделать на кандидата модель должна быть сделана до обрезки
вниз жир. Как только вы определились с удовлетворительной моделью, вы можете
раздеть его и сохранить для использования в будущих прогнозах.
Я также включил функции обрезки для других методов, которые имеют возможности обрезки непосредственно из пакета :
glmnet
function(x) {
x$call <- NULL
x$df <- NULL
x$dev.ratio <- NULL
x
}
C5.0, C5.0Cost, C5.0Rules, C5.0Tree
function(x) {
x$boostResults <- NULL
x$size <- NULL
x$call <- NULL
x$output <- NULL
x
}
rpart, rpart2
function(x) {
x$call <- list(na.action = (x$call)$na.action)
x$x <- NULL
x$y <- NULL
x$where <- NULL
x
}
TreeBag
function(x) {
trim_rpart <- function(x) {
x$call <- list(na.action = (x$call)$na.action)
x$x <- NULL
x$y <- NULL
x$where <- NULL
x
}
x$mtrees <- lapply(x$mtrees,
function(x){
x$bindx <- NULL
x$btree <- trim_rpart(x$btree)
x
} )
x
}