最好的机器学习语言Julia

最好的机器学习语言Julia

今天是2018年10月10号,据网友说今天是世界卖萌日,那今天小亮也就卖卖萌——最好的机器学习语言Julia。今天这篇博客编程语言方向的,介绍一种语言给大家, 她叫Julia! 小亮主要与大家分享一下这门小亮认为是机器学习领域最好的语言,没有之一!!!更好地让大家学习Machine Learning这个领域,早日当上白富美/高富帅哈!

笔者信息:Next_Legend QQ:1219154092 机器学习 自然语言处理 计算机视觉 深度学习

小亮的博客:https://legendtianjin.github.io/NextLegend.github.io/ ——2018.10.10于北洋图书馆

一、为什么是Julia?

        其实,小亮大概两个月前就注意到这门语言了,只是一直没有关注她,今天一次偶然的机会,小亮觉得得对这门带有神秘色彩的语言进行一下小亮剖析,于是乎,小亮在官网上下载了Julia软件以及Document,重新审视这门语言与她背后的秘密!!!
        先从专业的角度来介绍一下她哈: Julia 是一个面向科学计算的高性能动态高级程序设计语言。其语法与其他科学计算语言相似,比如:R,Matlab,Python等等。 在许多情况下拥有能与编译型语言相媲美的性能。Julia 是个灵活的动态语言,适合科学和数值计算,性能可与传统静态类型语言媲美。
        其实Julia语言还是很年轻的,她于2009年孕育,2012年诞生,到今天也不过短短的六周岁哈!据说是因为一群拥有各种语言丰富编程经验的Matlab高级用户,对现有的科学计算编程工具感到不满——这些软件对自己专长的领域表现得非常棒,但在其它领域却非常糟糕。他们想要的是一个开源的软件,它要像C语言一般快速而有拥有如同Ruby的动态性;要具有Lisp般真正的同像性(Homoiconicity)而又有Matlab般熟悉的数学记号;要像Python般通用、像R般在统计分析上得心应手、像Perl般自然地处理字符串、像Matlab般具有强大的线性代数运算能力、像shell般胶水语言的能力,易于学习而又不让真正的黑客感到无聊;还有,它应该是交互式的,同时又是编译型的…… 于是乎一堆人就开始了工程师的表演——就诞生了Julia!大家看到这是不是觉得伟大的事物还是折腾出来的呢?哈哈,小亮觉得如此!!!大家再看看那个时间节点,就会发现刚好是深度学习开始在本世纪流行的元年,是不是很巧哈!从这一点上,Julia和Machine Learning还是有很千丝万缕的联系!!

二、Julia的神秘面纱

        说了这么多,吊足了大家的胃口,下面让大家看看Julia的神秘面纱哈!以下分别是Julia的Logo以及界面,还有Document,小亮把相关链接都贴出来哈:
Julia官网:https://julialang.org/downloads/
Julia文档:https://docs.julialang.org/en/v1/
Julia中文文档:
最好的机器学习语言Julia_第1张图片
最好的机器学习语言Julia_第2张图片
最好的机器学习语言Julia_第3张图片

三、Julia的独特性能

        Julia的功能主要用于数值计算,她的设计理念也是这样,为了更方便的使用!具有以下特点:

  • 免费开源
  • 核心语言非常小。标准库用的是 Julia 语言本身写的
  • 调用许多其它成熟的高性能基础代码。如线性代数、随机数生成、快速傅里叶变换、字符串处理。(还在增加中……)
  • 丰富的用于建立或描述对象的类型语法
  • 高性能,接近于静态编译型语言。包括用户自定义类型等
  • 为并行计算和分布式计算而设计
  • 轻量级“绿色”协程
  • 优雅的可扩展的类型转换/提升
  • 支持Unicode, 包括但不限于UTF-8
  • 可直接调用 C 函数(不需要包装或是借助特殊的API)
  • 有类似shell的进程管理能力
  • 有类似Lisp的宏以及其它元编程工具

四、Julia与其他语言的区别

