Прогноз cv.gl mnet () противоположен использованию "class" и "response". - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь построить кривую ro c из результата регрессии lasso logisti c. поэтому я использовал прогноз (), используя type = "response", чтобы получить вероятность. однако результат был противоположен тому, когда я сначала поставил type = "class"

, это мой набор данных. мой предсказатель имеет 2 уровня

selected_data$danger <- factor(selected_data$danger, levels = c(1,0))
lasso_data<-selected_data

str(lasso_data$danger)
# Factor w/ 2 levels "1","0": 1 1 1 1 1 1 1 1 1 1 ...

# partition
input_train <- createDataPartition(y=lasso_data$danger, p=0.8, list=FALSE)
train_dataset <- lasso_data[input_train,]
test_dataset <- lasso_data[-input_train,]

dim(train_dataset)
# [1] 768  62
dim(test_dataset)
# [1] 192  62

Я проверил оба случая (type = class, response) для сравнения.

lasso_model <- cv.glmnet( x=data.matrix(train_dataset[,-length(train_dataset)]), y = train_dataset[,length(train_dataset)],
family = "binomial" , type.measure = "auc",alpha=1, nfolds=5)


lasso_pred <- predict(lasso_model, newx=data.matrix(test_dataset[,-length(test_dataset)]),
                      s=lasso_model$lambda.min, type= "class", levels=c(1,0))

lasso_pred_resp <- predict(lasso_model, s="lambda.1se", newx=data.matrix(test_dataset[,-length(test_dataset)]), type="response", levels=c(1,0))


threshold <- 0.5 # or whatever threshold you use
pred <- ifelse(lasso_pred_resp>threshold, 1, 0)


table(lasso_pred, pred)
#           pred
# lasso_pred  0  1
#          0 11 95
#          1 76 10

Я понятия не имею, почему это происходит ... Любой помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 07 мая 2020

Для logisti c регрессии в R вероятность или «ответ» всегда относится к вероятности достижения 2-го уровня, в вашем случае это «0».

Итак, ваши прогнозы должны быть:

pred <- ifelse(lasso_pred_resp>threshold, 0, 1)

Во избежание недоразумений также можно сделать:

lvl <- levels(lasso_data$danger)
pred <- ifelse(lasso_pred_resp>threshold,lvl[2],lvl[1])
...