Beta

It’s a beautiful thing when free data meets free algorithm.

本片文章直接拷贝于部门wiki,作者还有renwanfeng、duyalei

写轮眼是谢益辉开发的,利用 markdown 语法完成的 slides 的工具, 排版非常考究,书写速度极快。非常适合工程师序列的工作人员。

不过因为 GFW 的存在,sharingan 调用的 js 和 font 不能加载,会导致 slides 不能被顺利渲染。 这里提供一些常用参数设置,通过本地编译,sharingan 能够提供 self-contained 文件,不依赖于网络环境。

阅读全文 »

六月的最后一周,在厦门大学统计系做了一份小学期课程的分享。午餐期间,胡帆同学整理并提问了一些问题。感谢 WiseRClub 的文字整理。

以下为谈话内容

胡帆:

您是正儿八经的统计学专业出身,但是现在统计学出身的人大部分都在做机器学习,请问您认为统计学和机器学习的联系和区别是什么?

刘思喆:

  其实没有什么大的区别,简单的说:计算机系和统计系各自重新把数据科学发明了一遍。计算机的人做很多东西,跟统计系做的很多东西其实都是一样的,只是在概念上不一样。经常地,统计系的学生和计算机系的学生在聊天的时候发现,我们说的是一个东西吗?后来发现,就是一个东西!   举个例子:统计系的学生在讲到回归的一些变种的时候会讲到Lasso,而计算机系的学生是从来不会讲Lasso这个概念的,他们叫L1正则;而计算机系学生所说的L2正则,就是统计学中的Ridge regression(岭回归)。其实他们的本质都是在解决数据科学中的一些问题,计算机的人走自己的一条路,而统计的人走的是另一个方向,但实际上我们所解决的问题都是一样的,这个现象最近几年愈演愈烈。大量统计压箱底的好物件,被计算机背景的人不停的翻出。事实上每个系或者每个专业背景的人其实都有自己的优势,我觉得最终会殊途同归。   所以,我们经常说一句话:“一个好的程序员必须是半个好的分析师,一个好的分析师必须半个好的程序员”。这句话虽然粗糙,但我觉得比较好的描述这样一个观点:统计系的学生或者有统计专业背景的人,应该擅长自己统计那块,但是编程这块也要至少能及格;而计算机那边的人呢,如果只做软件工程,那是不够的,他要能够掌握基本的统计思想。

阅读全文 »

思路可借鉴,但内容已经过时,请忽视。可转向 https://github.com/rexyai/RestRserve

前文说到使用 opencpu 来搭建 http 服务,opencpu 可以很快速的通过构建 R 包的方式来搭建 http 服务, 很快捷,而且支持各种响应机制。但我们在搭建线上服务时,经常有需求将请求响应的时间控制在100ms以内,opencpu的框架就存在问题了。 这里再介绍R的另外一个包:fiery,部署更加方便且响应优势更加明显(一般30ms以内)。

首先假设我们面对的场景是垃圾邮件预测,已经根据离线数据构建了预测模型:

1
2
3
4
5
6
library(xgboost)
library(ElemStatLearn)
x <- as.matrix(spam[, -ncol(spam)])
y <- as.numeric(spam$spam) - 1
m <- xgboost(data = x, label = y, nrounds = 5, objective = 'binary:logistic')
saveRDS(m, file = "model.rds")

假定我们线上预测流程是这样:

  1. 通过传递邮件id号获取该邮件的特征
  2. 用xgboost模型来预测spam的概率
  3. json返回预测结果以及埋点结果
阅读全文 »

思路可借鉴,但内容已经过时,请忽视。可转向 https://github.com/rexyai/RestRserve

使用R提供一个高可用的服务一直对R来说都是弱点,比如JRI(Java)或Rserve这些都不是太友好。 OpenCPU的出现彻底解决了这个问题,援引OpenCPU介绍

  • Interoperable HTTP for data analysis
  • RPC and object management
  • I/O: JSON, Protocol Buffers, CSV
  • Support for parallel/async requests
  • Highly configurable security policies
  • Native reproducibility
  • Client libraries: JavaScript, Ruby, ...

一言以蔽之:可以快速搭建灵活的高可用服务。比如说,对于线上预测的请求,大概在200毫秒左右,很多场景基本上也够用了。

阅读全文 »

更新在最前面:

以下工作已经被团队小伙伴打成了 R 包,具体安装可以参考 lengyuyeke 的 github 项目,位置是这里 https://github.com/lengyuyeke/RHJDBC

一次更新

几年前写过一篇简单的博客来讲如何利用 RHive 协同操作 Hive 和 R。这个包貌似很久未做维护,不是太好用,其实 RHive 包底层通过 JDBC 调用数据,所以通过 RJDBC 其实是更简单的方式。废话少说,直接贴代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
library("DBI")
library("rJava")
library("RJDBC")
for(l in list.files('/opt/org/apache/hive/1.1.1/hive-on-mr/lib/', full.names = TRUE)){ .jaddClassPath(l)}
drv <- JDBC("org.apache.hive.jdbc.HiveDriver", "/opt/org/apache/hive/1.1.1/hive-on-mr/lib/hive-jdbc-1.1.1-standalone.jar")
for(l in list.files('/opt/org/apache/hadoop/2.7.3/share/hadoop/common/', full.names = TRUE)){ .jaddClassPath(l)}
conn <- dbConnect(drv, "jdbc:hive2://10.0.2.9:10000/default", "", "")

show_databases <- dbGetQuery(conn, "describe dwd.dwd_user_dim_user_base")
library(knitr)
kable(show_databases) # table's meta data, for gollum wiki

## Get data from hive
d <- dbGetQuery(conn, 'select * from ods.user limit 10')
阅读全文 »
0%