如何解决Lasso 模型中的 Matthews 相关系数,使用 R 进行逻辑回归
我正在使用库 (MASS) 中的数据 (birthwt),我想在套索模型中使用 R 计算马修斯相关系数 (MCC)。我真的很困惑。预先考虑
birthwt=birthwt[,-10]
boot=sample(nrow(birthwt),40)
train.data=birthwt[-boot,]
test.data=birthwt[boot,]
x =model.matrix(low~.,train.data)[,-1]
y =train.data$low
套索模型:
library(glmnet)
set.seed(123)
cv.lasso = cv.glmnet(x,y,alpha = 1,family = "binomial")
model.lasso=glmnet(x,alpha=1,family="binomial",lambda= cv.lasso$lambda.min)
coef(model.lasso)
x.test = model.matrix(low ~.,test.data)[,-1]
proba.lasso = predict(model.lasso,newx = x.test)
class.lasso = ifelse(proba.lasso > 0.5,1,0)
class.obs = test.data$low
解决方法
如果您对 glmnet 对象进行预测,则默认响应是 logit 链接,但在您的情况下,您需要执行以下操作:
class.lasso = predict(model.lasso,newx = x.test,type="class")
class.lasso = as.numeric(class.lasso)
class.obs = test.data$low
你也可以这样使用概率:
class.lasso = ifelse(predict(model.lasso,type="response") > 0.5,1,0)
要计算 mcc,您可以:
library(mltools)
mcc(pred = class.lasso,actual = class.obs)
[1] 0.2581989
或者使用计算皮尔逊 phi 的东西:
library(psych)
phi(table(class.lasso,class.obs),digits=7)
[1] 0.2581989
或者,如果您使用 the formula from wiki 从头开始派生:
cm = table(class.lasso,class.obs)
TP = cm[2,2]
FP = cm[2,1]
TN = cm[1,1]
FN = cm[1,2]
(TP * TN - FP*FN)/sqrt((TP+FP)*(TP+FN)*(TN+FP)*(TN+FN))
[1] 0.2581989
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。