全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2604 18
2017-08-22
悬赏 100 个论坛币 已解决
大家好, 我现在在用r data.table编程来score一个credit risk model. 我现在遇到的问题是运行速度比较慢。 我的dataset很大,大概是有100mm的record,然后所有的data都load到memories (Ram也足够大: 2T)。现在我只需要用已经有的100个var(var1-var100)来create如下的一个新variable,但是就光这一步现在需要70s的时间。我想请教各位大拿,有没有什么方法可以提高这个运算效率呢? (真的情况是,我一共有40个scorecard equation,如果每个都要60s,那现在overall总共需要差不多1个小时来运算,但是老板要求把整个时间缩短到20分钟。。。。。。。。。)
(另外,所有的var1-var100的类型都是numeric)


谢谢!!

Final_data[,logit:=(-7.0056794347)        
+  ( 0.0456494244) * V1
+  ( 0.0757088261) * V2
+  ( -0.0109480275) * V3
+  ( 0.000025443) * V4
+  ( -0.0001152472) * V5
+  ( 0.000091941) * V6
+  ( 0.6211679803) * V7
+  ( 0.0395350435) * V8
+  ( 0.0562335702) * V9
+  ( -0.0086264852) * V10
+  ( -0.000086442) * V11
+  ( 0.0000865591) * V12
+  ( 0.1690682996) * V13
+  ( 0.4816358576) * V14
+  ( 0.5582802675) * V15
+  ( 0.2818112131) * V16
+  ( -0.8359998304) * V17
+  ( -0.1518909826) * V18
+  ( 0.0349408702) * V19
+  ( 0.1813907289) * V20
+  ( -0.0464902693) * V21
+  ( -0.001150833) * V22
+  ( -0.0000306922) * V23
+  ( 0.034907385) * V24
+  ( 0.1715049232) * V25
+  ( -0.0426696438) * V26
+  ( -0.0015329182) * V27
+  ( -0.0000270762) * V28
+  ( 0.0361545746) * V29
+  ( 0.1749647777) * V30
+  ( -0.0431259273) * V31
+  ( -0.0015678539) * V32
+  ( -0.0000263913) * V33
+  ( 0.0358181563) * V34
+  ( 0.1944823481) * V35
+  ( -0.0485362551) * V36
+  ( -0.0013188541) * V37
+  ( -0.0000293083) * V38
+  ( 0.0363060637) * V39
+  ( 0.1955400369) * V40
+  ( -0.047347462) * V41
+  ( -0.0015270668) * V42
+  ( -0.0000280312) * V43
+  ( 0.0374844045) * V44
+  ( 0.2034243571) * V45
+  ( -0.0490695545) * V46
+  ( -0.001562743) * V47
+  ( -0.0000257729) * V48
+  ( 0.0356067212) * V49
+  ( 0.2295057868) * V50
+  ( -0.0554446117) * V51
+  ( -0.001358813) * V52
+  ( -0.0000297109) * V53
+  ( 0.0360576991) * V54
+  ( 0.2335807895) * V55
+  ( -0.057674086) * V56
+  ( -0.0012250893) * V57
+  ( -0.0000281796) * V58
+  ( 0.0359835061) * V59
+  ( 0.2044141701) * V60
+  ( -0.0497405066) * V61
+  ( -0.0014426889) * V62
+  ( -0.0000279221) * V63
+  ( 0.0344531082) * V64
+  ( 0.2292608745) * V65
+  ( -0.0560774226) * V66
+  ( -0.0013385359) * V67
+  ( -0.0000285813) * V68
+  ( 0.0327802499) * V69
+  ( 0.2376574903) * V70
+  ( -0.060789287) * V71
+  ( -0.0009033281) * V72
+  ( -0.0000319059) * V73
+  ( 0.0326634905) * V74
+  ( 0.2335280133) * V75
+  ( -0.0602194339) * V76
+  ( -0.0008039851) * V77
+  ( -0.0000332166) * V78
+  ( 0.2517695408) * V79
+  ( 0.0288614891) * V80
+  ( -0.0452325063) * V81
+  ( -0.1714306687) * V82
+  ( -0.1264982609) * V83
+  ( 0.0993860626) * V84
+  ( 0.1877979312) * V85
+  ( 0.1738125876) * V86
+  ( 0.2516028069) * V87
+  ( 0.2084413729) * V88
+  ( 0.2546600658) * V89
+  ( -0.1684226782) * V90
+  ( 1.6390658205) * V91
+  ( 4.6441166049) * V92
+  ( 0.0000031823) * V93
+  ( -0.0000384455) * V94
+  ( -0.0010147409) * V95
+  ( 0.0810504064) * V96
+  ( -0.0019601569) * V97
+  ( -0.0024248405) * V98
+  ( 0.4495341746) * V99
+  ( 0.000038896) * V100

]







最佳答案

cheetahfly 查看完整内容

以下是测试结果,m是一个100,000*10的"dgeMatrix"类的矩阵,dt是把m转化成"data.table"类的变量,vec是一个代表系数的向量,测试代码如下: 第一种方法是data.table的运算,后两种方法分别用了%*%和tcrossprod(),两者相差不大,但比第一种data.table运算节省时间60%以上。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2017-8-22 00:40:43
以下是测试结果,m是一个100,000*10的"dgeMatrix"类的矩阵,dt是把m转化成"data.table"类的变量,vec是一个代表系数的向量,测试代码如下:
复制代码
第一种方法是data.table的运算,后两种方法分别用了%*%和tcrossprod(),两者相差不大,但比第一种data.table运算节省时间60%以上。
测试.png
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-8-22 01:42:09
没有测试速度,不过可以利用并行计算--


复制代码

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-8-22 02:35:30
calanthia 发表于 2017-8-22 01:42
没有测试速度,不过可以利用并行计算--
sorry...我没有说清楚,老板还不让用并行。。。。因为有别的team说是用r data.table解决了大数据运算效率问题,说是只要ram够大,就没问题。。。可是我实在不知道他们是不是真的解决是我面临的类似的问题。。。。

(ps:我确实试过在10个core上面run,时间差不多能减到1/3,大概20s)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-8-22 02:41:24
calanthia 发表于 2017-8-22 01:42
没有测试速度,不过可以利用并行计算--
sorry...忘记说了,老板要求不用并行。。。有其他组说他们解决了r data.table运行大数据的问题,只要ram够大。

(ps:我以前试过10个core,然后运行时间可以缩减到1/3的时间)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-8-22 03:32:28
试试用`set`替代`:=`
复制代码

或者使用`.SD`
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群