预测Logistf

我正在使用一个名为logistf的R包来进行逻辑回归分析,发现这个包没有用于新数据的预测函数,而且predict包与之不兼容,所以我找到了一段代码,展示了如何对新数据进行预测:

fit<-logistf(Tax ~ L20+L24+L28+L29+L31+L32+L33+L36+S10+S15+S16+S17+S20, data=trainData) betas <- coef(fit)X <- model.matrix(fit, data=testData)probs <- 1 / (1 + exp(-X %*% betas))

我想使用fit$predictprobs生成的概率来创建一个交叉验证版本。是否有人之前做过类似的事情?

另外我想了解fit$predict,我正在进行二元逻辑回归,这个函数返回了多个值,这些值是属于类别0还是1?我如何判断这一点?谢谢


回答:

虽然你写的代码运行得很完美,但似乎有种更简洁的方法可以得到相同的结果:

    brglm_model <- brglm(formula = response ~ predictor , family = "binomial", data = train )brglm_pred <- predict(object = brglm_model, newdata = test , type = "response")

关于交叉验证,我想你需要写几行代码:

#设置折数和每折的实例数n_folds <- 5 fold_size <- nrow(dataset) %/% 5 residual <- nrow(dataset) %% 5#根据折数标记实例cv_labels <- c(rep(1,fold_size),rep(2,fold_size), rep(3,fold_size), rep(4,fold_size), rep(5,fold_size), rep(5,residual))#错误项会根据每个阈值不同而变化t_seq <- seq(0.1,0.9,by = 0.1)index_mat <- matrix(ncol = (n_folds+1) , nrow = length(t_seq))index_mat[,1] <- t_seq #计算每个折的CV错误的主要循环for (i in 1:5){        train <- dataset %>% filter(cv_labels != i)         test <- dataset %>% filter(cv_labels == i )        brglm_cv_model <- brglm(formula = response_var ~ . , family = "binomial", data = train )        brglm_cv_pred <- predict(object = brglm_model, newdata = test , type = "response")        #你想要的错误公式,例如分类错误        counter <- 0         for (treshold in t_seq ) {               counter <- counter + 1                conf_mat <- table( factor(test$response_var) , factor(brglm_cv_pred>treshold, levels = c("FALSE","TRUE") ))                sen <- conf_mat[2,2]/sum(conf_mat[2,])               #其他指标可以如下计算                #spec <- conf_mat[1,1]/sum(conf_mat[1,])               #prec <- conf_mat[2,2]/sum(conf_mat[,2])               #F1 <- (2*prec * sen)/(prec+sen)               #accuracy <- (conf_mat[1,1]+conf_mat[2,2])/sum(conf_mat)               #这里我只对敏感性感兴趣               index_mat[counter,(i+1)] <- sen         }}#最终数据框将是每个阈值敏感性的平均值 final_mat <- matrix(nrow = length(t_seq), ncol = 2 )final_mat[,1] <- t_seq final_mat[,2] <- apply(X = index_mat[,-1] , MARGIN = 1 , FUN = mean)final_mat <- data.frame(final_mat)colnames(final_mat) <- c("treshold","sensitivity")#为什么不看看模型在不同阈值下的CV敏感性呢?ggplot(data = final_mat) +         geom_line(aes(x = treshold, y = sensitivity ), color = "blue")

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注