Python と scikit-learn を使用して回帰アルゴリズムについて学ぶ

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

はじめに

このチュートリアルでは、回帰に基づく機械学習の問題を解決する方法の基礎を説明し、現在とりわけよく使われている回帰アルゴリズムをいくつか抜粋して比較します。

セットアップ

  1. 登録またはログインします。

  2. 空のプロジェクトを作成します。

    • Create a project (プロジェクトを作成)」または「New project (新規プロジェクト)」をクリックします。
    • Create an empty project (空のプロジェクトを作成)」を選択します。
    • プロジェクトに名前を付けます。
    • 既存の Object Storage サービス・インスタンスを選択するか、新しいインスタンスを作成します。
    • Create (作成)」をクリックします。
  3. ノートブックを追加します。

    • +Add to project (プロジェクトに追加)」をクリックします。
    • Notebook (ノートブック)」をクリックします。
    • From URL (URL から)」をクリックします。
    • Name (名前)」にノートブックの名前を入力します。
    • Select runtime (ランタイムを選択)」で、「Default Python 3.6 Free (デフォルト Python 3.6 無料版)」を選択します。
    • Notebook URL (ノートブックの URL)」として https://raw.githubusercontent.com/IBM/ml-learning-path-assets/master/notebooks/regression_with_scikit-learn.ipynb と入力します。
    • Create Notebook (ノートブックを作成)」をクリックします。
  4. ノートブックを実行します。

    開いた状態のノートブックで、「Run (実行)」をクリックしてセルを 1 つずつ実行します。チュートリアルの残りでは、ノートブックの順序に従います。

概要

予測する対象の特徴に連続値が含まれている場合、それは「回帰」に基づく機械学習の問題ということになります。回帰とは、従属変数を予測するために、他の独立変数との間の関係を分析するプロセスを指します。この関係をさらに明確にして値を予測しやすくするのに役立つとして知られているアルゴリズムがいくつかあります。

データ・セットについて

このチュートリアルで使用するデータ・セットには、住宅の購入者が購入を決定する前に考慮するさまざまな情報が含まれています。このデータを使用して、住宅の価格をその他すべての関連情報に基づいて予測する際のパフォーマンスを分析します。モデルを作成する前に必要となるさまざまな前処理のステップについては、前のチュートリアルで説明したので今回は省略します。このチュートリアルでは各種の回帰アルゴリズムを詳しく調べた後、各アルゴリズムを同じデータ・セットに適用して比較します。

頻度の分布

データ・ポイント

回帰アルゴリズム

よく使われている回帰アルゴリズムのうち、このチュートリアルではサンプル・コードを使用して次のアルゴリズムについて説明します。

  • 線形回帰 (単純線形回帰、多重線形回帰、多項式線形回帰)
  • 決定木回帰
  • ランダム・フォレスト木
  • 勾配ブースティング木

線形回帰

線形回帰モデルは、ターゲットと 1 つ以上の予測子との間にある線形の関係に基づいて、連続するターゲットを予測します。

単純線形回帰

単純線形回帰は線形回帰の最も基本的な形です。単純線形回帰では、予測対象の変数が他の 1 つの変数にのみ依存します。予測される変数の値を計算するには、線の傾きを計算する際に通常使用される、次の式を用います。

y = w0 + w1 * x1

上記の式では、y はターゲット変数を指し、x1 はターゲット変数が依存する独立変数を指します。w1 は、yx1 との間にある関係を表す係数であり、スロープとも呼ばれます。w0 は、一定係数、つまり切片です。切片とは、独立変数に対して常に同じ y のオフセットを意味します。

以下のサンプル・コードは、sklearn ライブラリーを使用して単純線形回帰を計算する方法を示しています。

SLR での分割

SLR モデル

SLR の係数

以下のグラフに、モデルがテスト・データに対して予測した値と、実際の販売価格のテスト値に対して予測した結果が示されています。単純線形回帰では、依存する変数が 1 つだけであると前提されます。したがって、このコンテキストでは 3 次元ビューで比較してもほとんど意味がありません。この比較が意味を持ってくるのは、多重線形回帰について説明する場合です。参考として、モデルの他の 2 つの指標グラフも以下に示しています。

2 次元と 3 次元で表した SLR の比較

SLR の比較

SLR の指標

多重線形回帰

多重線形回帰は単純線形回帰を拡張したものです。多重線形回帰の場合、ターゲット値は複数の変数に依存します。依存する変数の数は、使用ケースによって異なります。通常は主題専門家が、出力される特徴の予測精度の向上に寄与するフィールドを識別します。

y = w0 + w1 x1 + w2 x2 + ….+ wn * xn

以下のコード・スニペットに、sklearn を使用してデータ・セットをテスト用とトレーニング用に分割する方法が示されています。単純にするために、従属変数のすべてが効果的な予測に寄与することを前提とします。最も正確な予測を行うために必要な列を選択するには、前進的選択法や後方変数減少法など、複数の手法があります。これらの手法についての説明は、このチュートリアルの対象外です。

MLR での分割

sklearn ライブラリーを使用して多重線形モデルを開発します。コードに関して言うと、単純線形回帰と多重線形回帰の主な違いは、モデルを適合させるために含める列の数です。

MLR モデル

以下の図に、上記のモデルの指標がいくつか示されています。

