目次
はじめに
このページでは,Python を用いて機械学習(とそのための各種の数値計算)を行う際に,基盤となる主要ライブラリを,カテゴリー別にリスト化する.
※ Deep Learning 向けに特化したライブラリは,以下のページにて別途まとめている:
数値計算・科学計算
- Numpy (Wikipedia(JA)):多次元配列による効率的な数値計算を,Matlabライクな操作により実行できる.画像データ配列やテンソルが,Numpy配列を使っていることが標準的であり,このページの多くのPython ライブラリがNumpyに依存している.
- Scipy (Wikipedia(JA)): Numpyを基盤に,各種の基本的な数値計算を行う.
- Pandas (wikipedia(JA)):テーブル型のデータ構造 (DataFrame) を用いて,データ解析における「データの集計と加工」を行う.
機械学習,およびその大規模分散環境での実行
- scikit-learn (wikipedia(JA)):Deep Learning以前の機械学習モデルが,幅広く網羅的に収録されている定番ライブラリ.
- Apache Spark の MLib (wikipedia(JA)): 大規模分散データ解析環境.Python以外に,RやJava/Scalaからも使える.
可視化ライブラリ
- 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インターフェース:C++が開発言語であるので,OpenCVのコア機能を提供する「Mainモジュール」群の中でも,一部C++からしか使用できないクラスもある.いずれにせよ公式ドキュメンテーションで,使用したいクラスには対応するPythonインターフェースも提供されているかどうかを,確認する必要がある.
関連記事: OpenCV :コンピュータビジョン向けライブラリ
自然言語処理
NLPの処理全般
- NLTK (wikipedia) : 古くは研究者向けに決定版であった,NLP用のPythonライブラリ.
- spaCy (Wikipedia(JA)): アカデミック・教育向けであったNLTKに対して,2015年に実運用をターゲットとした「製品用」ライブラリとして登場した.初期のspaCyの利点は,ニューラルネットや統計モデルへの対応で,学習済みのword2vecやその他の統計的モデルも提供されているところ等にあった.ただ,現在のver.3 系では時代的に,すっかりTransformerと BERT が主役のライブラリとなってきている.
日本語形態素解析(日本語トークナイザ)
- MeCab (和布蕪):オープンソースの日本語向け形態素解析エンジン(トークナイザ).C/C++/Fortran で実装されているが,ruby/perl/pythonなど,多数のスクリプト言語にバインドされている.
- Mecab-NEologd: mecabにWeb上の様々なKnowledgeベースから新語を追加できる辞書を追加しているトークナイザ.辞書に追加される新語や,固有表現などの情報抽出(Information retrieval)目的に有利.
- SentencePiece: 日本語や中国語のような.前処理にトークナイザ必要な言語においても,トークナイザによる前処理を不要にする「生成文から直接サブワード分割を学習する」手法で学習された,サブワード単位のトークナイザである(作者の工藤拓氏による解説記事).BERTなどの一般化言語モデルや,Transformersによる変換タスク(音声認識など)での言語モデルにおいて,サブワード分割によく使われる.以前は言語ごとに複雑なルールを用いた処理であった,『トークン化の逆処理(著者の工藤氏は「脱トークン化」とよぶ)』も自動化できていることも大きい.
- JUMAN++: RNNLMを用いたトークナイザ.JUMANの辞書などを引き継いでいるので,意味処理系に強い分割を実現できる.