同样是胶水语言,为什么 Ruby 的机器学习生态圈相比 Python 差那么多。个人认为 Ruby 的可读性、可扩展性比 Python 强很多。 是因为 Ruby 社区一直没有投入,然后恶性循环导致的么?
这个全靠社区驱动,底层在 numpy, Matplotlib 上差了下来,之后就再难追上了,有 network effect
换句话说,python 在这方面已经足够好了,为什么要重复造轮子而不是用现成的?
反过来想这个问题,这个地球上作机器学习最厉害的脑袋的总数是有限的,这些顶层的脑袋善于使用什么语言,那么其他所有的语言相对于这门语言都有弱点。
1L 说得很有道理。以前我们研究室搞自然语言处理啊,特么偏要强迫每个新生学习 Ruby,结果到了后来写惯了 Ruby,我还是转行做了 web engineer
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 足够快,当一段代码,一跑就是一天的时候,语言速度优势就提现出来了。
我读的是日本的大学所以基本上是日语的 NLP...
分词的话你可以用 mecab 自己训练一个。我自己用 CRF++ 自带的 MIRA 训练过一个。
https://github.com/lengshuiyulangcn/kurumi 不过训练出来的 model 有 90 多 M,太重了不建议生产实践用。
ruby 更多用来处理一些 text。反正我画图都是 excel 和 ppt,最多就是算法的流程图之类的介绍而已。制表写论文 latex。
那也太不方便了吧,你做过分词出来画个图都要切出来画,万一结果有问题呢?根本没法调试啊…用 python 一切就都在 notebook 里搞定了
机器学习是需要做很多计算的。其中不乏大量的求和与矩阵运算。这些运算你要是都靠循环来写的话能把自己绕死。 向量化编程才是正确的解决之道。python 的 pandas 提供了非常强大的数据操作功能,有助于写出简洁优雅的代码。Ruby 里有个类似的 gem 叫 Daru,但功能真的差太多了……很多时候我都被迫使用循环。
那个 gem 的源代码中有 examples,其存在的意义就是让 rubyist 怎么方便的调用 python 的库,当然前提要对 python 中的机器学习的库比较熟悉