这是一个重现此问题的小例子:
model <- glmnet(matrix(rnorm(3*100), 100, 3), rbernoulli(100))
preds <- predict(model, matrix(rnorm(3*100), 100, 3))
dim(preds)
# 100 60
但是由于预测变量是bernoulli,我希望输出是一维或二维的(1
的概率,或每个类的概率)。
我看过glmnet
和predict
的文档,但是找不到任何描述此行为的文档。我要寻找的是简单地将模型适合一些训练数据,然后计算班级概率,以便我可以计算AUC。
我主要是在询问这种行为,因为例如,如果我将rpart软件包与predict
一起使用,就不会发生这种情况
df <- data.frame(cbind(matrix(rnorm(3*100), 100, 3), rbernoulli(100)))
model <- rpart(X4 ~ ., df)
length(predict(model, data.frame(matrix(rnorm(3*100), 100, 3))))
# 100, as expected
来自Python,由于predict
函数似乎很笼统,尽管它在两个二进制分类器上的表现方式显然有所不同,但我发现其中很多令人困惑的地方。
答案 0 :(得分:1)
在R中,您会发现许多示例,这些示例中,您根据函数输入的维度/类等获得输出。
对于String monomialRegex = "(-?\\d+(?:\\.\\d*)?x#-?\\d+(?:\\.\\d*)?\\$)";
String completeRegex = monomialRegex + "×" + monomialRegex + "÷" + monomialRegex;
,默认情况下,您提供一系列lambda:
glmnet
您需要根据所需的性能指标对其进行调整,以找到模型的最佳/最佳值。一旦有了它,就可以使用它来获得最终的预测。像这样:
set.seed(1)
model <- glmnet(matrix(rnorm(3*100), 100, 3), purrr::rbernoulli(100))
preds <- predict(model, matrix(rnorm(3*100), 100, 3))
dim(preds)
#[1] 100 61
length(model$lambda)
[1] 61
而model <- glmnet(matrix(rnorm(3*100), 100, 3), purrr::rbernoulli(100),
lambda = 0.19) # assuming its an optimal value
preds <- predict(model, matrix(rnorm(3*100), 100, 3))
dim(preds)
# [1] 100 1
默认情况下不需要超参数,因为它适合完整的树而无需修剪,这等效于提供一个与拟合数据相对应的单个超参数值,直到叶节点为止。因此,您将获得一组预测。使用当前分类器的不利之处在于它没有被概括。
因此,如果您要从python转到R以执行应用的机器学习任务,则最好利用 caret package ,它是一个包含多个统计模型的同类框架在统一的建模方法下。