> udemyで学習する

単回帰分析をPythonで実行【初心者でも分かる】

本記事は単回帰分析について、学生エンジニアが初心者の方へ向けて優しく解説しています。機械学習の中でも極めて重要な単回帰分析を一緒に学習しましょう。単に単回帰分析の用語を理解するだけではなく、Pythonで実際にコードを書くことでグッと理解が深まると思います。

単回帰分析とは

単回帰分析とは、機械学習を行う上で非常に重要な分析方法です。
下に載せた動画が、単回帰分析について非常にわかりやすく解説していますので御覧ください。
12分と長いですが、8分くらいからの再生でも理解できるかと思います。


いかがでしたでしょうか。
動画の通り、単回帰分析とは、最小二乗法を利用してデータの中心を通る直線(回帰直線)を決め、回帰直線から未知のデータを予測するする方法です。
今回は、Pythonのパッケージを利用して一発で回帰直線を求めます。

単回帰分析のPythonによる実装

実装要件

今回は、身長(height)と体重(weight)のデータを用いて回帰分析を行います。
今回の要件として、
・回帰直線(y=ax+b)の「a」「b」を求め、図に直線を表示する
・データを元に、y = ax + bの「a」と「b」の値を求める

データの準備

25名分の身長(height)と体重(weight)の、csvデータを準備しました。
僕が適当に作ったデータですが、利用したい方は下のダウンロードボタンから是非どうぞ。
このcsvファイルを、
この後記述するPythonコードと同じディレクトリへ保存しておきましょう。

データを「matplotlib」でプロットさせてみるとこんな感じ。
横軸が身長、縦軸が体重です。
適当に作りましたが、良い感じの相関関係があって嬉しい。

全て表示させると、下のようなでデータです。

    height  weight
0      156      51
1      143      47
2      172      65
3      180      77
4      176      62
5      175      59
6      145      47
7      162      51
8      175      53
9      186      64
10     140      48
11     167      50
12     142      40
13     154      48
14     145      39
15     175      62
16     165      47
17     172      58
18     176      65
19     178      70
20     182      71
21     179      68
22     187      67
23     164      46

パッケージのインストール

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

さっそく、Pythonで実装していきます。
必要なパッケージは3種類です。
1行目の「pandas」はcsvファイルデータの読み込みに利用します。
2行目の「matplotlib」は図の作成と表示に利用します。

回帰分析で非常に重要なのが、3行目。
「scikit-learn(サイキット・ラーン)」とは、Pythonの機械学習ライブラリです。
回帰直線を求める際はscikit-learnを利用することが一般的なので、今回も利用します。

データの読み込み

df = pd.read_csv('sample.csv')
x = df[['height']]
y = df[['weight']]

上記のコードで保存したcsvファイル(sample.csv)を「df」の変数へ格納します。
格納したデータを、
heightはx軸の値として、weightはy軸の値として、更に格納します。

線形回帰モデルのインスタンス化と学習

model = LinearRegression()
model.fit(x,y)

この2行で回帰直線が求まります。
1行目でモデルを求めるためにインスタンス化。

2行目で、データxとyの値を引数に、一発でモデルを求めてくれます。
2行目の作業を「学習させる」とも言い換えができます。
ここでいうモデルとは、回帰分析で求められるy=ax+bのことで回帰直線とも言いかえられます。

あとは、これを図で表示するだけです。

回帰直線をグラフで表示

plt.plot(x,y,'o')
plt.plot(x,model.predict(x))
plt.show()

1行目のは、xとyの値を点でプロットさせる、という意味です。
2行目で、図に直線で表示ささせれば、下の画像のような図が完成します。

aの値とbの値を表示

print('a = ', model.coef_) 
print('b = ', model.intercept_) 
【実行結果】
a =  [[0.60418319]]
b =  [-44.13816746]

y=ax+bの「a」と「b」の値は「coef_」と「intercept_」の属性に格納されています。

実行結果の値から回帰直線は、
y = 0.60418319x -44.13816746
ということがわかります。
この直線を利用して、50kg の人の体重予想とかも一発です。

全コード

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

df = pd.read_csv('sample.csv')

x = df[['height']]
y = df[['weight']]

model = LinearRegression()
model.fit(x,y)

plt.plot(x,y,'o')
plt.plot(x,model.predict(x))
plt.show()

print('a = ', model.coef_)
print('b = ', model.intercept_)

ということで、本記事は単回帰分析について、Pythonのコードを使用しながらまとめました。
最後まで読んでいただき、ありがとうございました\(^o^)/


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です