R中的逻辑回归具有数百万个观测值和罕见事件

时间:2017-03-24 10:03:26

标签: r logistic-regression large-data

我正在使用R中大约1500万个观测值的大型数据集。我正在尝试运行逻辑回归来预测二元因变量(“HasShared”)。 由于共享事件非常罕见(少于1%),我尝试使用logistf回归来处理罕见的事件问题。我的数据集中有48个变量,其中只有6个参与回归。当我在Google云平台上的虚拟机上工作时,我有额外的RAM,并将我的RAM更改为大约100 GB。 当我尝试运行logistf模型时 - 运行永远不会结束。我等了2个多小时才完成。所以这似乎是不可行的。 我读到有一个软件包可以处理非常大的数据集(biglm)的回归,但是我正在寻找一个能够处理我的大数据集和罕见事件问题的解决方案。有这样的综合解决方案吗?

2 个答案:

答案 0 :(得分:0)

这是一个邀请意见而不是解决方案的问题。我很想提出你的问题就在这里'我正在研究虚拟机'。一个虚拟机,单数。也许是可以跨多个虚拟机共享负载的产品? RHadoop?我最近完成了关于预测分析的入门课程。该课程介绍了HPE Vertica,这是一种基于SQL的解决方案,具有统计分析功能。

https://www.futurelearn.com/courses/predictive-analytics

是的,我宁愿将此作为评论发布,但我没有经验值。

答案 1 :(得分:0)

我建议您手动构建成本函数最小化算法,而不是使用黑盒子库。在这种情况下,您将能够看到成本函数值的进度(如果您使用Rstudio,您可以刷新变量),使用学习率alpha等。下面是如何使用渐变下降实现:

# generate some data:

x1 = rnorm(1000)          
x2 = rnorm(1000)
z = 1 + 2*x1 + 3*x2        
pr = 1/(1+exp(-z))         
y = pr > 0.5               

# apply gradient descent to minimize cost function:

alpha = 0.001

m = length(y)

X = as.matrix(cbind(x0 = rep(1,m), x1,  x2))
Y = y
n = ncol(X)
THETA = rep(0, n)

H_theta = function(i){
  1/(1+exp(-(t(THETA) %*% X[i,]) ) )
}

J_theta <- function(){ -(1/m)*(  sum(  Y*log(mapply(H_theta, 1:m))  +   (1-Y)*log(1 - (mapply(H_theta, 1:m)) )   ) ) }

gradient_j <- function(j){sum((mapply(H_theta, 1:m) - Y)*X[,j]) }


for(i in 1:1000){
  NEW_THETA <- THETA - alpha*mapply(gradient_j, 1:n)
  THETA <- NEW_THETA
  cost = J_theta()
}
predicted_y = mapply(H_theta, 1:m)>0.5

# see results:
table(y == predicted_y)

或者,您可以构建Apache Spark群集并使用其逻辑回归算法。