ようこそ、単回帰の記事へ。
本日は、データセットから単回帰モデルを構築する方法について見ていきます。
この記事のコーディング例の前に、単回帰の概念を詳しく説明した記事を読むことができます。
線形回帰モデルを構築するための6つのステップ
ステップ1:データセットのインポート
ステップ2: データの前処理
ステップ3:テストセットとトレーニングセットの分割
ステップ4:訓練セットに線形回帰モデルを適合させる
ステップ5:テスト結果の予測
ステップ6:テスト結果の可視化
さて、ステップを見たところで、同じものをコーディングすることから始めましょう。
Pythonで線形回帰モデルを実装する
この記事では、給与のデータセットを使用します。
このデータセットには、経験年数と給与の2つのカラムがあります。
データセットへのリンクは – https://github.com/content-anu/dataset-simple-linear です。
この記事もチェック:PythonのNumpyを使って線形回帰をゼロから実装していく
1. データセットのインポート
まず、pandasを使ってデータセットをインポートし、numpyやmatplotlibなどの他のライブラリもインポートします。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
dataset = pd.read_csv( 'Salary_Data.csv' )
dataset.head() |
dataset.head()`はデータセットの最初の数列を表示します。
上記のスニペットの出力は以下の通りです。
X = dataset.iloc[:,: - 1 ].values #independent variable array
y = dataset.iloc[:, 1 ].values #dependent variable vector
|
2. データの前処理
データセットのインポートが完了したので、データの前処理を行います。
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 1 / 3 ,random_state = 0 )
|
Xは独立変数の配列、
y` は従属変数のベクトルです。
配列とベクトルの違いに注意してください。
従属変数はベクトルでなければならず、独立変数は配列そのものでなければならない。
3. データセットの分割
データセットをテストセットと学習セットに分割する必要がある.一般的には、それぞれ20-80ポリシー、30-70ポリシーに従います。
なぜ分割が必要なのでしょうか?それは、年数や給与に応じたモデルを学習させたいからです。
そして、テストセットでモデルをテストします。
テストセットのデータでモデルが行った予測が、データセットで与えられたものと一致するかどうかをチェックします。
もし一致すれば、我々のモデルが正確であり、正しい予測をしていることを意味します。
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train,y_train) #actually produces the linear eqn for the data
|
線形回帰の特徴スケーリングはライブラリに任せておけばよいので、適用する必要はない。
4. トレーニングセットへの線形回帰モデルのフィッティング
sklearn の線形モデルライブラリから、linear regression クラスをインポートします。
regressor という線形回帰クラスのオブジェクトを作成します。
regressorをトレーニングセットにフィットさせるために、fitメソッド-関数を呼び出します。
ターゲット値y_trainにX_train(特徴量の行列の学習データ)をフィットさせる必要があります。
このように、モデルは相関関係を学習し、独立変数から従属変数を予測する方法を学習します。
y_pred = regressor.predict(X_test)
y_pred |
y_test |
この記事もチェック:NumPyの便利な線形代数メソッド(行列のランク,行列式,逆行列など)
5. テストセットの結果を予測する
我々は、テスト集合の給与のすべての予測を含むベクトルを作成します。
そして、予測された給与は y_pred
という名前のベクトルに入れられます(テスト集合のすべてのオブザベーションの予測値が含まれます)。
predict` メソッドは、テスト集合の予測を行います。
したがって、入力はテストセットとなります。
predict のパラメータは配列またはスパース行列でなければならず、したがって入力は X_test となります。
#plot for the TRAIN plt.scatter(X_train, y_train, color = 'red' ) # plotting the observation line
plt.plot(X_train, regressor.predict(X_train), color = 'blue' ) # plotting the regression line
plt.title( "Salary vs Experience (Training set)" ) # stating the title of the graph
plt.xlabel( "Years of experience" ) # adding the name of x-axis
plt.ylabel( "Salaries" ) # adding the name of y-axis
plt.show() # specifies end of graph
|
#plot for the TEST plt.scatter(X_test, y_test, color = 'red' )
plt.plot(X_train, regressor.predict(X_train), color = 'blue' ) # plotting the regression line
plt.title( "Salary vs Experience (Testing set)" )
plt.xlabel( "Years of experience" )
plt.ylabel( "Salaries" )
plt.show() |
# importing the dataset import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
dataset = pd.read_csv( 'Salary_Data.csv' )
dataset.head() # data preprocessing X = dataset.iloc[:, : - 1 ].values #independent variable array
y = dataset.iloc[:, 1 ].values #dependent variable vector
# splitting the dataset from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 1 / 3 ,random_state = 0 )
# fitting the regression model from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train,y_train) #actually produces the linear eqn for the data
# predicting the test set results y_pred = regressor.predict(X_test)
y_pred y_test # visualizing the results #plot for the TRAIN plt.scatter(X_train, y_train, color = 'red' ) # plotting the observation line
plt.plot(X_train, regressor.predict(X_train), color = 'blue' ) # plotting the regression line
plt.title( "Salary vs Experience (Training set)" ) # stating the title of the graph
plt.xlabel( "Years of experience" ) # adding the name of x-axis
plt.ylabel( "Salaries" ) # adding the name of y-axis
plt.show() # specifies end of graph
#plot for the TEST plt.scatter(X_test, y_test, color = 'red' )
plt.plot(X_train, regressor.predict(X_train), color = 'blue' ) # plotting the regression line
plt.title( "Salary vs Experience (Testing set)" )
plt.xlabel( "Years of experience" )
plt.ylabel( "Salaries" )
plt.show() |
y_testはテスト集合の実給与です。
y_pred は予測された給与です。
結果の可視化
コードを可視化するとどのような結果になるか見てみましょう。
1. 点(観測値)のプロット
データを可視化するために、matplotlib を使ってグラフをプロットします。
実際の観測点をプロットするには、与えられた実際の値をプロットすることになります。
X軸は経験年数、Y軸は給与の予測値です。
plt.scatter
は、データの散布図を描きます。
パラメータは以下の通りです。
- X – 座標 (X_train: 経験年数)
-
- Y – 座標 (y_train:従業員の実給料)
- 色(回帰線:赤、観測線:青)
2. 回帰線のプロット
plt.plotは以下のパラメータを持っています。
- X座標 (X_train) – 年代数
- Y座標 (predict on X_train) – X-trainの予測値(年数ベース).
注: y座標は、y_pred はテストセット観測値の予測サラリーであるため、y_pred ではない。
上記のコードは、以下のような訓練集合のプロットを生成します。
上記のコード・スニペットは、以下のようなプロットを生成します。
Linear Regression を実装するための完全な Python コード
上記のコードスニペットの出力は、以下の通りです。
まとめ
単純な線形回帰に関するこの記事はこれで終わりです。
私たちの例が気に入り、同様にモデルをコーディングしてみたことを望みます。
下のコメント欄でフィードバックをお聞かせください。
もし他の回帰モデルに興味があるなら、重回帰モデルを読んでみてください。