機械学習

AI開発に役立つPythonのライブラリを1から学びたい!

最近よく耳にする「機械学習」「AI人工知能」、これらをプログラミングするのに使われている「Python」。作ってみたい、学びたいという興味はあるのだけれど、何から勉強していけばよいか、実際にプログラミングをするのは難しそう、と思っていらっしゃるでしょう。

大丈夫です。Pythonには「ライブラリ」という便利なものが用意されており、機械学習、AIのプログラミングをしていく上での強い味方になってくれます。

この記事では、機械学習とライブラリの関係について述べていきます。

読み終わる頃には、どのライブラリを学んで行けばよいかがわかるようになります。

機械学習とは

まず、「機械学習」とはどのようなことなのでしょうか。

「機械学習」と合わせてよく耳にする「AI」という言葉との関係性と合わせてまずは理解を進めていきましょう。

AI

AIとは、人工知能(Artificial Intelligence: AI)と呼ばれる、人間の知的ふるまいの一部をコンピュータソフトウェアを用いて人工的に再現したものです。独自に学習を行い、膨大なデータの中からあらゆるパターンを選び、その結果を踏まえた上で自動処理をするようにプログラミングされています。

ドラえもん、映画ターミネーターに登場するT-800を想像されるかもしれませんが、これらは人間と同じように、あらゆる事象に対して考えてアクションを起こすことのできる「汎用型AI」とよばれるもので、機械学習と関連が強いAIは、限定された課題に特化して自動的に学習、処理を行う「特化型AI」と呼ばれるものになります。

画像認識、音声認識などの技術分野への研究が進められています。

2016年に囲碁AI「AlphaGo」が囲碁世界チャンピオンに勝利するなど話題となっています。

機械学習

機械学習は「ML(Machine Learning)」とも呼ばれる、AIを支える技術の1つであり、コンピュータが問題とその答えを使って学習し、データに潜むパターンを見つける技術です。

機械学習は予測、分類などが得意です。身近な例としては、迷惑メールの振り分けやクレジットカードの不正利用検知、商品のレコメンデーションなどに使われています。

機械学習にPythonのライブラリを活用するのが良い理由

ライブラリ

ライブラリとは、「図書館、資料室、書庫」などの意味を持つ英単語ですが、プログラミングの世界では便利な処理ができるプログラム郡を、みんなで利用できるようにまとめたものを指します。

「pythonのライブラリ」も同様の意味であり、作りたいプログラムの目的に応じたライブラリを用いることで、1から自分でプログラムを組むことなく、簡単にプログラムを設計、実行できることが最大のメリットとなります。

Pythonの特徴

Pythonは、ライブラリが豊富なことで有名なプログラミング言語です。Pythonに準備されているライブラリを用いることで、データ分析、数値の演算やゲーム、アプリの開発など幅広い用途でPythonを活用することができます。

また、機械学習に限りませんが、Pythonは「大量のデータを扱うコードでもシンプルでわかりやすく書ける」という特徴があります。

Pythonは大量のデータを扱うのに向いており、このことが機械学習にpythonが採用される最大の理由です。

多くの企業の業務システムの機械学習はpythonで開発されており、長年の歴史の中で蓄積されてきたライブラリが豊富にあります。ライブラリを活用することで、開発が格段に楽になります。

この記事では機械学習のプロセスを「データ前処理」「モデルの学習」の2つのステップに分けて、それぞれのプロセスにおいてよく使用されるライブラリを解説していきます。

機械学習の種類とPythonライブラリ

データ前処理とは

データの前処理とは、得られたデータを機械学習の入力とする前に、そのデータに何かしら手を加えることをいいます。用意した「生のデータ」を、機械学習プログラムが学習できる、あるいは学習しやすいように「きれいなデータ」に整える、といったようなイメージです。

なぜそのようなことが必要かというと、採取されたそのままのデータには、ノイズと呼ばれる無駄な情報や、入力間違いなどから生じるデータの欠損なども含まれている状態であるためです。

そのままの状態で機械学習の入力としてしまうと、学習する精度が低くなってしまったりそもそも誤った学習をしてしまい、目標とする機械学習が十分に達成できないという事になってしまうので、ノイズ部分を取り除いたり、欠損を適切な値で埋めるという作業を行います。

料理を作る前に、素材から固くて食べられない部分や、傷んでしまっている部分を取り除い

てから料理を始めることをイメージしていただけるとわかりやすいでしょう。

前処理に活用できるライブラリ:Numpy(ナンパイ)

Numpyは、数値演算を得意とするライブラリで、行列の演算、ベクトル計算といった線形代数の計算を得意にしています。Numpy自身は、Pythonは別のプログラミング言語である「C言語」によって実装されており、大量のデータであっても短時間で処理できることが特徴です。

