1つのデータを頼りに1つのデータを予測する、線形単回帰
はじめに
今回は1つの予測したいデータを1つのデータから求める回帰分析、線形単回帰を実践したいと思います。
実行環境はPython、JupyterNotebookです。
線形単回帰とは
簡単にいうと、予測したい値:y(目的変数)とyを説明することができる値:x(説明変数)を設定したとき、y=ax+bの直線を求めることで、特定のyの値がxを考えることによって予測できるというものです。
例えば、店の売り上げと気温にある程度の関係がみられる場合、気温から店の売り上げが予測できるというものです。
Pythonで実施
実際に線形回帰分析を行うには、scikit-learnのlinear_modelモジュール内にあるLinearRegressionというモデルを使います。以下のコードで実際に予測を行なってみます。
必要なモジュールのインポートとデータの生成
#必要なモジュールのインポート
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
#データの生成
X, y = make_regression(n_samples=100, n_features=1, n_targets=1, noise=5.0, random_state=42)
train_X, test_X, train_y, test_y = train_test_split(X, y, random_state=42)
データの生成では、make_regressionを使用します。
n_samplesでデータのサンプル数の設定
n_featuresでデータの列数の設定
n_tergetsは出力値yの数となる
noiseでデータのばらつきを設定
random_stateを設定することで再現可能な乱数を生成できる
そして、生成したデータをtrain_test_splitで訓練データとテストデータに分割します。ここで、random_stateの値をmake_regressionの値と同じにすることで、同じ乱数を再現します。
線形単回帰モデルの構築と訓練
model = LinearRegression()
model.fit(train_X, train_y)
上記のコードで線形単回帰モデルの構築と、fitを用いた予測モデルの学習を行うことができました。
実際にテストデータに対する精度を見てみましょう。
テストデータに対する評価
print(model.score(test_X, test_y))
modelを用いてtest_Xをから予測結果を出力し、出力結果とtest_yの値の正答率を出します。
結果は0.981409139000688となりました。
まとめ
今回はPythonのコードの記述の勉強も兼ねて、簡単なコードで線形単回帰モデルの実践を行いました。
データをcsvファイルなどで読み込んで利用することも可能なので、様々なデータに応用することができます。
また、コード内の数値をいじることで正答率が変化することを確認することで、それぞれの数値が意味することを理解できます。