Python での線形回帰
この記事では、線形回帰について説明し、線形回帰を使用して結果を予測する方法を説明します。また、Python で単純線形回帰と重回帰を実装します。
回帰とは
回帰は、独立変数と従属変数の間の関係を識別するプロセスです。これは、住宅価格、従業員の給与、およびその他の予測アプリケーションを予測するために使用されます。
住宅価格を予測する場合、独立変数には、家の年齢、寝室の数、空港や市場などの中心都市の場所からの距離が含まれます。ここで、住宅の価格はこれらの独立変数に依存します。したがって、家の価格は従属変数です。
同様に、従業員の給与を予測する場合、独立変数は、従業員の年数、教育レベル、居住地の生活費などです。ここで、従属変数は従業員の給与です。
回帰を使用して、独立変数が従属変数にどのように影響するかを説明する数学的モデルを確立しようとします。数学モデルは、独立変数の値が提供されている場合に、エラーが最小の従属変数を予測する必要があります。
線形回帰とは何ですか
線形回帰では、独立変数と従属変数は線形に関連していると見なされます。
次のように N 個の独立変数が与えられていると仮定します。
$$
X=( X_1, X_2, X_3, X_4, X_5, X_6, X_7……, X_N)
$$
ここで、次の方程式のような線形関係を見つける必要があります。
$$
F(X)= A_0+A_1X_1+A_2X_2+ A_3X_3+ A_4X_4+ A_5X_5+ A_6X_6+ A_7X_7+………..+A_NX_N
$$
ここでは、
- 独立変数が与えられたときに最小の誤差で従属変数
F(X)
を予測するには、線形回帰を使用して定数Ai
を特定する必要があります。 - 定数 Ai は、回帰係数の予測重みまたは推定量と呼ばれます。
F(X)
は、回帰の予測応答または推定応答と呼ばれます。与えられたX=( X1, X2, X3, X4, X5, X6, X7……, XN)
に対して、F(X)
は実際の従属変数 Y に可能な限り近い値に評価する必要があります与えられた独立変数 X に対して。- Y を閉じると評価される関数 F(X)を計算するために、通常、X の特定の値に対する F(X)と Y の差の二乗平均平方根を最小化します。
Python での単純な線形回帰の実装
単純な回帰では、独立変数と従属変数は 1つだけです。したがって、予測される応答は次のように記述できます。
$$
F(X)= A_0+ A_{1X}
$$
Python で単純な線形回帰を実装するには、X の実際の値とそれに対応する Y 値が必要です。これらの値を使用して、予測された重み A0 および A1 を数学的に計算するか、Python で提供される関数を使用して計算できます。
次のように、配列の形式で X の 10 個の値が与えられたとします。
X = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
また、対応する Y 値は次のとおりです。
Y = [2, 4, 3, 6, 8, 9, 9, 10, 11, 13]
回帰式 F(X)
を見つけるために、scikit-learn
機械学習ライブラリの linear_model
モジュールを使用できます。マシンのコマンドプロンプトで次のコマンドを実行することにより、scikit-learn
ライブラリをインストールできます。
pip3 install scikit-learn
scikit-learn
ライブラリの linear_model
モジュールは、予測された応答を見つけるために使用できる LinearRegression()
メソッドを提供します。LinearRegression()
メソッドを実行すると、線形モデルが返されます。この線形モデルをトレーニングして、F(X)を見つけることができます。このために、fit()
メソッドを使用します。
fit()
メソッドは、線形モデルで呼び出されると、最初の引数として独立変数 X の配列を受け入れ、2 番目の入力引数として従属変数 Y の配列を受け入れます。実行後、線形モデルのパラメーターは、モデルが F(X)を表すように調整されます。以下に示すように、intercept_
属性と coef_
属性をそれぞれ使用して、A0 と A1 の値を求めることができます。
from sklearn import linear_model
import numpy as np
X = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).reshape(-1, 1)
Y = [2, 4, 3, 6, 8, 9, 9, 10, 11, 13]
lm = linear_model.LinearRegression()
lm.fit(X, Y) # fitting the model
print("The coefficient is:", lm.coef_)
print("The intercept is:", lm.intercept_)
出力:
The coefficient is: [1.16969697]
The intercept is: 1.0666666666666664
ここでは、係数値 A1 が 1.16969697 で、切片値 A0 が 1.0666666666666664 であることがわかります。
線形回帰モデルを実装した後、predict()
メソッドを使用して任意の X の Y の値を予測できます。次の例に示すように、モデルで呼び出されると、predict()
メソッドは独立変数 X を入力引数として受け取り、従属変数 Y の予測値を返します。
from sklearn import linear_model
import numpy as np
X = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).reshape(-1, 1)
Y = [2, 4, 3, 6, 8, 9, 9, 10, 11, 13]
lm = linear_model.LinearRegression()
lm.fit(X, Y) # fitting the model
Z = np.array([1, 5, 15, 56, 27]).reshape(-1, 1)
print("The input values are:", Z)
output = lm.predict(Z)
print("The predicted values are:", output)
出力:
The input values are: [[ 1]
[ 5]
[15]
[56]
[27]]
The predicted values are: [ 2.23636364 6.91515152 18.61212121 66.56969697 32.64848485]
ここでは、X のさまざまな値を predict()
メソッドに提供し、各入力値に対応する予測値を返していることがわかります。
matplotlib
ライブラリ関数を使用して、単純な線形回帰モデルを視覚化できます。このために、最初に、入力として提供された実際の X 値と Y 値の散布図を作成します。線形回帰モデルを作成した後、predict()
メソッドを使用して X に対して回帰モデルの出力をプロットします。これにより、以下に示すように、回帰モデルを表す直線が得られます。
from sklearn import linear_model
import numpy as np
import matplotlib.pyplot as plt
X = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).reshape(-1, 1)
Y = [2, 4, 3, 6, 8, 9, 9, 10, 11, 13]
lm = linear_model.LinearRegression()
lm.fit(X, Y)
plt.scatter(X, Y, color="r", marker="o", s=30)
y_pred = lm.predict(X)
plt.plot(X, y_pred, color="k")
plt.xlabel("x")
plt.ylabel("y")
plt.title("Simple Linear Regression")
plt.show()
出力:
Python での重回帰の実装
重回帰では、複数の独立変数があります。たとえば、2つの独立変数 X1 と X2 があり、それらの従属変数 Y が次のように与えられているとします。
X1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
X2 = [5, 7, 7, 8, 9, 9, 10, 11, 12, 13]
Y = [5, 7, 6, 9, 11, 12, 12, 13, 14, 16]
ここで、X1、X2、および Y の各 i 番目の値は、配列 X1 の i 番目の要素と配列 X2 の i 番目の要素を使用して配列 Y の i 番目の要素が決定されるトリプレットを形成します。
Python で重回帰を実装するには、次のように X1 と X2 から配列 X を作成します。
X1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
X2 = [5, 7, 7, 8, 9, 9, 10, 11, 12, 13]
X = [
(1, 5),
(2, 7),
(3, 7),
(4, 8),
(5, 9),
(6, 9),
(7, 10),
(8, 11),
(9, 12),
(10, 13),
]
X1 と X2 から X を作成するには、zip()
メソッドを使用します。zip()
メソッドは、入力としてさまざまな反復可能オブジェクトを受け取り、ペアになっている要素を含む反復子を返します。以下に示すように、list()
コンストラクターを使用してイテレーターをリストに変換できます。
X1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
X2 = [5, 7, 7, 8, 9, 9, 10, 11, 12, 13]
print("X1:", X1)
print("X2:", X2)
X = list(zip(X1, X2))
print("X:", X)
出力:
X1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
X2: [5, 7, 7, 8, 9, 9, 10, 11, 12, 13]
X: [(1, 5), (2, 7), (3, 7), (4, 8), (5, 9), (6, 9), (7, 10), (8, 11), (9, 12), (10, 13)]
X を取得した後、F(X)= A0+A1X1+A2X2
を見つける必要があります。
値 A0 は intercept_
属性を使用して見つけることがでこのために、特徴行列 X と従属変数配列 Y を fit()
メソッドに渡すことができます。実行されると、fit()
メソッドは、モデルが重回帰モデル F(X)を表すように、定数 A0、A1、および A2
を調整します。以下に示すように、値 A1 と A2 は coef_
属性を使用してきます。
from sklearn import linear_model
import numpy as np
X1 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
X2 = np.array([5, 7, 7, 8, 9, 9, 10, 11, 12, 13])
Y = [5, 7, 6, 9, 11, 12, 12, 13, 14, 16]
X = list(zip(X1, X2))
lm = linear_model.LinearRegression()
lm.fit(X, Y) # fitting the model
print("The coefficient is:", lm.coef_)
print("The intercept is:", lm.intercept_)
出力:
The coefficient is: [0.72523364 0.55140187]
The intercept is: 1.4934579439252396
ここで、係数が配列であることがわかります。配列の最初の要素は A1 を表し、配列の 2 番目の要素は A2 を表します。切片は A0 を表します。
モデルをトレーニングした後、次のように X1、X2 の任意の値に対する Y の値を予測できます。
from sklearn import linear_model
import numpy as np
X1 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
X2 = np.array([5, 7, 7, 8, 9, 9, 10, 11, 12, 13])
Y = [5, 7, 6, 9, 11, 12, 12, 13, 14, 16]
X = list(zip(X1, X2))
lm = linear_model.LinearRegression()
lm.fit(X, Y) # fitting the model
Z = [(1, 3), (1, 5), (4, 9), (4, 8)]
print("The input values are:", Z)
output = lm.predict(Z)
print("The predicted values are:", output)
出力:
The input values are: [(1, 3), (1, 5), (4, 9), (4, 8)]
The predicted values are: [3.8728972 4.97570093 9.35700935 8.80560748]
Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.
GitHub