前処理に活用できるライブラリ:Pandas(パンダス)

Pandasは、データの連結や分割をしたり、平均値や標準偏差の算出などの統計的な特徴をとらえたりすることを得意としています。想定外の範囲となっている値の処理といった、データクリーニングの段階で、威力を発揮するライブラリです。

前処理に活用できるライブラリ:Matplotlib(マットプロットリブ)

Matplotlibは、グラフ描画のためのライブラリです。複雑なデータも、グラフとして表示することで、傾向や偏りといった特徴を視覚的に把握できるようになります。

作成できるグラフの種類も多く、表示のカスタマイズ機能が大変充実しており、目的に応じた見やすいグラフを作成することができます。グラフのパターンはもちろん、色や文字色など細かなカスタマイズを行うことも可能です。

前処理の完了したデータを使って、実際にデータを学習させる「モデル学習」の過程に進みます。学習手法は大きく分けて

①教師あり学習

②教師なし学習

③強化学習

の3つに分類されます。

モデル学習の結果や算出された値の精度が低い場合は、状況に応じてデータの前処理からやり直すことになります。

・モデル学習:①教師あり学習

教師あり学習は、「正解となる情報」を与えた状態で学習させる手法です。正解となるデータを事前に学習させることで、入力データを判断して正解となる様に出力が行えるようになります。教師あり学習の代表的な問題が、回帰」と「分類です。

回帰」とは、連続する相関関係にある数値を予測するものです。

「天候、平均気温のデータ」と「お弁当の販売個数」の相関関係を学習し、そこから翌日のお弁当の販売個数を予測する、といったものが該当します。過去のデータを主に数値として学習することで、過去の実績に基づいた未来の予測ができるようになります。

分類」は、与えられた正解データに基づいて「正しいデータ」と「正しくないデータ」に振り分けて出力するものです。

例えば、受信したメールが迷惑メールやスパムメールであるか否かを判断することができます。あらかじめ迷惑メール、スパムメールのパターンを学習しているため、受信したメールがパターンに該当するかを判定して分類できるようになります。

その他、人と犬と猫が一緒に写っている写真を「人」「犬」「猫」に分類して、自動的にグループ分けするといった事もできます。分類するための「特徴」を学習することが特徴です。

・モデル学習:②教師なし学習

教師なし学習は、正解を与えずに学習させる方法です。

大量のデータを入力として学習させることで、その中からデータの特徴やパターンなどを発見しながら学習していき、それが正解であるか否かを「判断すること」を覚えることが特徴だといえるでしょう。

データの特徴や、データ構造の類似している部分を抽出、パターン化して仕分け、データをグループ分けすることを行います。

活用例として、顧客情報をグループ分けし、同じグループ内で同じ商品が複数回購入された場合、同じグループに所属している人に対しても商品をレコメンドする、といった活用に結びつきます。

・モデル学習:③強化学習

強化学習とは、教師なし学習と同様に正解の判断ではなく、出力される結果に点数(スコア)をつけて、いかに最大スコアを獲得するかを判断しながら学習していく手法です。将棋・囲碁といったゲームAIが打ち手を学習する際や、迷路を迷わず最短時間でゴールするか、などをイメージすると分かりやすいでしょう。自動車の自動運転における、道路や交通状況の判断学習に活用されています。

教師なし学習との最大の違いは、報酬を得るための最適な行動を、機械自身が考え実行するということです。

モデル学習に活用できるライブラリ:scikit-learn(サイキット・ラーン)

scikit-learnは、機械学習ライブラリの中でも多く使われており、大抵の機械学習の方法(統計学、パターン認識、データ解析の技法など)はこのライブラリに収録されています。

また、例えば訓練データとテストデータをランダムに分割する機能など、機械学習のプロセスに必要となるツールが全般的に実装されており、特にデータ数が少ない場合は、scikit-learnでデータ分析するメリットは大きいです。

データ前処理でも紹介した「Numpy」や「Matplotlib」との相性が良いことも特徴です。

 

まとめ

これまでで紹介した以外にも、pythonにはたくさんのライブラリが用意されています。

ですが、機械学習の勉強を始めるにあたって、前処理の段階としては、NumpyとPandas、Matplotlibの3つのセットを学習すると良いでしょう。この3つは主要な参考書や解説サイトでもセットで扱われています。

モデル学習ライブラリはscikitーlearnを学習することで、大抵の機械学習の方法を扱うことができるようになります。学習教材にも力を入れており、公式HPのチュートリアルは初心者向けの機械学習教材として高く評価されています。

NumpyとPandas、Matplotlibとの相性も良いので、データ前処理〜モデル学習 と一連の機械学習の流れをpythonでプログラミングできるようになります。

pythonのライブラリを活用して、ぜひ、機械学習の世界にチャレンジしてください。