対象読者
- Pythonの基本的な文法を理解しておりデータ解析のスキルアップに取り組みたい方
サンプルの動作確認環境
- MacOS 10.13
- Anaconda 5.1
- Python 3.6
- Jupyter Notebook 5.4
機械学習の概要
本稿では、実際にPythonでの機械学習に入る前に、機械学習自体について簡単に触れます。
機械学習とは
機械学習とは、学問としてはコンピューターサイエンス(情報工学)の分野で主に研究される技術です。人間の学習と同じことをコンピューターで機能として実現しようとするものです。そのため人工知能(AI)の研究の1分野でもあります。データから学習し、予測や分類を行う機械学習モデルを作ることが目的になります。
統計と機械学習の関係
前回記事で統計を取り上げました。統計と機械学習はデータ解析やデータサイエンスの関連分野でよく見かけると思います。これら2つの技術は、お互いにどういった関係になっているのでしょうか。書籍やWeb記事での説明も多くありますが、いまひとつ分からない方も多いかと思います。以下は筆者なりの認識を記述しておきたいと思います。
統計と機械学習はともにデータ解析における課題を解決する手法です。手法のプロセスが違いますが、両方の分野で使われる手法やモデルも数多くあります。つまりお互いに排他的な技術分野ではありません。
機械学習と反対の技術は「ルールベース」です。ルールベースは事前に人間がルールを決め、機械(コンピューターなど)はそのルールに従って処理をします。例えば郵便番号は数字ごとに住所がルールとしてきっちり決まっています。機械でこれを処理する際はルール通りに振り分けるだけです。
機械学習はルールにあたるパラメータ(しきい値、関数の係数など)をデータを材料にして自ら動的に変更します。例えば手書き文字認識の分野では、人間の手書き文字画像と正解をデータとして学習します。データに基づいて自らパラメータを変更し、結果として画像データから文字を識別できるモデルになります。
一方、統計の最大の特徴としては標本(サンプル)を用いる点にあります。数値の処理により、全体の一部から全体を予測する技術が統計です。この反対にあたる概念は「ビッグデータ」になるでしょうか。
ビッグデータは定義としては単に大きなデータのことです。1台のコンピューターで処理できない量、従来のリレーショナルデータベースで処理できない量(例えばテラバイト・ペタバイトくらい)のデータのことを指す場合が多いです。
ビッグデータを扱うことの本質は全量データを扱えることにあります。ロングテールと言う言葉をご存じの方も多いでしょう。例えばAmazonは売り上げが上位の商品だけでなく、ロングテールと呼ばれる下位の商品も”すべて”取り扱うことにより大きな価値を生み出しました。Googleも”すべて”のWebサイトを整理することで検索の価値を高めました。
このビッグデータ処理に相性がいいのが機械学習です。量が多いと人間にとっては大変な処理ですが、機械では(コンピューターリソースさえ用意すれば)わけないことです。また機械学習では一般にデータが多ければ多いほど学習の精度が高まります。例えばGoogleは検索や動画サービスなどで入手した大量のデータを活用して精度の高いAIを作っています。
また、統計はデータに潜む特徴や法則を(関数など数式として)見いだそうという(科学的な)技術と言えます。一方、機械学習はAIなど予測や分類を仕事として人間の代わりに働くものを作ろうという(工学的な)技術と言えるでしょう。
それぞれ発展の歴史や目的に違いがあります。これらを理解しておいて、目的にあわせて技術や用語を使い分けていただければと思います。
機械学習ライブラリscikit-learnについて
Pythonでは機械学習の定番ライブラリとしてscikit-learnがあります。機械学習ではアルゴリズムとして時には複雑なプログラムを組む必要がありますが、scikit-learnはこれをライブラリとして提供してくれます。今回の記事ではこのscikit-learnを活用していきます。