Python

【Python】探索的データ解析(EDA)の基礎|単回帰分析を初心者向けに解説

Python

はじめに

探索的データ解析(EDA)の基礎である単回帰分析を初心者向けに解説します。

悩んでる人
悩んでる人
  • 単回帰分析ってなんだろう?
  • 単回帰分析ってなぜやるのだろう?
  • 単回帰分析ってどのようにやるのだろう?

こういった疑問を解説したいと思います。

回帰分析を理解するまえに、記述統計を理解した方が、理解が深まりますので、ぜひこちらの記事も参考にしてみてください。

この記事のゴール

以下三点を明確化します。

  • 単回帰分析ってなんだろう?
  • 単回帰分析ってなぜやるのだろう?
  • 単回帰分析ってどのようにやるのだろう?

単回帰分析とは?

  • 単回帰分析とは、一つの説明変数で目的変数を予想するもの分析手法
  • 数式で表すと「y=ax+b」
  • このa,bを計算する方法の一つに最小二乗法という方法がある

単回帰分析ってなぜやるのか?

単回帰分析を行う理由は、以下です。

  • 線型関係が強い二変数の数値の予測のため
  • 要因分析のため

単回帰分析ってどのようにやるのか?

今回は、プログラミング言語のPythonのscikit-learnというライブラリで実装していきたいと思います。

  • 解析したい目的変数と説明変数を定義する
  • 所定のデータ形式に変換する
  • sklearnのlinear_modelを使用する

データセット

アイリス, 花, フローラ, 青, 自然, 植物, 希望, 美しい, アヤメ科, 塞ぎます, 濃い紫色, 紫

データセットは今回は、アヤメデータを使用します。

アヤメデータの特徴量(説明変数)は、下記の4つの項目が含まれています。

  • Sepal Length :がく片の長さ(cm)
  • Sepal Width :がく片の幅(cm)
  • Petal Length :花弁の長さ(cm)
  • Petal Width :花弁の幅(cm)

このデーアセットの目的変数は、あやめの種類を表します。

  • Iris-Setosa(アイリスセトサ):0
  • Iris-Versicolor(アイリスバージカラー):1
  • Iris-Virginica(アイリスバージニカ):2

今回は、以下のように設定し、petal lengthでpetal widthを予想するための単回帰分析をしていきたいと思います。

  • 説明変数:petal length
  • 目的変数:petal width

開発環境

Project Jupyter - Wikipedia

今回の記事は、Jupyter Notebookで行います。インストール方法や立ち上げ方がわからない方は、こちらの記事を参考ください。

コード

アヤメデータの読み出し

import pandas as pd
from sklearn import datasets
iris = datasets.load_iris()
X = pd.DataFrame(iris.data, columns=iris.feature_names)
Y = pd.DataFrame(iris.target,columns = {"target_names"})
df = pd.concat([X,Y],axis=1)
df

出力結果は以下です。

散布図でデータを確認する

以下のように軸を設定するのは、一般的ですので覚えておきましょう。

  • 縦軸:目的変数
  • 横軸:説明変数

今回は、以下で散布図をプロットします。

  • 目的変数:petal width (cm)
  • 説明変数:petal length (cm)
import matplotlib.pyplot as plt
plt.scatter(df["petal length (cm)"],df["petal width (cm)"])
plt.xlabel("petal length (cm)")
plt.ylabel("petal width (cm)")

出力結果は、以下です。

petal lengthが増加するとpetal widthも増加していることが分かります。

また、両者は、直線の関係であることが分かります。

単回帰分析では、直線の関係であることで、より精度の高い予想が可能となるので、覚えておきましょう。

単回帰分析をする

  • Pandasデータフレームの場合は、valuesでNumPy配列にする必要があります
  • 目的変数:df[“目的変数”].values
  • 説明変数:df.loc[:,[“説明変数”]].values
  • 単回帰分析はlinear_model.LinearRegression().fit(X,Y)で求めることができる

from sklearn import linear_model
#単回帰分析
reg = linear_model.LinearRegression()
X= df.loc[:,["petal length (cm)"]].values
Y = df["petal width (cm)"].values
reg.fit(X,Y)
#プロットする
plt.scatter(df["petal length (cm)"],df["petal width (cm)"])
plt.xlabel("petal length (cm)")
plt.ylabel("petal width (cm)")
plt.plot(X,reg.predict(X))

出力結果は、以下です。

直線の回帰係数と切片と決定係数は、以下のように得ることができます。

print('回帰係数:',reg.coef_)
print("切片:",reg.intercept_)
print("決定係数:",reg.score(X,Y))

出力結果は以下です。

  • 回帰係数: [0.41575542]
  • 切片: -0.3630755213190291
  • 決定係数: 0.9271098389904927

回帰係数、切片、決定係数

  • 回帰係数:y=ax+bのaの部分です。傾きを表します。
  • 切片:y=ax+bのbの部分です。切片を表します。
  • 決定係数:どの程度精度よく予測できているかを客観的に判断するための数値1に近ければ近いほど精度が高いという意味です。

まとめ

以下三点について解説しました。

  • 単回帰分析ってなんだろう?
  • 単回帰分析ってなぜやるのだろう?
  • 単回帰分析ってどのようにやるのだろう?

単回帰分析とは、単回帰分析とは、一つの説明変数で目的変数を予想するもの分析手法です。

単回帰分析は以下二点の目的で行います。

  • 線型関係が強い二変数の数値の予測のため
  • 要因分析のため

単回帰分析はPython sklearnにて実装可能です。

pythonをより深く学んでみたいという方は、こちらの記事も参考にしてみてください。

今回の記事は、以上です。

最後までお読みいただきありがとうございました。

コメント

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