回答編集履歴
1
追記
test
CHANGED
@@ -4,11 +4,17 @@
|
|
4
4
|
|
5
5
|
import numpy as np
|
6
6
|
|
7
|
+
from math import exp
|
8
|
+
|
7
9
|
from scipy.optimize import curve_fit
|
8
10
|
|
9
|
-
def f(x, a, b):
|
11
|
+
def f1(x, a, b):
|
10
12
|
|
11
13
|
return a*np.exp(x*x+x+b)
|
14
|
+
|
15
|
+
def f2(x, c):
|
16
|
+
|
17
|
+
return c*np.exp(x*x+x)
|
12
18
|
|
13
19
|
|
14
20
|
|
@@ -18,8 +24,36 @@
|
|
18
24
|
|
19
25
|
y = np.random.random(n)
|
20
26
|
|
21
|
-
a, b = curve_fit(f, x, y)
|
27
|
+
(a, b), cov = curve_fit(f1, x, y)
|
22
28
|
|
23
|
-
|
29
|
+
(c), cov = curve_fit(f2, x, y)
|
30
|
+
|
31
|
+
print('a, b, a*exp(b), c', a, b, a*np.exp(b), c)
|
32
|
+
|
33
|
+
print('MAE[a,b], MAE[c]', np.mean(np.abs(f1(x, a, b)-y)), np.mean(np.abs(f2(x, c)-y)))
|
24
34
|
|
25
35
|
```
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
---
|
40
|
+
|
41
|
+
追記:
|
42
|
+
|
43
|
+
rkhsさんの回答を受けてcに対する最適化問題も追加しました。
|
44
|
+
|
45
|
+
比較も残しました。
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
cに対して最適化を行うと正しいフィッティングが得られます。
|
50
|
+
|
51
|
+
a,bに対して行うと、運が良ければ解が一致します。
|
52
|
+
|
53
|
+
ただし正しくフィッティングできないときもあります。
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
やはり余分なパラメータを加えると局所最適解にハマりますね。
|
58
|
+
|
59
|
+
いろいろと試してみてください。
|