ようこそ、単回帰の記事へ。
本日は、データセットから単回帰モデルを構築する方法について見ていきます。
この記事のコーディング例の前に、単回帰の概念を詳しく説明した記事を読むことができます。
線形回帰モデルを構築するための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 TRAINplt.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 TESTplt.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 datasetimport numpy as np
import pandas as pd
import matplotlib.pyplot as plt
dataset = pd.read_csv('Salary_Data.csv')
dataset.head()# data preprocessingX = dataset.iloc[:, :-1].values #independent variable array
y = dataset.iloc[:,1].values #dependent variable vector
# splitting the datasetfrom 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 modelfrom 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 resultsy_pred = regressor.predict(X_test)
y_predy_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 コード

上記のコードスニペットの出力は、以下の通りです。

まとめ
単純な線形回帰に関するこの記事はこれで終わりです。
私たちの例が気に入り、同様にモデルをコーディングしてみたことを望みます。
下のコメント欄でフィードバックをお聞かせください。
もし他の回帰モデルに興味があるなら、重回帰モデルを読んでみてください。