Pythonにおける線形回帰入門
20797 ワード
線形回帰は出力変数を予測するために歴史的データを使用する基本予測解析手法である.それは簡単に理解され、平易な英語を使用して説明することができるため、予測モデリングに人気があります.
線形回帰モデルは、経済学(例えば、成長を予測する)、ビジネス(例えば、製品の販売、従業員のパフォーマンスを予測する)、社会科学(例えば、性別や人種からの政治的な収入を予測する)、ヘルスケア(例えば、体重からの血圧レベル、生物学的要因からの病気の発症)を予測するなど、多くの実世界のアプリケーションを多数の実世界アプリケーションを有している.
線形回帰モデルを実行する方法を理解することは、重要な問題を解決するためにデータのストーリーを解き放つことができます.私たちはPythonを使用します.それは、処理、処理、およびモデルデータを扱うための強力なツールです.これは、線形回帰モデリングのパッケージの配列があります.
基本的な考えは、我々が観測データに線形回帰モデルを適合させることができれば、我々はそれから将来の値を予測するためにモデルを使用することができるということです.例えば、私たちが歴史的なデータから、家の価格(P)がそのサイズ(s)に線形に依存しているとわかりました — 実際、我々は家の価格がちょうどその90倍の大きさであることを発見しました.次のようになります.
p = 90 * s
このモデルでは、我々は、任意の家のコストを予測することができます.1500平方フィートの家があれば、その価格を計算することができます.
p = 90 * 1500 = 13 , 000
このブログの投稿では、以下をカバーします モデルの背後にある基本概念と数学 シミュレートされたデータを使用しているスクラッチから線形回帰を実行する方法 線形回帰を使用する方法 線形回帰を使用する方法
線形回帰モデルには2種類の変数がある. 入力変数または予測変数は出力変数の値を予測する変数です.一般的にXと呼ばれる. 出力変数は予測したい変数です.一般的にはYと呼ばれる. 線形回帰を用いてyを推定するには、式を仮定します.
どこでYₑ yの推定値は予測値である.
我々の目標はYとYの違いを最小にするパラメータαとβの統計的に重要な値を見つけることであるₑ.
これらの2つのパラメータの最適値を決定することができれば、xの値を与えられたyの値を予測するために最善のフィット線を持つことになります.
では,αとβをどのように推定するか?私たちは、いわゆるordinary least squares .
緑の線は、実際の値yと推定値yₑ
最小二乗法の目的は,yとyの二乗差の和を最小にするαとβの値を求めることであるₑ. 私たちはここで派生を通過しません、しかし、微積分を使用して、我々は未知のパラメタの値が以下の通りであることを示すことができます:
ここで、xはx値の平均値である.
あなたが統計に精通しているならば、あなたは単に
cov ( x , y )/var ( x )
このポストでは、二つのPythonモジュールを使います. 飛び込む前に、モデルをどのように実装するかを理解するのは役に立ちます.パッケージがどのように舞台裏で働くかを知ることは重要です.
開始するには、いくつかのデータをシミュレートし、どのように予測値ₑ) は実際の値( y )と異なる.
OLSメソッドを使用してYを推定するには、計算する必要があります
ブルーラインはベストフィットYラインₑ = 2.003 + 0.323 . XこのグラフからXとYの間に正の直線関係があることがわかります.私たちのモデルを使ってXの値からYを予測できます.
たとえば、x = 10という値があれば、次のように予測できます.
Yₑ = 2.003 + 0.323 ( 10 ) = 5.233
我々は、ゼロから線形回帰モデルを実装する方法を学びました
この方法を実証するために、我々は非常に人気がある
我々は、見ているだけです
まず、我々
したがって、モデルの式は次のようになります.
平易な英語で、これは平均的に、我々がテレビ広告に100ドルを費やすならば、我々は11.73台を売ると思っていなければなりません.
我々は単純回帰モデルに適合したので、我々は
また、プロットによる回帰モデルを視覚化することもできる
テレビ広告費と販売の間には正の直線関係があることがわかる — 言い換えると、テレビ広告により多くを費やすことは、より高い数の販売を予測します!
このモデルで、我々はテレビ広告に費やされるどんな量からでも販売を予測することができます.例えば、テレビ広告費を400ドルに増やすと、売上は26台に増えると予測できる.
我々は、線形回帰モデルを
このモデルのために、我々は続けます
Yₑ = α+β₁X₁ + β₂X₂ + … + βpxp,pは予測数の数である.
我々の例では、我々は予測されます
販売=α+β₁*TV+β₂*ラジオ
まず、線形回帰モデルを初期化し、モデルを予測変数と出力変数に合わせます.
販売= 2.921 + 0.046 *テレビ+ 0.1880 *ラジオ.
我々は、単に使用して値を予測することができます
私はあなたが線形回帰の基礎について、この簡単なチュートリアルを楽しんだことを願って!
我々は、ゼロから線形回帰を実装し、使用して
線形回帰モデルは、経済学(例えば、成長を予測する)、ビジネス(例えば、製品の販売、従業員のパフォーマンスを予測する)、社会科学(例えば、性別や人種からの政治的な収入を予測する)、ヘルスケア(例えば、体重からの血圧レベル、生物学的要因からの病気の発症)を予測するなど、多くの実世界のアプリケーションを多数の実世界アプリケーションを有している.
線形回帰モデルを実行する方法を理解することは、重要な問題を解決するためにデータのストーリーを解き放つことができます.私たちはPythonを使用します.それは、処理、処理、およびモデルデータを扱うための強力なツールです.これは、線形回帰モデリングのパッケージの配列があります.
基本的な考えは、我々が観測データに線形回帰モデルを適合させることができれば、我々はそれから将来の値を予測するためにモデルを使用することができるということです.例えば、私たちが歴史的なデータから、家の価格(P)がそのサイズ(s)に線形に依存しているとわかりました — 実際、我々は家の価格がちょうどその90倍の大きさであることを発見しました.次のようになります.
p = 90 * s
このモデルでは、我々は、任意の家のコストを予測することができます.1500平方フィートの家があれば、その価格を計算することができます.
p = 90 * 1500 = 13 , 000
このブログの投稿では、以下をカバーします
statsmodels
scikit-learn
この簡単なチュートリアルでは、次のXYZ線形回帰から、Pythonのコースでは、ブラウザのサンドボックス環境、タスクを完了するには、タスクを完了し、公共のデータセットを使用してプロジェクトです。
基礎概念と数学
線形回帰モデルには2種類の変数がある.
Yₑ = α + β X
どこでYₑ yの推定値は予測値である.
我々の目標はYとYの違いを最小にするパラメータαとβの統計的に重要な値を見つけることであるₑ.
これらの2つのパラメータの最適値を決定することができれば、xの値を与えられたyの値を予測するために最善のフィット線を持つことになります.
では,αとβをどのように推定するか?私たちは、いわゆるordinary least squares .
通常最小二乗
緑の線は、実際の値yと推定値yₑ
最小二乗法の目的は,yとyの二乗差の和を最小にするαとβの値を求めることであるₑ. 私たちはここで派生を通過しません、しかし、微積分を使用して、我々は未知のパラメタの値が以下の通りであることを示すことができます:
ここで、xはx値の平均値である.
あなたが統計に精通しているならば、あなたは単に
cov ( x , y )/var ( x )
ゼロからの線形回帰
このポストでは、二つのPythonモジュールを使います.
statsmodels
— a module それは多くの異なる統計モデルの推定のためのクラスと機能を提供します、統計的なテストを実行するのと同様に、そして、統計的データ探査.scikit-learn
— a module これは、データマイニングやデータ解析のためのシンプルで効率的なツールを提供します.開始するには、いくつかのデータをシミュレートし、どのように予測値ₑ) は実際の値( y )と異なる.
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
# Generate 'random' data
np.random.seed(0)
X = 2.5 * np.random.randn(100) + 1.5 # Array of 100 values with mean = 1.5, stddev = 2.5
res = 0.5 * np.random.randn(100) # Generate 100 residual terms
y = 2 + 0.3 * X + res # Actual values of Y
# Create pandas dataframe to store our X and y values
df = pd.DataFrame(
{'X': X,
'y': y}
)
# Show the first five rows of our dataframe
df.head()
上記のコードが実行されている場合(例えばJupyterノートブックで)、次のように出力されます.OLSメソッドを使用してYを推定するには、計算する必要があります
xmean
and ymean
, xとyの共分散xycov
), とxの分散xvar
) 値を決定する前にalpha
and beta
.# Calculate the mean of X and y
xmean = np.mean(X)
ymean = np.mean(y)
# Calculate the terms needed for the numator and denominator of beta
df['xycov'] = (df['X'] - xmean) * (df['y'] - ymean)
df['xvar'] = (df['X'] - xmean)**2
# Calculate beta and alpha
beta = df['xycov'].sum() / df['xvar'].sum()
alpha = ymean - (beta * xmean)
print(f'alpha = {alpha}')
print(f'beta = {beta}')
Out:
alpha = 2.0031670124623426
beta = 0.32293968670927636
グレート、我々は今の見積もりを持ってalpha
and beta
! 私たちのモデルはYₑ = 2.003 + 0.323 xと予測を行うことができます.ypred = alpha + beta * X
Out:
array([3.91178282, 2.81064315, 3.27775989, 4.29675991, 3.99534802,
1.69857201, 3.25462968, 2.36537842, 2.40424288, 2.81907292,
...
2.16207195, 3.47451661, 2.65572718, 3.2760653 , 2.77528867,
3.05802784, 2.49605373, 3.92939769, 2.59003892, 2.81212234])
予測を練りましょうypred
実際の値に対してy
, 私たちのモデルのより良い視覚理解を得るために.# Plot regression against actual data
plt.figure(figsize=(12, 6))
plt.plot(X, ypred) # regression line
plt.plot(X, y, 'ro') # scatter plot showing actual data
plt.title('Actual vs Predicted')
plt.xlabel('X')
plt.ylabel('y')
plt.show()
ブルーラインはベストフィットYラインₑ = 2.003 + 0.323 . XこのグラフからXとYの間に正の直線関係があることがわかります.私たちのモデルを使ってXの値からYを予測できます.
たとえば、x = 10という値があれば、次のように予測できます.
Yₑ = 2.003 + 0.323 ( 10 ) = 5.233
状態モデルによる線形回帰
我々は、ゼロから線形回帰モデルを実装する方法を学びました
ols
メソッドstatsmodels
図書館.この方法を実証するために、我々は非常に人気がある
advertising
さまざまな媒体によって広告に関する様々なコストと特定の製品の販売に関するデータセット.このデータセットをダウンロードできますhere .我々は、見ているだけです
TV
この例で変数 — テレビ広告費が製品の販売数を予測できるかどうか調査します.このCSVファイルをpandas
データフレームread_csv()
:# Import and display first five rows of advertising dataset
advert = pd.read_csv('advertising.csv')
advert.head()
まず、我々
statsmodels
’ ols
単純な線形回帰モデルを初期化する関数.これは式をとるy ~ X
, どこX
予測変数TV
広告費y
が出力変数Sales
). それから、我々は、olsfit()
メソッド.import statsmodels.formula.api as smf
# Initialise and fit linear regression model using `statsmodels`
model = smf.ols('Sales ~ TV', data=advert)
model = model.fit()
我々はもう計算しなければならないalpha
and beta
このメソッドとして私たち自身が自動的にそれを行います!呼び出しmodel.params
モデルのパラメータを表示します.Out:
Intercept 7.032594
TV 0.047537
dtype: float64
使用されている表記法ではαはインターセプトであり,βは斜面である.したがって、モデルの式は次のようになります.
平易な英語で、これは平均的に、我々がテレビ広告に100ドルを費やすならば、我々は11.73台を売ると思っていなければなりません.
我々は単純回帰モデルに適合したので、我々は
.predict
メソッド.また、プロットによる回帰モデルを視覚化することもできる
sales_pred
テレビ広告費に対して、最高の合うものの線を見つけるために:# Predict values
sales_pred = model.predict()
# Plot regression against actual data
plt.figure(figsize=(12, 6))
plt.plot(advert['TV'], advert['Sales'], 'o') # scatter plot showing actual data
plt.plot(advert['TV'], sales_pred, 'r', linewidth=2) # regression line
plt.xlabel('TV Advertising Costs')
plt.ylabel('Sales')
plt.title('TV vs Sales')
plt.show()
テレビ広告費と販売の間には正の直線関係があることがわかる — 言い換えると、テレビ広告により多くを費やすことは、より高い数の販売を予測します!
このモデルで、我々はテレビ広告に費やされるどんな量からでも販売を予測することができます.例えば、テレビ広告費を400ドルに増やすと、売上は26台に増えると予測できる.
new_X = 400
model.predict({"TV": new_X})
Out:
0 26.04725
dtype: float64
SciKit学習による線形回帰
我々は、線形回帰モデルを
statsmodels
…さあ、使ってみましょうscikit-learn
!このモデルのために、我々は続けます
advertising
データセットが、今回は2つの予測変数を使用して、複数の線形回帰モデルを作成します.これは単に複数の予測子を持つ線形回帰モデルであり、Yₑ = α+β₁X₁ + β₂X₂ + … + βpxp,pは予測数の数である.
我々の例では、我々は予測されます
Sales
変数の使用TV
and Radio
すなわち、私たちのモデルは次のように書くことができます.販売=α+β₁*TV+β₂*ラジオ
まず、線形回帰モデルを初期化し、モデルを予測変数と出力変数に合わせます.
from sklearn.linear_model import LinearRegression
# Build linear regression model using TV and Radio as predictors
# Split data into predictors X and output Y
predictors = ['TV', 'Radio']
X = advert[predictors]
y = advert['Sales']
# Initialise and fit model
lm = LinearRegression()
model = lm.fit(X, y)
再び、値を計算する必要はありませんalpha
and betas
我々-我々は、ちょうど電話しなければなりません.intercept_
for alpha
, and .coef_
係数を持つ配列に対してbeta1
and beta2
:print(f'alpha = {model.intercept_}')
print(f'betas = {model.coef_}')
Out:
alpha = 2.921099912405138
betas = [0.04575482 0.18799423]
したがって、私たちのモデルは次のように書くことができます.販売= 2.921 + 0.046 *テレビ+ 0.1880 *ラジオ.
我々は、単に使用して値を予測することができます
.predict()
:model.predict(X)
Out:
array([20.555464, 12.345362, 12.337017, 17.617115, 13.223908,
12.512084, 11.718212, 12.105515, 3.709379, 12.551696,
...
12.454977, 8.405926, 4.478859, 18.448760, 16.4631902,
5.364512, 8.152375, 12.768048, 23.792922, 15.15754285])
我々は我々のデータに複数の線形回帰モデルに適合した今、我々はテレビやラジオ広告費の任意の組み合わせから販売を予測することができます!例えば、もし我々がテレビ広告で300ドルとラジオ広告で200ドルを投資したならば、我々がどれくらいの販売をするかについてわかっていたいならば.new_X = [[300, 200]]
print(model.predict(new_X))
Out:
[54.24638977]
これは、我々がテレビ広告に300ドルとラジオ広告で200ドルを費やすならば、我々は平均的に、54台が売られるのを見なければならないということを意味します.私はあなたが線形回帰の基礎について、この簡単なチュートリアルを楽しんだことを願って!
我々は、ゼロから線形回帰を実装し、使用して
statsmodels
and scikit-learn
Pythonで.実際には、モデルの有効性を測定する方法と有効性を測定する方法を知っている必要がありますどのようにモデルの重要な変数を選択するには、どのようにカテゴリ変数を処理するために、どのように非線形変換を実行する方法.我々は、すべてのこれらのトピックをカバーするフルコースを持っているここでは、次のXYZでは、Pythonとの線形回帰についての詳細について学ぶことに興味がある!
Reference
この問題について(Pythonにおける線形回帰入門), 我々は、より多くの情報をここで見つけました https://dev.to/nexttech/introduction-to-linear-regression-in-python-2g5bテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol