Python 用の機械学習向けソフトウェア一覧

はじめに

このページでは,Python を用いて機械学習(とそのための各種の数値計算)を行う際に,基盤となる主要ライブラリを,カテゴリー別にリスト化する.

※ Deep Learning 向けに特化したライブラリは,以下のページにて別途まとめている:

数値計算・科学計算

  • Numpy (Wikipedia(JA)):多次元配列による効率的な数値計算を,Matlabライクな操作により実行できる.画像データ配列やテンソルが,Numpy配列を使っていることが標準的であり,このページの多くのPython ライブラリがNumpyに依存している.
  • Scipy (Wikipedia(JA)): Numpyを基盤に,各種の基本的な数値計算を行う.
  • Pandas (wikipedia(JA)):テーブル型のデータ構造 (DataFrame) を用いて,データ解析における「データの集計と加工」を行う.

機械学習,およびその大規模分散環境での実行

  • scikit-learn (wikipedia(JA)):Deep Learning以前の機械学習モデルが,幅広く網羅的に収録されている定番ライブラリ.

可視化ライブラリ

  • Matplotlib (wikipedia(JA)):Pythonから,GNUplotライクなインターフェースで各種グラフのプロットが可能.Matlab に似たステートフルAPI ライクな対話的な関数群でも操作できる一方,Figure やAxisを細かく生成して設定変更するオブジェクト思考的なスタイルでも使用可能. (参考;matplotlibにおける2つのグラフ作成スタイル【Python】)
  • seaborn : matplotlibベースの可視化ライブラリで,基本的な機能しか提供していないmatplotlibに,ハイレベルでリッチな可視化を加えて補完できる.
  • ParaView (wikipedia(JA)) : VTK上に構築された,主に流体シミュレーション向けの,大規模データの可視化環境.(C/ C++,Fortran ,Pythonから使える)

インタラクティブ計算環境,IDE, ノートブック

  • IPython (IPython - wikipedia(JA)): Pythonのシェル環境を,科学計算向けに便利になるように強化したシェル環境.タブ補完やリッチメディア(画像やmatplotlibのグラフのシェル上表示)に,型推論の強化,OSのコマンドラインシェルが使用可能など,Pythonの標準シェルよりかなり便利である.また,計算機クラスタ上での並列コンピューティングが実施でき,大規模数値科学計算のプロトタイピングにも向いている.
  • Jupyter (wikipedia(JA)):
    • Jupyter Notebook:Wolfram (Mathematica)「Notebook」ライクな「Webノート形式のIPython」を,作成・実行・保存・共有できる.旧称は「IPython Notebook」であったが,Python以外の複数プログラミング言語に対応して以降,Jupyterと名称が変更にあれた.GithubやGoogle Colabにも組み込まれるなど,現在の標準的なノートブック型インタラクティブ開発環境である.
    • Jupyter Lab: Jupyter Notebookの後継の,IDE 的にバージョンアップされた次世代インターフェース.名前中の「Lab」から容易に予測できるように,かつてのMatlabライクにWebブラウザ上で科学計算向けのIDE環境 (Laboratory向けソフトウェア)を無償で提供することを狙っている.
  • Spyder (wikipedia(JA)): インストール型の,MatlabライクなインターフェースのIDE環境.IPythoが統合されており,IPythonをシェルとして使用して,Pythonのプロジェクトのプログラミングがデバッガー付きで行える.また,Variable Explorerウィンドウでは,Numpyの配列やPandasのデータ構造(DataFrame, Series)を表示してオブジェクトの中身の要素の値を閲覧できるので,行列・テンソル・データフレームの中身をデバッグしたい際にも便利 .そもそも,Matlabなどの旧来からの商用ソフトウェアや,RStudioに画面構成が似ているので,データ分析やインタラクティブな実行や,コードのデバッグを効率的に行いやすい.

画像処理・コンピュータビジョン

関連ページ:コンピュータビジョン・ロボットビジョン向けのライブラリ一覧 (Python以外のライブラリもリスト化しているページ)

  • scikit-image (wikipedia): scikitのライブラリの1つで,基本的な画像処理を網羅している画像処理ライブラリ.
  • OpenCV-Python バインディング
    • OpenCVのPythonラッパー.バインディングという自動生成機能で,C++のクラス・関数群を自動的にPython化して生成してつくられている(詳しくは以下の記事で)

自然言語処理

NLPの処理全般 (non-deepなもの)

  • NLTK (wikipedia) : non-deep learning時代の自然言語処理で,英語圏の研究社には決定版であった定番NLPライブラリ.
  • Spacy (Wikipedia(JA))::アカデミック発・教育向けの色が濃かったNLTK等に対して,商用・実運用をターゲットとした「製品用」ライブラリとして2015年に登場した.初期のspaCyの利点は,ニューラルネットや統計モデルへの対応で,word2vecやその他の統計的モデルも提供されているところ等にあった.ただ,現在のver.3 系では時代的に,すっかりTransformerと BERT が主役のライブラリとなっている.
  • Gensim: non-deep 時代のもので,かつて2010年代に流行したLDA (潜在意味解析)や洗剤ベクトル空間化(word2vec/doc2vecなど)の「教師なし学習系 NLP」に強いライブラリで,それらの用途でよく使われた.

日本語形態素解析(日本語トークナイザ)

  • MeCab (和布蕪):オープンソースの日本語向け形態素解析エンジン(トークナイザ).C/C++/Fortran で実装されているが,ruby/perl/pythonなど,多数のスクリプト言語にバインドされている.
  • Mecab-NEologd: mecabにWeb上の様々なKnowledgeベースから新語を追加できる辞書を追加しているトークナイザ.辞書に追加される新語や,固有表現などの情報抽出(Information retrieval)目的に有利.
  • SentencePiece: 日本語や中国語のような.前処理にトークナイザ必要な言語においても,トークナイザによる前処理を不要にする「生成文から直接サブワード分割を学習する」手法で学習された,サブワード単位のトークナイザである(作者の工藤拓氏による解説記事).BERTなどの一般化言語モデルや,Transformersによる変換タスク(音声認識など)での言語モデルにおいて,サブワード分割によく使われる.以前は言語ごとに複雑なルールを用いた処理であった,『トークン化の逆処理(著者の工藤氏は「脱トークン化」とよぶ)』も自動化できていることも大きい.
  • JUMAN++: RNNLMを用いたトークナイザ.JUMANの辞書などを引き継いでいるので,意味処理系に強い分割を実現できる.