非線形回帰のグラフを描画

2次元における、複数の座標点から非線形のグラフを導出して、グラフ化します。

事前にインストールしたものは以下です。

Matplotlib(PythonおよびNumPyのためのグラフ描画ライブラリ)
NumPy(Pythonにおいて数値計算を効率的に行うための拡張モジュール)
SciPy(プログラミング数学、工学のための数値解析ソフトウェア)
docs.scipy.org

 
今回は、(x, y) = (20, 25), (210, 100), (850, 120)という座標を配列に初期化します。

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit


def func(x, a, b, c):
    return a + b * np.exp(c * x)  # a + b * e^(c * x)


x_axis = np.array([20, 210, 850])  # x軸の値
y_axis = np.array([25, 100, 120])  # y軸の値

initGuess = [1, 1, 0.01]

popt, pcov = curve_fit(func, x_axis, y_axis, initGuess)

print(popt)  # func関数の変数a,b,cの最適推定値
print(pcov)  # 共分散

x_axis_cont = np.linspace(0, 1000, 100)
fittedData = [func(i, *popt) for i in x_axis_cont]

fig1 = plt.figure(1)
ax = fig1.add_subplot(1, 1, 1)
ax.plot(x_axis, y_axis, linestyle='', marker='^', color='b')  # 座標を青三角の点で図示
ax.plot(x_axis_cont, fittedData, linestyle='-', color='#900000')
ax.set_ylabel("y")
ax.set_xlabel("x")
ax.grid()

plt.show()


グラフの出力結果です。
f:id:ntk01:20190921174351p:plain