スポンサーリンク

FaceSearch: 人工知能で30万人以上の中から、あなたのそっくりさんを検索


2019年01月14日

プログラミング言語紹介(2):R / Python / MATLAB

 ども勉三です。「プログラミング言語紹介シリーズ」の2回目。今回は、いま流行りの機械学習や人工知能で注目されホットであり、何かと比較されることが多い R / Python / MATLAB の3言語について紹介したいと思います。

「オープンな R と Python」vs「商用ソフトウェアの MATLAB」

 まずざっくりとこの3言語を分類するなら、まずオープンかどうかで区切ることができると思います。オープンなのは R と Python、企業が開発して商用ソフトウェアとして販売されているのが MATLAB です。

 勉三はこの3言語はいずれも利用してきましたが、やっぱりドキュメント類は MATLAB は群を抜いて整備されています。線形回帰とかPCA解析とかの説明とか、普通に読んでても勉強になるレベルです。

 一方で、R や Python は基本的にドキュメントが分かりづらい。オープンソース界隈の文化というか、公式ドキュメントも分かる人だけ分かればいいというスタンスですね。ただ、利用者が圧倒的に多い分、何かやろうと思った時に調べれば、どこかのユーザが書いた解説ページがすぐ見つかるのは MATLAB にない利点です。

 また、オープンか商用かの違いは、環境設定の複雑さとも関係します。MATLAB はクローズドなエコシステムというか、MathWorks 社が作成したパッケージを使うのみなので、パッケージやバージョンによる依存関係や環境による違いとかもあまり問題にはならないのですが、R や Python は誰でもパッケージを作れるので環境構築で苦戦することが多いです。ただ、これは R や Python の高い拡張性を意味するので、コインの裏表のようなもので一概に悪いというわけではないですね。

「行列演算が標準の R と MATLAB」vs「標準ではない Python」

 行列演算というのは、行列(配列) a から x と一致する要素だけを抜き出した新たな行列を作りたい場合、a[a == x] のようにして書ける記法のことです。一般に、数値演算ではなるべく for ループを避けて、行列演算の形で一気に行った方が遥かに高速なため、この機能は必須となっています。

 この行列演算が標準でサポートされているかどうかで3言語を区分することができます。標準なのが R と MATLAB、標準でないのが Python です。こう書くと Python では行列演算できないみたいに思われてしまうのですが、Python でもできます。ただし、numpy という追加パッケージをインポートする必要があります。

 過去には、numpy は python の言語自体に組み込まれるという話もあったようですが、現在のところ Python の文法とは独立したライブラリとして存在しています。ただし実質的な標準ライブラリに近く、数値演算目的で python を使う人の大半は numpy をインポートすることになるかと思います。

 標準で行列演算がサポートされていないという点は割と大きいです。Python では numpy の配列も Python 標準のリストもほぼ同じ表記で扱うことができるので、コードを見ている分には違いが分からなかったりします。ただ、実際には裏では両者は厳然と区別されています。なので、Python のリスト型に対して、行列演算をするようなコードを書いてしまったり、あるいは逆にリストだと思っていたら numpy の配列だったりして、それでエラーになることも多いです。このあたりの扱いやすさでは、区別がないだけ R や MATLAB の方がすっきりとしているとは思います。

「数値演算に強みをもちつつも汎用性の高い Python」vs「数値演算に特化した R / MATLAB」

 ここまで3言語を並列で扱ってきましたが、Python は数値演算への強みという特性は持ちながらも、それ以外の用途でも使われている言語です。例えば、Web フレームワークの Django などがそうですし、別に機械学習や人工知能に一切関係がなくても、Python を使うことはできます。

 一方で、R や MATLAB を数値演算目的で使う人は殆どいないでしょうね。そういう意味では、比較されやすい3言語といいつつも、Python と R / MATLAB ではユーザの全集団としてみた時には、かなり違っているのではと思います。

なんで Python が伸びてるの?

 さて、ここまで3言語を比較してきましたが、正直なところ、回帰分析・線形判別・SVM・PCA解析だとか、スタンダードな解析目的に使うのであればどれでも大差はないと思います。文法も好みの問題です。どれか1つの言語ができる人は、他もすぐにできるようになると思います。

 ではなぜ今、Python が急激に伸びているのでしょうか? 勉三は「拡張性」「汎用性」の2つに理由があるのではないかと思います。拡張性というのは、オープンで誰でもパッケージを作って公開することができるという点ですね。この点で MATLAB が劣っているのは事実です(上でも書きましたがクローズドなゆえに使いやすいという面もあります)。

 では同じくオープンな R との違いはというと、Python は汎用性が高いという点でしょう。例えば、PHP や Ruby の代わりに、Django などのフレームワークを利用して Python でサーバサイドのプログラミングを書くことができます。機械学習や人工知能などの解析部分を Python で動かすのが一般的になってきた今、PHP や Ruby から Python コードを呼び出すよりは、サーバサイドは全部 Python にしたほうが簡単ですからね。

どれがおすすめなの?

 勉三としては正直どれでもいいと思います。まあ、MATLAB は普通に買うと数十万とかするので、大学や企業で解析されている方でないと難しいとは思いますが。

 ただ、R や MATLAB は情報量が少ない。プログラミング言語としてきちんと解説している本も少ないし古いものが多いです。その点、Python は書籍が多いので勉強しやすいです。なので、初心者の人には Python をおすすめします。

 心配しなくても、どれか1つできれば他は容易いです。少なくとも文法的には。なので、将来的に R や MATLAB を使う可能性がある方も、まずは Python から勉強すればよいでしょう。教材の多さというのは言語習得では非常に重要です。

 ただ注意して頂きたいのは、Python は環境構築が大変。よく日本語の入門書なんかでおすすめされている、Windows や Mac に Anaconda インストールして… みたいなことをやると苦労します。その辺は、当ブログの「AI/機械学習講座」なども参考にして頂ければと思います。

スポンサーリンク

FaceSearch: 人工知能で30万人以上の中から、あなたのそっくりさんを検索 FaceSearch: 人工知能で30万人以上の中から、あなたのそっくりさんを検索


posted by 勉三 at 21:46 | Comment(0) | TrackBack(0) | IT
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/185381272
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック