新しい IBM Developer JP サイトへようこそ!サイトのデザインが一新され、旧 developerWorks のコンテンツも統合されました。 詳細はこちら

機械学習入門

このチュートリアルは開発者向けのラーニング・パス「機械学習を始める」を構成するコンテンツです。

はじめに

機械学習という科学分野では、値を予測することを目的に、アルゴリズムを適用してシステムにデータ内のパターンを学習させます。十分な量のデータを使用すると、すべての入力変数と予測される値との間に関係が確立されます。さらに他の入力変数を与えることで、システムが新しい値を予測しやすくなります。この手法は、従来のプログラミングとは異なります。つまり、あらかじめ設定されたルールに基づいてアプリケーションを開発するのではありません。機械学習の基本概念が生まれたのは最近のことではありませんが、正確な予測を可能にする 2 つの鍵である、最新のプロセッサーと大量のデータが使用できるようになったことから、最近になってこの分野の勢いが増してきました。機械学習の歴史に関するコンテンツはすでに十分に出回っているため、この記事では歴史については触れません。歴史を語るのではなく、実践的な手法をとって、皆さんが機械学習を開始するために必要な概念を身に着けられるようにします。

この記事では次の概念について説明します。

  • 機械学習の基礎
  • 教師あり学習と教師なし学習
  • モデルの作成
  • 機械学習におけるパイプライン

機械学習の基礎

このセクションでは、基本的な用語のいくつかを取り上げて説明します。これらの用語は、機械学習プロジェクトの作業中に使用されるものです。

線形代数

線形代数は、変数の間にある相関関係を扱う数学の分野です。「線形」と名付けられているわけは、入力変数とその 1 以下の冪 (指数) という観点から出力変数を表現できるからです。線形代数の基礎を理解していると、機械学習の基礎のいくつかを理解する上で非常に役立ちます。このセクションでは、よく使われるいくつかの重要な用語の意味を明らかにします。

テンソルとは?

スカラー」の説明から始めましょう。基本的に、スカラー表現は 1、5、23.5、42 などの数値です。スカラー値をグループ化すると、「ベクトル」になります。例えば、(1, 5, 23, 2) は長さ 4 のベクトルです。ベクトルに含まれるすべての要素は同じデータ型に属している必要がありますが、「タプル」の場合は型を混在させることができます。サイズが同じベクトルのリストは、「行列」と呼ばれます。行列を構成する行数と列数は、同じである必要はありませんが、各要素は同じ型でなければなりません。m 個の行と n 個の列からなる行列は m x n 行列と呼ばれます。

テンソル」とは、多次元空間内で表現されるデータのことです。上述の表現はすべてテンソルという言葉で総称されます。例えば、ゼロ次元のテンソルはスカラーです。1 次元のテンソルはベクトル、2 次元のテンソルは行列です。以下の図に、3 次元テンソルの例を示します。この例は基本的に行列を拡張したものですが、3 次元になっています。

tensor.png

テンソルは画像処理などの側面で役立つことがあります。次元ごとに高さ、幅、色のそれぞれを表現できるためです。

高次元ベクトル空間

高次元ベクトル空間を理解すると、機械学習の仕組みを理解する上で強固な基礎となります。以下の図に示しているデータセットには、3 つの列があります。こうした列は、次元あるいは特徴と呼ばれます。このテーブルは 3 次元データセットとも呼ばれます。このテーブル内のポイントが 3 次元空間内で描画されると、3 つのポイント・クラウドが表われます。

classification2.png

2 次元空間内で各ポイント群を分離する基本的な境界は、「直線」です。上の図には、3 次元空間内でそれぞれのポイント群を分離する境界が示されています。3 次元空間でのこの線は、「平面」と呼ばれます。3 次元から 4 次元以上の次元を扱うようになると、平面は「超平面」になります。

classification2.png

このような分離を識別することが非常に重要となります。データ・ポイント群に分離した後は、新しいデータを予測するということは単にデータ・ポイントがどこに属するかを識別するだけのことになります。

教師あり機械学習と教師なし機械学習

教師あり機械学習

教師あり機械学習とは、データセット内の各レコードにラベルまたはフラグが含まれているタイプの問題のことを指します。

data_label.png

例として、以下のテーブルには最高温度、最低温度、最大振動の値が含まれています。

table.png

