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

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

同样是胶水语言,为什么 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 回复

兼容好么?

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