楼主: complicated
3247 2

[学习分享] [cousera数据科学]R Programming 第四课 仿真模拟和代码优化 [推广有奖]

  • 3关注
  • 18粉丝

已卖:10份资源

副教授

65%

还不是VIP/贵宾

-

威望
0
论坛币
6463 个
通用积分
3868.8149
学术水平
88 点
热心指数
86 点
信用等级
58 点
经验
21958 点
帖子
506
精华
0
在线时间
1425 小时
注册时间
2007-6-16
最后登录
2024-4-20

楼主
complicated 在职认证  发表于 2014-6-29 09:52:12 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
  1. ---
  2. [cousera数据科学]R Programming WEEKW 4
  3. ---

  4. ## 第四课 仿真模拟和代码优化

  5. 1.仿真模拟相关
  6. 先介绍了个不相干但用处极大的函数str,基本上那些不明觉厉的function的output我都愿意用它来看看内容。比如glm的结果。
  7. 然后是关于随机数的四个函数:
  8. d for density,
  9. r for random number generation,
  10. p for culmulative distribution
  11. q for quantile function
  12. ```{r}
  13. rnorm( 5) # 标准正太分布,生成随机数5个
  14. dnorm( c(0,100000) ) # x的正太分布密度函数值-记得那些年我们学的钟型曲线吗?x=0就是钟的顶点
  15. pnorm( c(0,3)) # 分布函数,密度函数的积分
  16. qnorm( c( 0.5, 0.9, 0.95, 0.99) ) #给定累计概率值,找到那个x,注意这都不是双侧概率哈

  17. rpois #泊松分布
  18. ```

  19. 另外set.seed(n)会控制每次生成同样的一组随机数,这样过程可重复。
  20. 模拟这事儿我用不着,这里偷懒不继续了。

  21. 2.Profiling R Code
  22. 为什么我的代码运行得这么慢?这是个让人鸡冻的话题~~~~~
  23. profiling 是一种系统的检验代码每一部分运行速度的方式,可以帮助你优化代码,让他们更有效率……

  24. 3.第一招system.time()
  25. 流逝时间: 实际所用时间   
  26. 用户时间: CPU运算时间   
  27. 下面这个例子平易近人,
  28. ```{r}
  29. system.time( readLines("http://www.jhsph.edu")) #用户时间短,流逝时间看人品和网速

  30. hilbert <- function(n) {
  31.   i <- 1:n
  32.   1/outer( i-1, i, "+")
  33. }
  34. x <- hilbert(500)
  35. system.time( svd(x)) # 看机器性能,土豪机的流失时间应该比较短吧

  36. #另一种用法
  37. system.time( {
  38.   n <- 1000
  39.   r <- numeric(n)
  40.   for ( i in 1:n ) {
  41.     x <- rnorm(n)
  42.     r <- mean(x)
  43.   }
  44. })

  45. #个人觉得方便的用法
  46. ptm <- proc.time()
  47. n <- 1000
  48. r <- numeric(n)
  49. for ( i in 1:n ) {
  50.   x <- rnorm(n)
  51.   r <- mean(x)
  52. }
  53. proc.time()-ptm


  54. ```

  55. 以下部分是玄学:
  56. 多核/分布式可以缩短elapsted time,因为user time可以并行。

  57. lecturer说,很多线性计算比如regression,prediction或者矩阵计算之类所用的算法包括在 Multi-threaded BLAS libraries里面,这些库已经为多核计算优化过了。(BLAS,全称Basic Linear Algebra Subprograms,即基础线性代数子程序库,里面拥有大量已经编写好的关于线性代数运算的程序,包括veclib/Accelerate, ATLAS, ACML, MKL对应mac,AMD和INTEL)
  58. 这难道意味着R是支持多线程的?之前听说R是不支持多核的啊,还是说R只有部分运算可以利用多线程技术?
  59. 求高手解答。。。另外线程的个数大于等于核的个数哈

  60. 还提到了parallel包,不光可以利用多核,还可以多台计算机并行。依然不明觉厉。


  61. 4.The R Profiler 第二招
  62. 不能跟system.time()一起用
  63. Rprof() 跟踪函数调用栈里函数的时间消耗:
  64. 以0.02秒为间隔抽样,看当前有效函数是哪个,结果写入Rprof.out,这相当于一个日志系统。
  65. summaryRprof()  by.total用总时间除以每个函数运行的时间; by.self去掉调用栈里面上层function。
  66. (call stack调用堆栈:调用堆栈是一个方法列表,按调用顺序保存所有在运行期被调用的方法)
  67. 另外,C和Fortran代码不能显示在这里面。

  68. ```{r}
  69. # forms matrix of powers of the vector x , through degree dg
  70. powers1 <- function(x, dg) {
  71.   pw <- matrix( x, nrow=length(x))
  72.   prod <- x # current product
  73.   for ( i in 2:dg) {
  74.     prod <- prod * x
  75.     pw <- cbind(pw, prod)
  76.   }
  77.   return(pw)
  78. }

  79. x <- runif(1000000)
  80. Rprof()
  81. invisible( powers1(x,8))
  82. Rprof(NULL)
  83. summaryRprof()
  84. summaryRprof()$sample.interval

  85. ```
  86. 补充一下我对计算效率的看法~
  87. 首先说,对于r里面固定的算法,比如SVM,glm这些,对一般玩家来说,就算很慢也没有什么优化的空间,除非你具备重写包的能力(那就不是一般玩家了吧)
  88. 那么效率提高在哪里效果最大呢?我感觉应该在数据的处理过程中,或者叫ETL的时候,
  89. 但是有时候,提升的方法是显而易见的,向量化一定比for循环好,plyr的某些模块比R本身好,等等。比如我之前做的,https://bbs.pinggu.org/thread-3042778-1-1.html,不需要用system.time,几个量级的提升是直接能感受到的。
  90. 那么什么问题值得用这种优化呢?
  91. 那些处理流程比较复杂,又没有比较直接的代码可以几行搞掂,这就需要分析代码效率了。
  92. 比如我认识的一个牛人,用R实现一篇paper上的一种page rank的时候,一开始很慢,但是他分析发现开销集中在算一个矩阵上,于是改进了一下算法绕过去(好像是类似做了两个索引或者辅助列之类的),就快了很多。

  93. 就个人经验来说,解决问题最首要的还是分析应用场景和条件,数据分析师还不太会面临时间敏感的任务,离线数据算的慢一点也能接受,再不成,申请台服务器,分批的处理,也能凑合过去了。但是如果要做高频金融交易之类的,也可以不必坚持用R,而依赖更高效的处理手段,至于啥更快?python?c?matlab?我就不懂了,希望能获得更多答案。总之我觉得作为数据分析师/potential数据科学家,只在单机环境下玩是不幸福的,一定要搞分布式才能跟生产系统对接,工作的价值才能更大。嗯嗯~
复制代码

二维码

扫码加我 拉你入群

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

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

关键词:Programming Program couse 数据科学 User generation function 分布函数 number 正太

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
jmpamao + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

密码被盗??

沙发
complicated 在职认证  发表于 2014-6-29 09:54:30
第四周也快结束了,R 编程课程就上完了,感觉作业真心要费点时间,可惜时间不够用哎。。。
下面的内容会越来越难了,坚持!

藤椅
fisher1234 在职认证  发表于 2015-5-22 16:11:49
学习中,对如何节约for 循环的时间很感兴趣啊

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-6 07:16