最後の列「Asperity (厳しさ)」は、ラベルです。つまり、このデータセットに含まれる温度と振動のデータに基づいて、厳しさを予測しようとしています。これが、ラベル付きデータセットです。

ラベル付きデータセットを使用すると、ラベル付けされていないデータに対して将来を予測するようにアルゴルズムをトレーニングできます。ラベル付けされていないデータをアルゴリズムに入力すると、アルゴリズムはそのデータのラベルを予測します。これが、教師あり学習と呼ばれる機械学習です。教師あり学習には「回帰」と「分類」という 2 つのタイプがあります。

回帰

連続値を予測するタイプの使用ケースは、「回帰」と呼ばれます。例えば、アルゴリズムに 35、35、12 の 3 つの値を渡すと、アルゴリズムは厳しさの値として 0.32 を予測します。

regression.png

分類

出力が連続値ではなく 2 進値、または少なくとも離散値となるタイプの使用ケースは、「分類」と呼ばれます。言い換えると、アルゴリズムは数値を予測するのではなく、クラス変数を予測します。

table2.png

例えば、アルゴリズムに 35、35、12 の値を渡すと、アルゴリズムは区分の値として 0 を予測します。

classification.png

予測するクラスが 2 つだけの場合、それは「2 項分類」と呼ばれます。クラスの数が 2 つを超える場合は、「マルチクラス分類」を行っていることになります。

教師なし学習

教師なし機械学習とは、データセット内のレコードにラベルまたはフラグが含まれていないタイプの問題のことを指します。教師なし機械学習のタイプには、「クラスタリング」があります。

data2.png

クラスタリング

前に示した 3 次元グラフには、3 つのクラスター、つまりデータのクラウドが示されています。テーブルを描画するだけで、データが 3 つのクラスターに集まっていることがわかります。このプロセスが「クラスタリング」と呼ばれるものです。

clustering.png

モデルの作成

機械学習「モデル」とは、既知のデータを使用して作成され、計算済みの一定の精度で新しいデータを予測することを目的としてセットアップされた、数学的構成のことを指します。

ゼロからモデルを作成するには、以下の一連のステップを繰り返し行います。

  • データを探索する
  • データを前処理する
  • データをトレーニング用とテスト用に分割する
  • 分類モデルを作成する
  • パイプラインを使用してすべてのステップを組み立てる
  • モデルをトレーニングする
  • モデルで予測を行う
  • モデルのパフォーマンスを評価し、視覚化する

モデルの作成に関する詳細と実践的手法については、「Python と scikit-learn を使用して初の機械学習モデルを作成し、テストする」で説明します。

パイプライン

パイプラインは、機械学習フローに沿ってデータ処理を設計する非常に便利なプロセスです。データの前処理は単調で時間のかかるステップですが、どのアルゴリズムを適用するかに関係なく、必ずモデルのトレーニングを始める前に行う必要があります。以下の図に、データのモデリングを開始する前に毎回適用する典型的な前処理のシーケンスを示します。

pipelines-1.png

パイプラインを使用すると、前処理の部分は変えずに、モデリング・アルゴリズムの部分だけを変えたり、モデリング・アルゴリズムの異なるパラメーター・セットを使ったりできます。全体的な狙いは、完全なデータ処理フローを 1 つのパイプラインに融合させて、そのパイプラインを下流で使用できるようにすることです。

pipelines-2.png

機械学習アルゴリズムと同様に、パイプラインでも、fit、evaluate、score というメソッドを使用します。基本的に、fit はトレーニングを開始するメソッド、score は予測された値を返すメソッドです。

pipelines-3.png

パイプラインを使用する最大のメリットの 1 つは、「交差検証」にあります。交差検証は、同じパイプラインを使用して複数のハイパーパラメーターを変更または調整するプロセスのことを指します。このプロセスにより、アルゴリズムの最適化が加速されます。モデルのパフォーマンスを向上させるために調整できるハイパーパラメーターを含め、パイプラインに関するトピックは今後の記事で詳しく説明します。

まとめ

このチュートリアルでは機械学習の基本概念をいくつか取り上げて説明しました。このチュートリアルは開発者向けのラーニング・パス「機械学習を始める」を構成するコンテンツです。引き続きこのラーニング・パスに従うには、次のチュートリアル「Python と scikit-learn を使用して初の機械学習モデルを作成し、テストする」に進んでください。