回帰線の外側を補うことを**外挿(extrapolation)**と呼びます。
キーワードで検索するとそれらしいものがたくさん見つかると思います。
一例としてb-spline曲線の例を書きます。
Python3
1import numpy as np
2import pandas as pd
3import seaborn as sns
4
5
6sample = pd.DataFrame({ 'y' : np.array([3,3,3,20,21,21]),
7 'x' : np.array([0,1,2,3,4,5])})
8
9sns.regplot(x="x", y="y", data=sample[:3], truncate=True, fit_reg=True,
10 scatter_kws = {'color': 'black'}, line_kws = {'color': 'black'})
11sns.regplot(x="x", y="y", data=sample[3:], truncate=True, fit_reg=True,
12 scatter_kws = {'color': 'black'}, line_kws = {'color': 'black'})
13
14#############################################
15# 追加部分
16#############################################
17from matplotlib import pyplot as plt
18
19from scipy.interpolate import splrep, splev
20
21# 扱いやすいようにNumpyに書き戻す(参考のため、xが小さいほうの配列のみを指定)
22x_np = np.asarray(sample.x[:3].tolist())
23y_np = np.asarray(sample.y[:3].tolist())
24
25# スプライン近似する
26spline_approx = splrep(x_np, y_np, k=1, s=0)
27
28# 外挿(Extrapolation)する
29x_pred = []
30y_pred = []
31for i in range(3,10):
32 x_pred.append(i)
33 y_pred.append(splev(i,spline_approx))
34
35# 外挿結果を結合する
36x_np = np.hstack((x_np,x_pred))
37y_np = np.hstack((y_np,y_pred))
38# print(x_np)
39# print(y_np)
40
41# 外挿結果をDataframeにつっこむ
42sample_pred = pd.DataFrame({ 'y' : y_np, 'x' :x_np})
43sns.regplot(x="x", y="y", data=sample_pred, truncate=True, fit_reg=True,
44 scatter_kws = {'color': 'red'}, line_kws = {'color': 'red'})
45
46plt.show()
47#############################################
48#############################################
49#############################################
直線の回帰であればax+bの傾きと切片を求めればできますね。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/01/03 02:33