検索
連載

Pythonで機械学習/Deep Learningを始めるなら知っておきたいライブラリ/ツール7選Pythonで始める機械学習入門(1)

最近流行の機械学習/Deep Learningを試してみたいという人のために、Pythonを使った機械学習について主要なライブラリ/ツールの使い方を中心に解説する連載。初回は、筆者が実業務で有用としているライブラリ/ツールを7つ紹介します。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

 プログラミング言語「Python」は機械学習の分野で広く使われており、最近の機械学習/Deep Learningの流行により使う人が増えているかと思います。一方で、「機械学習に興味を持ったので自分でも試してみたいけど、どこから手を付けていいのか」という話もよく聞きます。本連載「Pythonで始める機械学習入門」では、そのような人をターゲットに、Pythonを使った機械学習について主要なライブラリ/ツールの使い方を中心に解説していきます。

 連載第1回は、ライブラリ/ツール群の概要説明からです。各ライブラリ/ツールの詳細な使い方や実用上のテクニックは連載第2回以降で解説していきます。ここで挙げるライブラリ/ツール群は「普段、筆者が仕事で使っているもの」という基準で選定されています。そういう意味で全く網羅的ではなく、独断と偏見であることを自覚していますので、ご了承ください。

 連載初回である本稿ではソースコードは扱いませんが、今後の連載で出てくるソースコードにおけるPythonのバージョンについては3.x系を前提にします。といっても、扱うものが機械学習と数学的対象に限定されるので2.x系への移植は容易かと思います。また、Pythonの言語仕様についてはすでに理解しているものとして話を進めていきます。言語仕様について知りたい方は、下記記事を参照してください。

数値計算の基本になるライブラリ「Numpy/Scipy」

 Numpy/Scipyは数値計算の基本になるライブラリです。以下に説明するScikit-learnやTensorFlowなどのライブラリもNumpy/Scipyを使って作られています。

 Numpyは配列とベクトル・行列の計算を提供している点が重要です。その他にも線形代数や数学関数など、数値計算の基盤となる機能を提供しています。

 Scipyは、Numpyよりは少し高レベルの、しかし科学技術計算では共通して必要になる機能を提供しています。Scipyは、疎行列とその演算、積分、補間、統計処理、フーリエ変換、信号処理、数値最適化などの機能を提供しています。

 NumpyとScipyは別のライブラリですが、科学技術計算を行うときには両方とも必要になることが多く、機械学習関連のライブラリもほとんどは両方に依存して作られています。以下、あまりその境界を考えずに、「Numpy/Scipy」とまとめて書くことにします。

 後述するScikit-learnのような既製のライブラリを使って機械学習をする場合、Numpy/Scipyを使った複雑な数値計算のスキルは必ずしも必要ありませんが、ライブラリに入力するためのデータ形式がNumpy/Scipyによるものなので、最低限の操作方法は知っておく必要があります。

散布図、グラフ、ヒストグラムなどを描くためのライブラリ「Matplotlib」

 Matplotlibはグラフ描画のためのライブラリです。散布図、折れ線グラフ、棒グラフ、ヒストグラム、円グラフなどを描く機能があります。3次元のグラフを描くこともできます。また、グラフにさまざまな視覚効果を付けることができます。

 Matplotlibで何ができるかについては、文章で説明するよりも、Matplotlib公式サイト内にあるギャラリーを見れば一目瞭然かと思います。また、後述するJupyter Notebookと組み合わせると視覚的なプレゼンテーションが可能です。

 図を描くという行為そのものは、機械学習のタスクとは直接関係ありませんが、グラフを使ってデータを可視化することで機械学習アルゴリズムのチューニングのヒントが得られることがよくあります。また、分析結果のプレゼンテーションにも便利です。そのことから、機械学習をやる上でMatplotlibの使い方をある程度知っておく価値はあると考えます。

