同样是胶水语言,为什么 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 中的机器学习的库比较熟悉