Logistic回归的ROC异常

时间:2018-10-06 17:34:16

标签: r logistic-regression roc

目前,我正在学习逻辑回归和LDA(线性判别分析)分类。我试图以不同的方式生成数据,以学习逻辑回归和LDA行为。

这是二维预测变量的数据可视化,其类别绘制为颜色: This is the link to see the visualization
这是我的代码:

library(ggplot2)
library(MASS)

set.seed(1)

a <- mvrnorm(n = 1000, mu = c(0,0), Sigma = matrix(c(0.4,0,0,0.4), nrow = 2, ncol = 2))
b <- mvrnorm(n = 1000, mu = c(0,0), Sigma = matrix(c(10,0,0,10), nrow = 2, ncol =2 ))

#I want to make sure b1 separated from a
b1 <- b[sqrt(b[,1]^2 + b[,2]^2) > 4,]

df <- as.data.frame(rbind(a,b1))
names(df) <- c('x','y')
labelA <- rep('A', nrow(a))
labelB <- rep('B', nrow(b1))
#Put the label column to the data frame
df$labs <- c(labelA,labelB)
ggplot(df, aes(x = x, y = y, col = labs)) + geom_point()

prd <- glm(as.factor(labs) ~ x + y, family = binomial('probit'), data = df)
prd_score <- predict(prd, type = 'response')
plot(roc(df$labs,prd_score))
auc(roc(df$labs,prd_score))

这是roc曲线图 Weird ROC here

这真的很令人沮丧,因为我无法在产生此类问题的代码中发现任何错误。谁能帮助我指出我的代码中产生这种奇怪的ROC的任何错误,或者关于为什么ROC可能会变得如此怪异的任何解释?

注意:请假设上面生成的数据集是训练数据,并且我想再次预测训练数据。

1 个答案:

答案 0 :(得分:2)

您的代码没有错误。

您的数据集是一个典型示例,无法使用要素的线性组合进行分离。因此,线性分类方法(例如逻辑回归或LDA)对您没有帮助。这就是为什么ROC曲线看起来“怪异”的原因,但这是完全正常的,只能告诉您模型无法分离数据。

您需要研究非线性分类技术。给定数据的径向分布,我可以想象具有径向基础内核的支持向量机(SVM)可以解决问题。

require(e1071)

# We need a numeric label for SVM regression
labelA <- rep(0, nrow(a))
labelB <- rep(1, nrow(b1))
df$labsNum <- c(labelA,labelB)

# We create a radial basis model
svm_prd <- svm(labsNum ~ x + y, data = df, kernel = "radial", type = "eps-regression")
svm_score <- predict(svm_prd)
plot(roc(df$labs,prd_score))
auc(roc(df$labs,prd_score))