【问题标题】:Is it feasible to run logistic regression on a Latop with 4GB RAM是否可以在具有 4GB RAM 的笔记本电脑上运行逻辑回归
【发布时间】:2016-06-14 13:10:46
【问题描述】:

我正在尝试在R 中对我的数据执行逻辑回归。 我已经创建了所有模型变量并将它们放置到位 在我的 Redshift 数据库的表中。 让我们将此数据库称为“数据库 A”,将表称为 '表 A'

问题陈述

在 4 GB RAM 的笔记本电脑上运行逻辑回归是否可行

我不想做的事

我不想等待我的查询执行, 并等待它显示所有记录。我有大约 200 万条记录。 我对右键单击然后将结果另存为不感兴趣 CSV 文件。我认为这真的很耗时。

我的研究和 dplyr 包。

我浏览了this 博客关于将 R 连接到亚马逊 Redshift 它讨论了通过RJDBC 包建立连接。 我正在从我的个人笔记本电脑连接到 Redshift。我正在提供 我的笔记本电脑上的R版本供您参考。我笔记本电脑上的version 命令输出以下内容。

platform       x86_64-w64-mingw32          
arch           x86_64                      
os             mingw32                     
system         x86_64, mingw32             
status                                     
major          3                           
minor          2.5                         
year           2016                        
month          04                          
day            14                          
svn rev        70478                       
language       R                           
version.string R version 3.2.5 (2016-04-14)
nickname       Very, Very Secure Dishes 

我能够创建与 redshift 的连接。我使用 tbl 函数创建了一个 R 对象,该对象指向我在 Amazon Redshift 中的“表 A”。 sudo 代码如下

myRedshift <- src_postgres('Database A',
host = 'Host_name',
port = Portnumber,
user = "XXXX", 
password = "XXXX")

my.data <- tbl(myRedshift, "Table A")

这很好用。我检查了尺寸。他们是正确的。

我接下来要做的是

我尝试使用tbl_df 函数来存储 my.data R 中数据框中的对象以执行逻辑回归。 但手术只持续了50多分钟。我中止了R

我还尝试将结果链接到一个数据框

new.data <- my.data %>% select(*)

但这给了我错误。我有超过 15 列,我不想要 输入每列的名称。

我在网上搜索并遇到了SparkR 似乎对我有帮助 我按照this 链接中提到的说明进行操作。但当 我在 Windows cmd 终端上运行 .\bin\sparkR 命令。我得到一个 说错了

Access is denied
The system cannot find the file 'C:\Users\Name\AppData\Local\Temp'
The system cannot find the path specified.

我应该如何纠正这个错误? 将我的表中的数据存储在 Redshift 中的有效方法是什么 让我执行逻辑回归? 我知道一个输出管道分隔文件的unload 函数, 使用卸载功能应该向 IT 部门咨询什么?

【问题讨论】:

  • 您似乎已成功加载数据框,这与“在我的'R'内的 Redshift 的数据库 A 中寻找一种从表 A 中获取数据的有效方法”的问题陈述不一致环境”。您的问题似乎更多地与运行逻辑回归所需的时间有关。回答似乎是真正的问题“在具有 4GB RAM 的笔记本电脑上进行 200 万次观察的逻辑回归是否可行。”答案不仅取决于观察的数量,还取决于变量的数量以及所使用的 R 函数
  • 请您添加 (a) 您用于回归的公式 (b) str(my.data) 的结果和 (c) 您使用的 R 命令的语法运行逻辑回归。
  • 此外,如果您可以访问分布式处理集群,SparkR 将为您提供帮助。 Spark 旨在跨集群有效地分配分析工作负载。在笔记本电脑上以本地模式运行时,它不会提高效率,甚至可能比基本 R 函数慢。
  • 当然,再给我一些时间。我会尽量在 6 小时内回复您。
  • 感谢您的观察。我对tbl 函数的解释感到困惑。我在网上看了看,dplyr::collect 来救我了。该模型似乎正在工作。 mutatetransform 函数对我来说也很方便。我正在使用glmnet 进行惩罚逻辑回归。

标签: r dplyr amazon-redshift sparkr


【解决方案1】:

所以我确实有一个临时解决方案来解决我的问题

正如强调的那样,主要问题是花费的时间,我不清楚 关于如何解释tbl 函数。

dplyrRedshift 帮助我使用 collect 函数。 然后我可以很容易地使用mutatetransform。 代替使用strbaseR 方法,有帮助的是 glimpse 函数。它返回 my.data 是否为数据框,维度 以及所有变量的数据类型。

但是collect 需要花费大量时间来创建预测变量。 我的模型中有 6 个预测变量,行数超过一百万。我试图将我的回归器创建为

regressors <- my.data %>%
                filter(required filters) %>%
                select(predictor1, ..., predictor6) %>% collect

但这需要一个多小时。我中止了手术。我添加了 一个一个的预测器

predictor1 <- my.data %>% filter(required filters) %>%
              select(predictor1) %>% collect

我对所有包含超过 100 万条记录的 6 个预测变量进行了此操作。 创建“numericpredictors took around 5 minutes to be created. But predictors which were of typecharacter”需要 10-15 分钟。

对于建模,我使用了 glmnet 函数,该函数运行良好。

如果有更好的方法来创建我的预测矩阵,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 2019-01-13
    • 2022-07-04
    • 2018-10-14
    • 1970-01-01
    相关资源
    最近更新 更多