(1) 与R的区别

        ** Julia 也想成为数据分析和统计编程的高效语言。与 R 的区别: **

  • 使用 = 赋值,不提供 <- 或 <<- 等箭头式运算符
  • 用方括号构造向量。Julia 中 [1, 2, 3] 等价于 R 中的 c(1, 2, 3)
  • 使用 ’ 运算符做矩阵转置。 Julia 中 A’ 等价于 R 中 t(A)
  • Julia 不能在赋值语句左侧调用函数:不能写 diag(M) = ones(n)
  • 写 if 语句或 for 循环时不需要写圆括号:应写 for i in [1, 2, 3] 而不是 for (i in c(1, 2, 3)) ;应写 if i ==1 而不是 if (i == 1)
  • 0 和 1 不是布尔值。不能写 if (1) ,因为 if 语句仅接受布尔值作为参数。应写成 if true
  • 在 R 中,需要向量化代码来提高性能。在 Julia 中与之相反:使用非向量化的循环通常效率最高
  • Julia 中没有与 R 的 assign 或 get 所等价的语句

  • 还有很多的区别,这里只列几个,具体的可以看文档哈!!!

(2) 与Matlab的区别

        ** Julia 的语法和 MATLAB 很像。但 Julia 不是简单地复制 MATLAB ,它们有很多句法和功能上的区别。以下是一些值得注意的区别: **

  • 数组用方括号来索引, A[i,j]
  • 数组是用引用来赋值的。在 A=B 之后,对 B 赋值也会修改 A
  • 使用引用来传递和赋值。如果一个函数修改了数组,调用函数会发现值也变了
  • 函数返回须使用 return 关键字,而不是把它们列在函数定义中
  • 即使是无参数的函数,也要使用圆括号,如 tic() 和 toc()
  • 可以用 … 把集合中的元素作为参数传递给函数,如 xs=[1,2]; f(xs…)
  • Julia 中 svd 返回的奇异值是向量而不是完整的对角矩阵

  • 和上面一样哈,还有很多的区别,这里只列几个,具体的可以看文档哈!!!

(3) 与Python的区别

        这个得具体的讲一下,因为Python是当今Machine Learning非常流行的一种语言,那Julia的优势在哪里?请看下面的区别:

  • 对数组、字符串等索引。Julia 索引的下标是从 1 开始,而不是从 0 开始
  • 索引列表和数组的最后一个元素时,Julia 使用 end ,Python 使用 -1
  • Julia 中的 Comprehensions (还)没有条件 if 语句
  • for, if, while, 等块的结尾需要 end ;不强制要求缩进排版
  • Julia 没有代码分行的语法:如果在一行的结尾,输入已经是个完整的表达式,就直接执行;否则就继续等待输入。强迫 Julia 的表达式分行的方法是用圆括号括起来
  • Julia 总是以列为主序的(类似 Fortran ),而 numpy 数组默认是以行为主序的(类似 C )。如果想优化遍历数组的性能,从 numpy 到 Julia 时应改变遍历的顺序。
            以上就是Julia与Python的区别,可以看到是不是区别最少的,而且,小亮觉得这几个区别很人性化!

五、Julia常用包总结(深度学习、数据挖掘、画图等等)

        ** 小亮这里也给大家总结了一下Julia应用相关的,大家先熟悉了基本的用法,然后下一篇博客,小亮会做一个具体的小项目,带领大家熟悉Julia**

(1) Julia 常用包

  • ref
  • trend
  • observer

(2) 环境

        IJulia 是一个以Julia为后端的交互式环境,可以方便的进行交互式编程

  • 安装
using Pkg
Pkg.add("IJulia")
  • 使用
using IJulia
notebook()

(3) 数据处理

        常用的数据处理包主要包括:基本科学计算包和绘图(TODO)、数据I/O处(CSV、DataFrames)

(4) 机器学习

       

  • Mocha是一个高效的深度学习框架,包含了通用的随机梯度求解器,可以它构建层训练深、浅(卷积)网络。
    最好的机器学习语言Julia_第4张图片

       

  • **flux是一个机器学习工具包,可以实现各种基本模型(如线性回归)到复杂模型(如神经网络)的搭建、优化和使用 **
    最好的机器学习语言Julia_第5张图片
  • 基于tensorflow开发的julia封装
    tensorfl.jl基于tensorflow开发的julia封装。
    安装 :Pkg.add(“TensorFlow”)
    使用 :GPU支持 ,ENV[“TF_USE_GPU”] = “1”
    Pkg.build(“TensorFlow”)
    -MNXET(https://github.com/dmlc/MXNet.jl)julia包
    安装 :Pkg.add(“MXNet”)
  • **scikitlearn流行的机器学习包julia实现,支持多种机器学习模型。 **
    安装 :Pkg.add(“ScikitLearn”)

你可能感兴趣的:(机器学习,编程语言)