【NumPy】最小二乗法で線形近似

この記事では、Python言語とNumPyを用いて、最小二乗法で線形近似で求める方法をソースコード付きで解説します。

最小二乗法

最小二乗法とは、データの組(X, Y)を、関数を用いて近似する手法の1つです。
残差の二乗和を最小とするように関数の係数を求めることから最小二乗法と呼ばれます。
PythonとNumPyのlinalg.lstsqを利用すると、連立方程式の解を求めることが出来ます。

書式

a,b = linalg.lstsq(A,Y)[0]

第1引数(A):行列A(Xに右から単位行列を結合した行列)
第2引数(Y):データ群(X, Y)のうちのベクトルY
戻り値(a,b):最小二乗法で求めた近似直線の傾きと切片

処理手順

①科学計算モジュールNumPyをインポートする。
②データXを定義する。
③データYを定義する。
④linalg.lstsqで最小二乗法をおこない、近似直線の傾きaと切片bを求める。
⑤計算結果を表示する。

ソースコード

サンプルプログラムのソースコードです。

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt

def main():

    X = [1,2,3,4,5]
    Y = [1.1, 2.1, 2.8, 4.3, 5.1]

    A = np.array([X,np.ones(len(X))])
    A = A.T
    a,b = np.linalg.lstsq(A,Y)[0]

    plt.plot(X,Y,"ro")
    plt.plot(X,(a*X+b),"g--")
    plt.grid()
    plt.show()


if __name__ == '__main__':
    main()

実行結果

サンプルプログラムの実行結果です。

データ(赤点)に対して近似直線(緑の破線)が引かれています。

関連ページ

【NumPy超入門】使い方とサンプルコードを解説
Pythonライブラリ「NumPy」の使い方から応用例まで、サンプルコード付きで入門者向けにまとめました。
【Python超入門】使い方とサンプル集
Pythonの使い方について、基礎文法から応用例まで入門者向けに解説します。
この記事を書いた人
西住技研

プログラミング言語「Python」を研究、仕事、趣味でデータ分析や作業自動化などに活用してきたノウハウを情報発信しています。
筆者の詳しいプロフィールやお問合せはこちらのページまで。
YoutubeX(旧Twitter)でも情報発信中です!

西住技研をフォローする
NumPy

コメント