PythonとNumpy,Pandasを使って単純な線形回帰モデルを作る方法

スポンサーリンク

ようこそ、単回帰の記事へ。

本日は、データセットから単回帰モデルを構築する方法について見ていきます。

この記事のコーディング例の前に、単回帰の概念を詳しく説明した記事を読むことができます。

スポンサーリンク

線形回帰モデルを構築するための6つのステップ

ステップ1:データセットのインポート
ステップ2: データの前処理
ステップ3:テストセットとトレーニングセットの分割
ステップ4:訓練セットに線形回帰モデルを適合させる
ステップ5:テスト結果の予測
ステップ6:テスト結果の可視化

さて、ステップを見たところで、同じものをコーディングすることから始めましょう。

Pythonで線形回帰モデルを実装する

この記事では、給与のデータセットを使用します。

このデータセットには、経験年数と給与の2つのカラムがあります。

データセットへのリンクは – https://github.com/content-anu/dataset-simple-linear です。

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

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()
Image 59
Dataset

y_testはテスト集合の実給与です。

y_pred は予測された給与です。

結果の可視化

コードを可視化するとどのような結果になるか見てみましょう。

1. 点(観測値)のプロット

データを可視化するために、matplotlib を使ってグラフをプロットします。

実際の観測点をプロットするには、与えられた実際の値をプロットすることになります。

X軸は経験年数、Y軸は給与の予測値です。

plt.scatter は、データの散布図を描きます。

パラメータは以下の通りです。

  1. X – 座標 (X_train: 経験年数)
    1. Y – 座標 (y_train:従業員の実給料)
  2. 色(回帰線:赤、観測線:青)

2. 回帰線のプロット

plt.plotは以下のパラメータを持っています。

  1. X座標 (X_train) – 年代数
  2. Y座標 (predict on X_train) – X-trainの予測値(年数ベース).

注: y座標は、y_pred はテストセット観測値の予測サラリーであるため、y_pred ではない。

Image 60
Output equation

上記のコードは、以下のような訓練集合のプロットを生成します。

Image 61
y-pred output
Image 62
y-test output

上記のコード・スニペットは、以下のようなプロットを生成します。

Image 63
Output graph for training set

Linear Regression を実装するための完全な Python コード

Image 64
Output graph for test set

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

Image 65
Output graphs

まとめ

単純な線形回帰に関するこの記事はこれで終わりです。

私たちの例が気に入り、同様にモデルをコーディングしてみたことを望みます。

下のコメント欄でフィードバックをお聞かせください。

もし他の回帰モデルに興味があるなら、重回帰モデルを読んでみてください。

タイトルとURLをコピーしました