この記事ではpythonを使って回帰分析する際のコードをまとめていく。いくつか方法がありそうなので、ライブラリごとに書いていければと思う。
今回はscipy.optimize.curve_fit編。
使い方は参考サイトのほうが分かりやすいので、自分用のメモとして残していく。
%matplotlib notebook import numpy as np import matplotlib.pyplot as plt import seaborn as sns #データを作成 x = np.array([1, 2, 3, 4, 5]) y = np.array([2, 6, 6, 9, 6]) #近似する関数を定義 def func1(X, a, b): # 1次式近似 Y = a + b * X return Y #scipy.optimize.curve_fit from scipy.optimize import curve_fit popt, pcov = curve_fit(func1,x,y) # poptは最適推定値、pcovは共分散 #結果 print("回帰係数(b)=", popt[1]) print("切片(a):",popt[0]) print("共分散",pcov) #予想値 x_ex = np.arange(-1, 7, 0.1) y_ex = popt[1] * x_ex + popt[0] #プロット sns.set_style("whitegrid", {'grid.linestyle':'--'}) plt.rcParams["font.family"] = 'meiryo' fig1 = plt.figure(figsize=(3,3), facecolor='w') ax1 = fig1.add_subplot(111) ax1.set_xlim(-1, 7) ax1.set_ylim(-2, 10) ax1.set_xlabel("X",fontsize=10,fontname='meiryo') ax1.set_ylabel("Y",fontsize=10,fontname='meiryo') ax1.scatter(x, y, marker="o",alpha=1,edgecolors="#08699E",facecolor="#08699E", s=40) #実データ ax1.plot(x_ex, y_ex ,'r--',color="#000000") #回帰の予想値
出力はこんな感じ。
回帰係数(b)= 1.0999999967488376 切片(a): 2.5000000097534865 共分散 [[ 4.65666675 -1.27000003] [-1.27000003 0.42333334]]
予想値を出したいときは、func1を使って計算すればよい。
y_pred = func1(x, *popt) ax1.scatter(x, y_pred, marker="o",alpha=1,edgecolors="#08699E",facecolor="#08699E", s=40) #回帰の予想値 ax1.plot(x_ex, y_ex ,'r--',color="#000000") #回帰直線
参考
curve_fitの使い方:カーブフィッティング手法 scipy.optimize.curve_fit の使い方を理解する - Qiita