新手问题 Ruby 做机器学习的弱点在哪里?

rubyfan1 · 2017年04月06日 · 最后由 rubyfan1 回复于 2017年04月08日 · 4984 次阅读

同样是胶水语言,为什么 Ruby 的机器学习生态圈相比 Python 差那么多。个人认为 Ruby 的可读性、可扩展性比 Python 强很多。 是因为 Ruby 社区一直没有投入,然后恶性循环导致的么?

这个全靠社区驱动,底层在 numpy, Matplotlib 上差了下来,之后就再难追上了,有 network effect

换句话说,python 在这方面已经足够好了,为什么要重复造轮子而不是用现成的?

1L 说得很有道理。以前我们研究室搞自然语言处理啊,特么偏要强迫每个新生学习 Ruby,结果到了后来写惯了 Ruby,我还是转行做了 web engineer

lgn21st 回复

这个想法我 buy 你~

gyorou 回复

rails 够吸引

Python 没在项目里用过,不做评论。但觉得可以同 Julia 比较一下。

机器学习,或者科学计算,和其它领域最大的不同就是,它和数学关系密切。有一句话是 show me your code。放在机器学习、算法里,反倒是 show me your formula 来得实在。

因为是和数学打交道,语法越接近数学越好。

比如 Julia 的方法定义

foo(x) = x
foo(x, y) = x + y
l = (x, y, z) -> x + y + z

再就是是否有为常见问题提供解决方案 比如矩阵运算

julia> A = [[1, 1] [2, 3]]

julia> A + A
 2  4
 2  6

julia> A * A
 3   8
 4  11

julia> transpose(A)
 1  1
 2  3

还有是否能使用现有的 lib,Julia 可以很轻松的调用 C 和 Fortran,以及 python 还有 java 的代码。 t = ccall( (:clock, "libc"), Int32, ())

Type 比 Class 更适合科学计算。

Julia 的背后支持者也非常强大,一些大学已经开始使用 Julia 授课。

最后是速度,Julia 足够,当一段代码,一跑就是一天的时候,语言速度优势就提现出来了。

gyorou 回复

你们教研室用 ruby 做 nlp?分词有包吗?

cqcn1991 回复

我读的是日本的大学所以基本上是日语的 NLP...

分词的话你可以用 mecab 自己训练一个。我自己用 CRF++ 自带的 MIRA 训练过一个。

https://github.com/lengshuiyulangcn/kurumi 不过训练出来的 model 有 90 多 M,太重了不建议生产实践用。

gyorou 回复

那你们画图用啥…ruby 根本没画图等等的库啊…

cqcn1991 回复

ruby 更多用来处理一些 text。反正我画图都是 excel 和 ppt,最多就是算法的流程图之类的介绍而已。制表写论文 latex。

gyorou 回复

那也太不方便了吧,你做过分词出来画个图都要切出来画,万一结果有问题呢?根本没法调试啊…用 python 一切就都在 notebook 里搞定了

cqcn1991 回复

很多时候大家都没有觉得不方便,也没有去想更多方便的方法而已。

机器学习是需要做很多计算的。其中不乏大量的求和与矩阵运算。这些运算你要是都靠循环来写的话能把自己绕死。 向量化编程才是正确的解决之道。python 的 pandas 提供了非常强大的数据操作功能,有助于写出简洁优雅的代码。Ruby 里有个类似的 gem 叫 Daru,但功能真的差太多了……很多时候我都被迫使用循环。

pycall 让你不再纠结这样的问题

开源框架太少了!

看到这个标题,我在想,如果 ruby 支持机器学习的话,ruby 这门语言会不会变的被人所熟知,学习和使用的人数变的增多呢?

googya 回复

这 gem 怎么用?

ericguo 回复

那个 gem 的源代码中有 examples,其存在的意义就是让 rubyist 怎么方便的调用 python 的库,当然前提要对 python 中的机器学习的库比较熟悉

googya 回复

兼容好么?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号