タイトルのテキスト
タイトルのテキスト
タイトルのテキスト
タイトルのテキスト

scikit-learnを使用したMultiOutputRegressorによる多変量回帰

AI Python

t f B! P L

 

パソコン操作の画像

多変量回帰の目的は、説明変数と目的変数の関係を表すモデルを構築し、未知の観測値に対して目的変数を予測することです。説明変数が複数あるため、各説明変数が目的変数にどの程度影響を与えるかを同時に考慮することができます。

〇多変量回帰とは?

多変量回帰(Multivariate Regression)は、複数の説明変数(独立変数)が1つ以上の目的変数(従属変数)に対して影響を与える統計モデルです。単変量回帰が一つの説明変数と一つの目的変数の関係をモデリングするのに対して、多変量回帰では複数の説明変数が複数の目的変数に同時に影響を与えることを考慮します。

多変量回帰は以下のような場合に使用されます。

・医療データ解析: 

複数の生体指標(説明変数)から患者の健康状態や治療効果(目的変数)を予測する。

・気象データ予測: 

複数の気象変数(気温、湿度、風速など)を使用して、未来の気象条件(降水量、気温など、複数の目的変数)を予測する。

・金融予測: 

複数の経済指標(株価指標、金利、為替レートなど)を使用して、将来の金融市場の動向(複数の目的変数)を予測する。

・製造業における品質管理: 

複数の製造プロセスパラメータ(温度、圧力、速度など)から製品の品質(複数の目的変数)を予測する。

・バイオインフォマティクス:

 ゲノムデータやタンパク質の発現データ(説明変数)から複数の生物学的効果や特性(複数の目的変数)を予測する。

これらの例では、単一の目的変数ではなく、複数の目的変数を同時にモデリングすることが重要です。MultiOutputRegressorは、Scikit-learnの回帰モデルを複数の目的変数に適用する手段として役立ちます。

 MultiOutputRegressorによる多変量回帰の実装

1ライブラリのインポート

まず、必要なライブラリをインポートします。

import numpy as np

import pandas as pd

from sklearn.model_selection import train_test_split

from sklearn.linear_model import LinearRegression

from sklearn.multioutput import MultiOutputRegressor

from sklearn.metrics import mean_squared_error, r2_score

2. データの読み込みと準備

データを読み込み、説明変数(X)と目的変数(y)を準備します。この例では、3つの説明変数と2つの目的変数を持つ仮想のデータセットを使用します。

# 仮想のデータセット生成

np.random.seed(42)

X = 2 * np.random.rand(100, 3)  # 3つの説明変数

y1 = 3 + 1.5 * X[:, 0] + 2 * X[:, 1] + np.random.randn(100)  # 仮想の目的変数1

y2 = 2 + 1.2 * X[:, 1] + 1.8 * X[:, 2] + np.random.randn(100)  # 仮想の目的変数2

 

# 目的変数を結合

y = np.column_stack([y1, y2]) 

# データをDataFrameに変換(任意)

df = pd.DataFrame(np.column_stack([X, y]), columns=['X1', 'X2', 'X3', 'y1', 'y2'])

3. データの分割

データをトレーニングセットとテストセットに分割します。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

4. MultiOutputRegressorを用いたモデルの学習

LinearRegressionモデルをMultiOutputRegressorでラップし、トレーニングデータで学習させます。

 model = MultiOutputRegressor(LinearRegression())

model.fit(X_train, y_train)

5. モデルの評価

テストデータを使用してモデルの性能を評価します。

 y_pred = model.predict(X_test)

 # モデルの評価

mse = mean_squared_error(y_test, y_pred)

r2 = r2_score(y_test, y_pred)

 print(f'Mean Squared Error: {mse}')

print(f'R-squared: {r2}')

 

これで、MultiOutputRegressorを使用して複数の目的変数を持つ多変量回帰モデルを構築する基本的な手順が完成しました。

 〇多変量回帰と重回帰の違い

多変量回帰と重回帰は、両方とも複数の説明変数が1つ以上の目的変数に影響を与える統計モデルの形式ですが、用語の使い方には微妙な違いがあります。

 

・多変量回帰 (Multivariate Regression):

多変量回帰は、複数の目的変数を持つ回帰モデルを指します。つまり、複数の応答変数が同時にモデル化されます。この場合、説明変数が複数であり、それぞれの目的変数に対して異なる係数が存在します。

 

・重回帰 (Multiple Regression):

重回帰は、通常、複数の説明変数が単一の目的変数に影響を与える回帰モデルを指します。この場合、複数の説明変数が単一の応答変数に対して同時にモデル化されます。

簡単に言えば、多変量回帰は多くの目的変数に対する回帰を指し、重回帰は一つの目的変数に対する回帰を指します。ただし、文脈によっては用語が混同されることもあるので、注意が必要です。

 

具体的な例を考えると、気温、湿度、風速などの複数の気象変数から雨量と翌日の気温を同時に予測する場合は多変量回帰です。一方で、単一の気象変数(例: 気温)が複数の説明変数(湿度、風速など)によって予測される場合は、重回帰と呼ばれることがあります。

〇まとめ

多変量回帰は目的変数が2つ以上の場合で、なおかつ各説明変数が目的変数にどの程度影響を与えるかを同時に考慮したい時に使われます。

機械学習でさまざまな分析をおこなってみましょう。

 

koneka1208

koneka1208

自己紹介

自分の写真
エクセル好きの窓際会社員です。 エクセルの操作法や日々の会社で得た知見などを発信していきます。 よろしくお願いします。

ブログ アーカイブ

連絡フォーム

名前

メール *

メッセージ *

QooQ