R中caret+glmnet二元LASSO逻辑回归性能评估报错解决方法
报错原因
- 你的任务属于二分类场景,目标变量
status是因子类型,predict()默认输出的预测结果也是分类标签(因子格式) RMSE()和R2()是为回归任务设计的性能指标,要求传入的观测值、预测值均为数值类型,传入因子类型变量就会触发该报错- 补充说明:二分类任务本身不推荐使用RMSE、R²作为性能评估指标,常规使用准确率、AUC、混淆矩阵、F1值等分类指标更合理。
解决方法
场景1:确实需要计算RMSE和R²
需要先将分类标签转换为数值格式,或者直接输出预测概率计算,修正代码如下:
方式1:基于分类标签计算
# 将真实标签和预测标签转为0/1数值,neg对应0,pos对应1 test_status_num <- ifelse(test$status == "pos", 1, 0) predictions_num <- ifelse(predictions_LASSO == "pos", 1, 0) # 计算指标 model_LASSO_perf <- data.frame( RMSE = RMSE(predictions_num, test_status_num), Rsquared = R2(predictions_num, test_status_num) )
方式2:基于正类预测概率计算(更合理)
# 预测时指定输出分类概率 predictions_prob <- predict(model_LASSO, newdata = test, type = "prob") # 取pos类的预测概率 predictions_pos_prob <- predictions_prob$pos # 提前转换好真实值的0/1编码 test_status_num <- ifelse(test$status == "pos", 1, 0) # 计算指标 model_LASSO_perf <- data.frame( RMSE = RMSE(predictions_pos_prob, test_status_num), Rsquared = R2(predictions_pos_prob, test_status_num) )
场景2:使用二分类任务适配的评估指标
更推荐采用分类场景专用的指标评估模型性能,示例代码如下:
# 计算混淆矩阵、准确率、召回率、F1等指标 confusionMatrix(predictions_LASSO, test$status, positive = "pos") # 计算AUC library(pROC) roc_obj <- roc(test$status, predictions_pos_prob) auc(roc_obj)
内容的提问来源于stack exchange,提问作者cewim
相关产品推荐
相关产品推荐