実行結果を確認しながら実行できるWebエディタ「Jupyter Notebook」

 Jupyter Notebookは、実行結果を可視化して確認しながらプログラムを実行できる環境です。かつては「IPython Notebook」と呼ばれていましたが、Python以外の言語にも対応して今の呼び名になっています。

 Jupyter Notebookを起動すると、Webブラウザからアクセス可能なサーバを起動します。Webブラウザを通して、Pythonのコードが実行可能な視覚的で直感的なAPIを提供します。インタラクティブに試行を繰り返しながらコードを試すのに適しています。そのように試行錯誤した結果を保存して再利用することも簡単にできます。Markdown形式で整形されたドキュメントを挿入することも可能なので、ドキュメントとコード片を混ぜたプレゼンテーションをするのにも適しています。

 Jupyter Notebookを気軽に試してみるには、本家サイトでデモ用のサーバが公開されていて、コード(ノートブック)のサンプルも(Python以外にも)いくつか用意されています。こちらを参照してください。

大規模データ処理を高速に行えるライブラリ「Pandas」

 Pandasは大規模データ処理用のライブラリです。機械学習の処理に利用する場合には、主にデータの前処理に威力を発揮します。いくつかの典型的なデータフォーマットを高速に読み込むことができ、その後のデータ加工も高速にできます。

 Pandasは基本データ型として「Series」「DataFrame」という型を持ち、これらの仕様が特徴的です。SeriesとDataFrameはそれぞれ1次元配列と2次元配列に対応しますが、両方ともインデックスが付けられていて、インデックスによる高速なアクセスが可能です。また、DataFrameはSQLのような処理ができ、高速なGroup-byエンジンと集合関数が利用できます。

Pythonの標準的な機械学習ライブラリ「Scikit-learn」

 Scikit-learnはPythonの標準的な機械学習ライブラリです。機械学習のアルゴリズムで主要なものが実装されています。分類、回帰、クラスタリングなどさまざまなタスクについてのアルゴリズムが提供されており、また、ハイパーパラメータのグリッドサーチ、交差検定などの評価時に便利な道具も提供されています。

 また、さまざまなアルゴリズムについて一貫的なインタフェースを提供しているのが特徴的です。アルゴリズムを後で変更してみたいという状況でも対応しやすくなっています。この一貫したインタフェースは、Scikit-learn以外の機械学習ライブラリでも、お手本として使われていることがあります。

 Scikit-learnのドキュメントには、ただAPIの使い方だけではなく機械学習のアルゴリズムの仕組みなどの説明があり、機械学習の勉強のための補助教材としても優れていると思います。

トピックモデルに特化している自然言語処理のライブラリ「Gensim」

 Gensimは自然言語処理のライブラリです。テキスト処理のツールが提供されており、TF-IDF(Term Frequency-Inverse Document Frequency)、LSA(Latent Semantic Analysis)、LDA(Linear Discriminant Analysis)、word2vecなどの典型的なアルゴリズムも提供されています。

 自然言語処理のライブラリとしては、他に「NLTK(Natural Language ToolKit)」が有名ですが、NLTKがより一般的なAPIなのに対して、Gensimはトピックモデルに特化しているのが特徴的で、文書の分類などをするのに便利です。本連載では後の回でGensimの使用例を示そうと思います。

グーグルが開発したDeep Learning用エンジン/ライブラリ「TensorFlow」

 TensorFlowはグーグルが開発したニューラルネットワーク(Deep Learning)用エンジンです。活用するには、TensorFlowを使った計算の流れを表すグラフを定義し、それから計算を実行する流れになります。実行時にCPUで動かすかGPUで動かすかを選択できます。あらかじめネットワーク構造がコンパイルされてから動くので高速です。

 Pythonで使えるDeep Learning用のライブラリは、他にもいろいろとありますが本連載ではTensorFlowを選ぶことにしました。理由としては、汎用性が高いことと、ドキュメント、特に実例が充実していることが挙げられます。実際TensorFlowの公式ドキュメントには、画像認識やword2vecなどの典型的な例が、アルゴリズムの詳細とともに解説されています。

次回以降で具体的な使用例を

 以上、普段筆者が仕事で使っているライブラリを紹介してきました。今回は全体を概観するという意図で表面だけをなぞりましたが、次回以降で具体的な使用例とともに詳細を解説していきます。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る