最終更新日:
プログラミングにおける「ライブラリ」とは、汎用性の高い一連の処理を誰でも簡単に利用できるようにしたプログラムのことです。
自分の目的に応じたライブラリを用いることで、一から自分でプログラムを組むことなく、簡単にプログラムを設計、実行できます。
特にプロセスが複雑な機械学習においては、さまざまなライブラリが開発され、広く重宝されています。
この記事では、機械学習分野で代表的なプログラミング言語であるPythonのライブラリを取り上げながら、機械学習におけるライブラリにはどのような種類があるのかについて詳しく紹介していきます。
【この記事でわかること】※クリックすると見出しにジャンプします |
目次
Pythonのライブラリとは
Pythonは、ライブラリが豊富なことで有名なプログラミング言語です。この記事では、機械学習に関連するライブラリのみを紹介することになりますが、Pythonには幅広い分野のライブラリが用意されています。
このような豊富なライブラリを用いることで、数値計算やデータ分析、ゲームやアプリの開発など幅広い用途でPythonを活用できます。
この記事では機械学習のプロセスを「前処理」と「モデルの学習」に大別し、そのプロセスにおいてよく用いられるライブラリを解説していきます。
前処理の段階
データ処理は、AIを用いてデータ分析をする前にそのデータを調査・整形するプロセスです。
「AIをつくる」というイメージからは少しかけ離れたプロセスですが、AIはあくまで分析ツールなので、分析以前のデータ処理は人の手によって行われます。
そのため、データ処理はAI開発者の技量や個性の出るところであり、このプロセスにかなりの時間が注がれることになります。
モデルに学習させる
次に、データを学習させる過程です。その手法は大きく分けて「教師あり学習」「教師なし学習」「強化学習」の3つに大別されます。
また、ニューラルネットワークという仕組みを多層構造で用いる手法は「ディープラーニング(深層学習)」と呼ばれます。
結果の精度が悪い場合は、状況に応じてデータの前処理をやり直すことになります。
数値データの前処理のためのライブラリ
前処理では、データをクリーニングや連結、変形して分析に適した状態にしたのちに、そのデータ固有の性質を捉え、場合によっては変数を操作します。
細かなプロセスはデータや目的によって異なります。そのため、数値データに対しては異常値を検出したり、統計的な特徴を計算する必要があるでしょう。
データをグラフに可視化して、客観的にデータの特徴をとらえやすくすることも大切です。また、特に画像・音声処理や自然言語処理では固有の前処理が必要になります。
Numpy
Numpyは、数値計算のためのライブラリで、ベクトルや行列の演算といった数値処理を得意にしています。
Numpyの中身は、C言語(やFortnanといったより機械語に近い言語)によって実装されているため、大量のデータであっても短時間で処理することが可能です。
Pythonにもデフォルトの機能として「リスト」という多次元配列を表現するための概念が実装されていますが、複雑な計算は内部的に煩雑な処理を必要とします。
一方、Numpyはそのような複雑な計算も用意かつ高速に処理できます。
Scipy
Scipyはもう一つの代表的な数値計算ライブラリで、Numpyと比べると巨大な構造をしており、機能・用途別のサブパッケージに分かれています。
そのため、Numpyでできること以上のことをScipyで行うことができます。
Pandas
Pandasでは、データを連結・分割したり、データの平均や標準偏差などの統計的特徴を捉えたりすることに向いており、外れ値の処理といったクリーニングの段階で、よく用いられるライブラリです。
また、Pandasはテーブルデータを見やすく表示できます。
Matplotlib
Matplotlibは、グラフ描画ライブラリです。複雑なデータも、グラフに描出することによって傾向や偏り、特徴を把握できるようになります。グラフの種類や表示のカスタマイズ機能の充実ぶりは圧巻です。
また、Matplotlibを用いることで、見やすいグラフを作成することができます。グラフの図形はもちろん、色や文字など細かなカスタマイズを行うことも可能です。
Seaborn
Seabornは、代表的なデータ可視化ライブラリであり、機能的にはMatplotlibに類似しています。洗練されたグラフを少ないコード数で作成可能です。
scikit-learn
scikit-learnの詳細な説明は、下のモデルの学習の項目で行いますが、ここでは前処理の段階でscikit-learnを用いる場合について紹介します。
scikit-learnでは複雑な前処理を一括で行う関数が多数用意されており、データの標準化や正則化などテクニカルな処理を簡単に行うことが可能です。
画像処理の前処理のためのライブラリ
画像処理を行う際に便利なライブラリはOpenCVとpillowです。Intelの開発したOpenCVは、画像処理分野の伝統あるオープンソースライブラリです。
ファイルの変換や変形だけでなく、物体認識や顔認識など、AIを用いて画像処理をする際に便利な機能が豊富に搭載されています。
OpenCV
OpenCVはIntelが開発した画像処理を行うためのライブラリです。
OpenCVを用いればプログラミング上級者でなくとも顔検出などができます。
主な機能としては以下のようなものがあります。
- 画像の入出力(カメラやファイルから画像を取り込める)
- 画像の前処理
- 画像の特徴量やオブジェクトの検出
- 描画
- 機械学習
OpenCVは行列計算が苦手なため行列計算用ライブラリnumpyと合わせて使用されることが多いです。
pillow
pillowもOpenCV同様に画像処理を行うためのライブラリです。Python Image Library(通称PIL)から派生したもので、OpenCVよりも簡単に扱うことができます。
主な機能には以下のようなものがあります。
- 画像の入出力
- 画像の処理(ネガポジ反転など)
- 描画
- 画像の結合、合成
OpenCVに比べて高度な処理はできないものの、より初心者向けのライブラリです。
自然言語処理のためのライブラリ
自然言語処理とは、自然言語、つまり私たちが日常的に使っている言葉をコンピュータで扱う技術のことです。
コンピュータは形式言語(自然言語と対になる概念、例えばプログラミング言語)によって設計・運用されていますが、自然言語処理のために作られたライブラリを用いることで、コンピュータで自然言語の「意味」や「関係」を処理することができます。
gensim
gensimは「トピックモデル」という自然言語処理用の技術を実装したライブラリです。
「トピック」とは、言語学の分野でよく「主題」や「話題」と訳されます。トピックモデルは、ある文書がどのトピックに属するのかを判別したり、トピックごとによく出現する単語を扱うことができます。
gensimは、word2vecという自然言語処理用のモデルとともによく用いられます。word2vecは、「意味ベクトル」という概念を導入することで自然言語の意味や関係を数学的に処理できるようにした画期的な技術です。
▼Word2vecについて詳しくはこちら
モデルの学習のためのライブラリ
これまで、主に前処理の段階で活躍するライブラリについて紹介してきました。次に、実際にモデルを学習学習する際によく用いられるライブラリを見ていきましょう。
本記事では、モデルの学習学習の技術のうち、少し特別な技術を要する強化学習・ディープラーニングの2つを基本的な機械学習と分けて紹介します。
機械学習のライブラリ
機械学習ライブラリには、さまざまな機械学習のアルゴリズムが実装されています。分析の目的やデータの特徴に応じて、アルゴリズムを使い分けます。機械学習でよく利用されるのはscikit-learnというライブラリです。
scikit-learn
scikit-learnは、機械学習ライブラリのなかで最も有名なものではないでしょうか。大抵の機械学習の方法はこのライブラリに収録されています。
また、例えば訓練データとテストデータをランダムに分割する「テクニックやモデルの学習結果の評価指標」など、機械学習のプロセス全般に必要なツールが実装されています。
他の特徴として、pythonの数値計算ライブラリであるNumpyやScipyとの相性がいいことが挙げられます。他にも複数のライブラリとの互換性があるため、scikit-learnを用いることでより直感的な機械学習の設計・運用が可能です。
scikit-learnは学習教材にも力を入れており、公式チュートリアルは初心者向けの機械学習教材として評価されています。
ディープラーニングのためのライブラリ
機械学習の手法のうち、ニューラルネットワークという神経回路を模したモデルを多層に重ね合わせたものを用いる手法のことをディープラーニングと言います。
代表的なディープラーニングに特化したライブラリは、Googleの開発したTensorFlowとFacebook主導で開発したPytorchの2つがあります。
▼両者の性能比較について詳しくはこちら
TensorFlow
TensorFlowは、2015年に公開されたオープンソースのディープラーニング・フレームワークで、2017年に正式版がリリースされました。主要なOSや複数のプログラミング言語に対応しており、汎用性の高さが強みです。
また、TensorFlowは利用者が多いのが特徴で、書籍やネット上の記事など学習教材が豊富に揃っています。そのため、はじめてディープラーニングを触ってみたいという人におすすめのライブラリです。
Pytorch
Pytorchは、2016年に公開されたオープンソースのディープラーニング・フレームワークです。一般の普及率ではTensorFlowに劣りますが、コードの作成やモデルの操作が直感的で分かりやすいと評判が高く、主に研究の分野で人気が高まっています。
強化学習のためのライブラリ
自動運転やゲームのAIなどで使われている「強化学習」に特化したライブラリの例として、DopamineとPFRLを紹介します。
Dopamine
DopamineはGoogleが開発した教科学習のためのライブラリです。機械学習のライブラリTensorFlowを元にしており、初心者でも使いやすいライブラリを目指しています。
Dopamineには以下のような特徴があります。
- ベンチマークテストを実行しやすい
- 新規アイデアを試しやすい
- 実績のある少数のアルゴリズムで実装されている
- 再現性が高い。
PFRL
PFRLは株式会社Preferred Networksが開発した強化学習ライブラリです。
PFRLはChainerによる層強化学習ライブラリ「ChainerRL」の後継で、深層学習のライブラリであるPytorchでも利用できます。
PFRLを利用すれば、代表的な強化学習のアルゴリズムを共通のインターフェースで利用できるため、複数のアルゴリズムを比較したり、組み合わせたりできます。
初心者におすすめの機械学習ライブラリ
これまで、主要な機械学習ライブラリを網羅的に紹介してきました。ここからは、機械学習のPythonライブラリを使ったことのない人が、まず何のライブラリから勉強していけばいいのか、またその学習方法について紹介します。
前処理の段階としては、NumpyとPandas、Matplotlibの3つのセットを学習すると良いでしょう。この3つは主要な解説書でもセットで扱われています。
ただし、数値計算ライブラリのおすすめとして、Numpyの代わりにScipyが挙げられることがあります。
たしかにScipyはNumpyに比べて機能が豊富なのですが、その分逆にNumpyにには操作がシンプルあるというメリットがあるので、特にはじめて数値計算ライブラリに触れる人はNumpyを勉強すると分かりやすいでしょう。
機械学習ライブラリはscikit-learn、ディープラーニング用のライブラリはTensorFlowをまず学習するのがおすすめです。
この2つは非常に多くの人が実際に使っているため、ライブラリに関連した情報や学習教材が豊富です。加えて、Jupyter NotebookやGoogle Colaboratoryなどの機械学習向けに普及している開発環境とも相性が良いというメリットもあります。
初心者におすすめのpython環境
Jupyter Notebook
Jupyter Notebookは、特にデータ分析の分野でよく用いられている環境です。Anacondaというプラットフォームにパッケージとして含まれています。
最大の特徴は、一行ずつプログラムを実行し、動作を確認しながらコードを編集できる点です。そのため、多くの書籍や教材がJupyter Notebookの使用を推奨しています。
Google Colaboratory
Google Colaboratoryは、ディープラーニングの分野でよく用いられる開発環境です。
ビッグデータと呼ばれる巨大なデータ群を扱うディープラーニングは、その実行に膨大な計算処理が必要です。しかし大抵の場合、一般に普及しているパソコンの能力ではとても処理できません。
一方、Google Colaboratoryは、Googleの所有しているGPU(計算能力がより高いプロセッサ)に無償でアクセスできるため、誰でも手軽にディープラーニングのプログラムを実行できます。
また、Google ColaboratoryはJupyter Notebookをベースにしているため、操作感はほぼ同じで使いやすいです。
まとめ
この記事では、機械学習で良く用いられるライブラリについて紹介してきました。
Pythonのライブラリはどれも操作が直感的で分かりやすいことが特徴です。
特にはじめて機械学習をやってみたいという人には、Pythonの基本文法を学んだ後に各種ライブラリについて触れてみることをおすすめします。
もちろん、Pythonのライブラリは機械学習分野だけに限られていません。機械学習とWebアプリケーション開発など、さまざまな分野のライブラリと組み合わせることができるのも、Pythonライブラリをおすすめする大きな理由の1つです。