MLR の係数

2 次元と 3 次元で表した MLR の比較

MLR の比較

MLR の指標

多項式線形回帰

単純な線形回帰によって生成される予測値は、通常、直線を形成します。単純線形回帰や多重線形回帰ではデータ・ポイントに正確に適合しない場合は、多項式線形回帰を適用します。多項式線形回帰を生成するには、バックエンドで以下の式を使用します。

y = w0 + w1 x1 + w2 x21 + ….+ wn * xnn

上記の式では独立変数の指数を使用していますが、係数が線形結合されているため、このアルゴリズムは非線形であるとはみなされません。

PLR での分割

多項式線形回帰モデルを作成する場合、データを前処理して、全次数の値で指定されている数まで変数の指数を作成します。以下の図では、前処理ステップでの全次数が 3 に設定されています。これは、x3 個の変数が生成されることを意味します。全次数が 1 の多項式は、多重線形回帰と同じように機能します。以下の式に含まれる「degree」の値を 1 に変更すると、前のセクションで作成されたモデルと同じ出力になります。

PLR モデル

以下のグラフに、モデルのパフォーマンス指標のいくつかが示されています。全次数 3 の多項式線形回帰は、多重線形回帰ほど効率的ではありません。いくつかのパラメーターを調整して、このアルゴリズムの出力が改善されるかどうかを確かめるか、調整の作業を省いて、多重線形回帰のほうがこのデータ・セットにふさわしいモデルであると結論するのでもかまいません。

PLR の係数

2 次元と 3 次元で表した PLR の比較

PLR の比較

PLR の指標

決定木

決定木ベースのモデルは、結果の予測を可能にするために、トレーニング・データから一連のルールを確立します。このアルゴリズムは、決定によって形成される木と比較することによって理解します。決定木モデルには、ルールを表す枝が含まれます。これらの枝を辿ると結果、つまり葉に到達します。各予測経路が到達する葉には、複数の値が含まれます。分類タイプの問題にも、これと同じ原則が適用されます。回帰タイプの問題の場合、最終的な予測は、到達した葉に含まれるすべての値の平均であるのが通常です。

DTR での分割

以下の図に、sklearn を使用して決定木モデルを作成する例を示します。

DTR モデル

以下の図では、モデルのパフォーマンスが分析されています。

DTR の比較

DTR の指標

アンサンブル学習

アンサンブル学習は、単独では力不足のモデルを結合してパフォーマンスに優れたモデルを生成するというタイプのアルゴリズムです。アンサンブル学習については、チュートリアル「Python と scikit-learn を使用して分類アルゴリズムを学ぶ」で分類に用いる場合の詳細を説明しています。

ランダム・フォレスト木

決定木は一般にパフォーマンスに劣るモデルとみなされています。データ・セットが比較的大きいと、決定木は期待される水準にまで達しないためです。ただし、複数の決定木を結合して 1 つのモデルにすると、精度が大幅に向上します。このランダム・フォレストに含まれる決定木のそれぞれは、トレーニング・データのサブセットを使用して作成されます。ランダム・フォレストを構成する決定木の数に制限はないため、数を調整して精度の変化を確認できます。予測対象の値がこのモデルを通過した結果は、個々の決定木のそれぞれから取得した値の平均です。

RFR モデル

以下の図に、前のモデルと同じく sklearn を使用してランダム・フォレスト・モデルを作成する例を示します。

RFR の比較

RFR の指標

勾配ブースティング木

勾配ブースティング木は、前のモデルのパフォーマンスを相加的に学習することによって作成されるモデルです。勾配ブースティング木については、チュートリアル「Python と scikit-learn を使用して分類アルゴリズムを学ぶ」で詳しく説明しています。

アルゴリズムの比較

異なる回帰アルゴリズムを比較する場合によく使われる指標には、平均 2 乗誤差と R2 があります。

平均 2 乗誤差 (MSE) は、誤差の 2 乗の平均として計算されます。ここでの誤差は、実際の値と予測値の間の距離を指します。MSE が 0 に近いほど、モデルの精度は高いことになります。

R2 は、次の式で計算されます。

R2 = 1 – (SSresidual / SSaverage )

ここで、SSresidual は実際の値と予測値の差を 2 乗した値の合計です。SSaverage は、実際の値と平均値の差を 2 乗した値の合計です。基本的に、R2 の値が 1 に近いほど、モデルの精度は高いことになります。R2 の値が負の場合は、トレーニング・データ・セットに含まれるすべての値の平均値を予測することもできないほどモデルがパフォーマンスに劣っていることを意味します。

以下のグラフでは、複数のモデルの MSE と R2 を比較しています。

すべての R2

まとめ

このチュートリアルでは、回帰アルゴリズムの大まかな概要を説明し、scikit-learn ライブラリーを使用した実装例を紹介しました。結果の一部を視覚化するために、matplot ライブラリーも使用しています。このチュートリアルは開発者向けのラーニング・パス「機械学習を始める」を構成するコンテンツです。

ラーニング・パスの次のチュートリアル「Python と scikit-learn を使用して分類アルゴリズムを学ぶ」では、分類に基づく機械学習の問題を解決する方法の基礎を説明し、現在とりわけよく使われている分類アルゴリズムをいくつか抜粋して比較します。