現場で使われているライブラリが分からない
実用的なPythonのライブラリを知りたい!
といったことはありませんか?実際調べても、なかなかスムーズに調べられなかったりすることも、しばしばです。そこで今回、現役エンジニアが使い勝手が良くて頻繁に使っているPythonの機械学習ライブラリを厳選して5個お届けしていきます。
実用的で使い勝手のいいものだけをご紹介していきますので、期待して読んでくださいね!
TensorFlow(ディープラーニング)
一発で特徴を理解する
google製のニューラルネットワーク最新ライブラリでハイレベルな機能実装の他、グラフで計算を表すような可視化をすることもできます
特徴の詳細を理解する
TnesorFlowは、Googleが「Google Brain」というプロジェクトのもとで開発を行っているニューラルネットワークの最新ライブラリです。
ニューラルネットーワークとは、人間の脳を再現した仕組み(と言われていますが、実際には別の分野の様々な技術も使われています)のことですが、現在もっとも注目されいているといっても過言ではないでしょう。ハイレベルな機能を実装することができ、計算をデータフローやグラフで表すことができます。ライブラリの内部はおよそC++で作られていていますが、Pyhonも含まれており柔軟に使用できる構造になっていて文法が「Theano」よりも簡単です。
また、最近ではChainerやPyTorchのような直感的な記述ができるようになり、更に普及していくことが予想されます。複雑な問題に対処できるように作られているので、実践では非常に役立つライブラリです。Playgroundというニューラルネットワークの動作を可視化した、ニューラルネットワークの仕組みを学ぶための教育コンテンツなどもある。
よく使われるジャンル
- ニューラルネットワーク
- ディープラーニング
scikit-learn(機械学習の全てのジャンル)
一発で特徴を理解する
機械学習全般のアルゴリズムが実装されたライブラリでエンジニアの間で大人気
特徴の詳細を理解する
scikit-learnも機械学習の分野ではかなり有名なライブラリです。機械学習全般のアルゴリズムが実装されたライブラリで大人気なんです。統計学、パターン認識、データ解析の技法が豊富に使うことができるので、研究者の間で人気があります。
他の「NumPy(数値計算)」「SciPy(科学技術計算)」「matplotlib(グラフ描画)」のようなライブラリと比べても、scikit-learnは簡単に様々な機械学習の実装を試すこととができます。
機械学習の基盤となっているライブラリです。
よく使われるジャンル
- 機械学習のほぼすべてのジャンル
Theano(ディープラーニング)
一発で特徴を理解する
機械学習の計算に必要な多次元配列を含む数式を最適化して使用できる機械学習ライブラリ
特徴の詳細を理解する
Theanoは数学の「多次元配列」を含んでいる数式を定めて最適化して使うことができる機械学習ライブラリです。「NumPy」と強く統合されていて、よく一緒に使われ、他のライブラリを使っている人の不満点を見事に解消しています。
Theanoの大きな特徴の1つとして、すばらしいチュートリアルがあることがあげられます。機械学習を実装する上で多くのトラブルを避けることができるでしょう。ただし、開発が終了しているのでこれから始めるのはおすすめしません。
よく使われるジャンル
- ニューラルネットワーク
- ディープラーニング
Chainer(ディープラーニング)
一発で特徴を理解する
動的に計算グラフを構築している国産ディープラーニングフレームワークライブラリ
特徴の詳細を理解する
日本のベンチャー企業「PFN」が開発した国産ディープラーニングフレームワークで日本人エンジニアに大人気なんです。TheanoやTensorflowと異なり動的に計算グラフを構築しているので、学習途中でネットワークの形が変わるニューラルネットワークでも簡単に記述できる点が強力なライブラリです。
この書き方は最近では別のライブラリでも広く採用されていて、Tensorflowでも採用されました。直感的にニューラルネットワークが記述できるので非常に便利です。「とりあえずこれをGPUで高速化したい」というコードが有るならChainerやそのGPUバックエンドであるcupyを使うのが一番の近道です。
よく使われるジャンル
- ニューラルネットワーク
- ディープラーニング
Pytorch(ディープラーニング)
一発で特徴を理解する
計算速度も早く、ソースコードが見やすく扱いやすいディープラーニングフレームワークライブラリ
特徴の詳細を理解する
chainerからforkして作られた近年人気急上昇中のディープラーニングフレームワークライブラリ。Chainerと似たような構文のライブラリで計算が速いと評判。chainerは実装されていない機能を追加するときに自分で微分のコードを書かないといけなかったが、Pytorchはその作業が不要になる点も魅力です。(torch自体がTheanoと同じように自動微分機能を持っている)
Chainer同様にソースコードが非常に見やすく便利で、Tensorflowよりも習得が簡単です。Theanoと比べたら月とスッポンくらい簡単になってしまいます。
よく使われるジャンル
- ディープラーニング
Pyevolve(遺伝的アルゴリズム/ニューラルネットワーク)
一発で特徴を理解する
Pure Pythonの文法で、APIが簡単に使えたり、進化過程をグラフ化できる機能などがある多機能なライブラリ
特徴の詳細を理解する
文法は純粋なPythonで書くため、コードは書きやすく読みやすいです。APIが簡単に使えるようになったり、進化過程をグラフ化できる機能など多機能です。
また、拡張性を持たせることを方針としているので、拡張機能も豊富です。
ただ、PyevolveがWebで探してもあまり出てこないことが難点なので入門者には少し難しいライブラリですね。
よく使われるジャンル
- 遺伝的アルゴリズム
Deap(遺伝的アルゴリズム)
一発で特徴を理解する
拡張性をもっとも意識しており、データ構造からアルゴリズムまでカスタマイズできる多機能ライブラリ
特徴の詳細を理解する
Pyevolveよりも開発が活発だと言われている遺伝的アルゴリズムライブラリ。遺伝的アルゴリズムだけでなく、遺伝的プログラミングやこれらの並列化などにも使うことができる。
拡張性をもっとも意識しているライブラリなので、データ構造からアルゴリズムまでカスタマイズができる作りになっている。
よく使われるジャンル
- 遺伝的アルゴリズム
- 遺伝的プログラミング
Stan(確率的プログラミング)
一発で特徴を理解する
科学者や企業に人気で簡単な構文が使えるため、確率的プログラミングの分野では利用者が多いライブラリ
特徴の詳細を理解する
科学者や企業に大人気のMCMCサンプラー。RなどPython以外の言語からも使える。PyStan(確率的プログラミングをするための言語)というラッパーがあり、これを使うことでPythonから簡単に利用できる。
簡単な構文でこの分野で利用者は多い。統計モデルを書くだけで、「ベイズ推定」をすることができるのも強みで利用者が多いことに影響していますね。
※ベイズ推定とは、ベイズ確率の考え方に基づき、推定したい事柄を確率的に求めるもの。
よく使われるジャンル
- 確率的プログラミング
Edward(確率的プログラミング)
一発で特徴を理解する
計算グラフやベイズ推定+確率変数+確率モデリングといったものが入った多機能確率的プログラミングライブラリ
特徴の詳細を理解する
Stanの競合で、Tensorflowに基づいた確率的プログラミングライブラリです。tensorflowの恩恵受けて、処理がかなり速いのが特徴です。
計算グラフや確率的プログラミング(ベイズ推定+確率変数+確率モデリング)といったものが入っている多機能なライブラリと言えます。モデリングにはPython/Numpyスタックを使っている。
よく使われるジャンル
- 確率的プログラミング
【番外編】機械学習開発で使えるおすすめツール
Jupyter Notebook
pythonの開発環境で使えます。メリットとしては、コードとメモが一緒に残せます。記法はmarkdownやhtml, latexなども使えて便利です。機械学習と切っても切れない数式を書くのも容易で使い勝手も抜群です。
githubでもjupyter notebookのファイルはちゃんと表示してくれるため大人気です。昔はIPython notebookと言われていたが、PythonだけでなくJulia(新進気鋭の科学計算向けプログラミング言語でJITコンパイルで非常に高速に動作するのが特徴。
速度はC並、書きやすさはPython並な言語)やR(データ解析や統計処理で非常に強い言語でPythonとシェアを争っている言語)などでも使えるようになったためJupyterと改名した。
Anaconda Python
科学計算向けのライブラリを一気にインストールできるPythonディストリビューション。
これだけ入れればすぐに開発ができるできる優れものです。Python言語自体といろんなライブラリがセットになったパッケージだと思えば分かりやすいかもしれません。Pythonを入れて開発環境を構築するよりも「Anaconda Python」を入れた方がすぐに開発できるという点ではやはり手軽さは捨てがたいです。
まとめ
いかがでしたでしょうか?ディープラーニングやニューラルネットワークなどの新しい技術を使えるライブラリも増えてきています。今回は現役エンジニアが実際に使えるライブラリをご紹介をさせていただきました。
どれも実用的なものばかりを5つ集めましたので、きっとあなたが使いやすいものが見つかるはずです。ぜひ一度使ってみて機械学習を体験してみるといいでしょう!