Site icon Amelt.net

機械学習(人工知能)向けのプログラミング言語

Amelt

Amelt

This post is also available in: 日本語 (Japanese)

本記事は機械学習(人工知能)やってみようかな...という方向けに、機械学習(人工知能)向けのプログラミング言語を紹介しています。
基本的に、記事を修正している2018年現在では、個人的にPythonが優勢だと思います。
将来、プロジェクトで使う予定のフレームワークなどにも影響されるかと思うので、利用するフレームワークから絞っていくのもアリかなと思います。

機械学習(人工知能)におすすめのプログラミング言語

機械学習(人工知能)を使おうかなと思う時に、おすすめのプログラミング言語は個人的には R言語 か Python です。

理由としては、機械学習(人工知能)の処理は統計学や数学を多用するのですが、けっこう高等数学とかに詳しくて自分でライブラリを書くとかいう猛者でない限りは、既存のライブラリに頼ることになるかと思います。
その点、R言語 と Python は機械学習(人工知能)向けのライブラリが充実しているので、非常に便利です。

R言語

R言語 はプログラミング言語と統計解析用の開発環境が一緒になっているようなオープンソース・フリーソフトウェアです。

教育機関や研究機関など本格的な統計分析を行う場合にはメジャーな言語で、一般的なプログラミング言語よりかは統計分析に特化されている分、統計分析用にロジックを書く必要がない(高度な分析をする時には自作する必要がありますが)ので使いやすいです。

他の凡用言語(Perl,Python,Ruby,java)などで実装する前に、統計分析の基本モデルを作ったりするのによく使われるようです。
そして、アプリケーションにする際に他の凡用言語(Perl,Python,Ruby,java)でそのモデルを書き直したり、もしくはR言語のコードと連携したりするようです。

Python

R言語対してPython は汎用言語と呼ばれる色々なアプリケーション(webアプリやデスクトップアプリ)を作るのに適したプログラミング言語です。
統計分析用に書いたプログラミングコードは自作ライブラリとして、簡単にWEBアプリケーションなどの製品に組み込むことが可能です。スマートフォン向けならWEBのAPIとして使う場合が多いかと思います。

過去の記事 集合知プログラミング:遺伝的プログラミングのツリー構造のソースコードを読み解く にて、機械学習のアルゴリズムの一種である遺伝的プログラミングのPythonコードを読み解いている記事がありますので、Pythonってなにそれおいしいの?という方は参考にしてみてください。

また、Pythonは他の汎用的なプログラミング言語と比べても科学技術系や機械学習(人工知能)系のライブラリが一通り揃っていています。
なので、R言語 は本格的な統計分析を行いたい場合(もしくはプログラミング言語を学びたくないが、統計分析をプログラミングで処理しなければならない場合)、Python はWEBサービスなどのアプリに機械学習を利用したいという場合に使い分けるのが良いのかなと思います。
弊社的にはPythonのみで十分な状態です。

特に、Googleの「Tensorflow」やPreferred Networksの「Chainer」など、PythonにはDeep Learningの有名どころのフレームワークがありますので、機械学習(人工知能)ちょっとやってみようかな...という場合には良いと思います。
Deep Learning以外の機械学習(人工知能)ライブラリとしては「scikit-learn」というライブラリがあり、メジャーな機械学習の手法のライブラリ(線形識別,k近傍法,KMeans,サポートベクターマシン,決定木,ランダムフォレストなど他多数)が揃っています。
また、Python の機械学習(人工知能)のライブラリについては過去の記事「pythonで機械学習系のライブラリをインストールして環境構築する手順(windows7-32bit)」で触れているので参考にしてみてください。

その他のプログラミング言語

JAVA

JAVAだと、「Deeplearning4j」とか「H2O.ai」などのフレームワークを使っているとよく聞いたりします。
どちらかというと、JAVAの性質上、大規模開発で分散処理が必要だったりするプロジェクトが相性良いのではないでしょうか。

C++

C++だと、「TensorFlow」「Caffe」「Deeplearning4j」などが使われる機械学習フレームワークみたいです。
プログラミングするチームが C++ が好きだったり、速度をストイックに求めるならば C++ を採用することがあるようです。

個人的にPython推しなので擁護しておくと、Pythonライブラリでは高レベルAPIにおいてはPythonで動いていても、低レベルAPIにおいては最適化されたC言語で処理されているので、とくかく早い方がいい!というのでなければPythonでもストレスは感じないかなと思います。

機械学習(人工知能)のプログラミングについて学びたいという方は 世界最大級のオンライン学習サイトUdemy をおすすめします。