質問編集履歴
2
訂正
test
CHANGED
File without changes
|
test
CHANGED
@@ -3,21 +3,3 @@
|
|
3
3
|
sklearnのrbf_kernelを使って非線形回帰を行うコード(下記)のサンプルコードを動かしました。
|
4
4
|
|
5
5
|
下図の実行結果に表示されている黒い線は何を表しているのかがわからず、教えていただきたいです。
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
# 考えたこと
|
10
|
-
|
11
|
-
kx = rbf_kernel(X=data, Y=data, gamma=50)とあるのでガウシアンの動径基底関数を宣言しているのだと思うのですが、公式ドキュメント(https://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.rbf_kernel.html)によるとk(x,y)=exp(−γ|x−y|)だよと書いてありました。
|
12
|
-
|
13
|
-
rbf_kernel(X=data, Y=data, gamma=50)は引数のxとyにdataを取っているのでRBFカーネルの|x-y|は常に0になってしまうのでは?と思いprintしてみると[[1.00000000e+00 9.96687591e-01 9.92367208e-01 9.84881520e-01......となっており、何が行われているのかがわからない状態です。
|
14
|
-
|
15
|
-
話が最初に戻るのですが、そもそもk(x,y)=exp(−γ|x−y|)はy軸に対して対称な形を取るのに、結果画像中の黒線は対称の中心がx=0からずれているのはどうしてなのでしょうか。
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
長文失礼いたしました。
|
20
|
-
|
21
|
-
初学者のため見当違いのことばかりだとは思いますがご教授いただけますと幸いです。
|
22
|
-
|
23
|
-
宜しくお願い致します。
|
1
一部削除
test
CHANGED
File without changes
|
test
CHANGED
@@ -21,75 +21,3 @@
|
|
21
21
|
初学者のため見当違いのことばかりだとは思いますがご教授いただけますと幸いです。
|
22
22
|
|
23
23
|
宜しくお願い致します。
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
# サンプルコード(一部抜粋)
|
30
|
-
|
31
|
-
```python
|
32
|
-
|
33
|
-
from sklearn.metrics.pairwise import rbf_kernel
|
34
|
-
|
35
|
-
from sklearn.linear_model import Ridge
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
def true_func(x):
|
40
|
-
|
41
|
-
z = 1-48*x+218*x**2-315*x**3+145*x**4
|
42
|
-
|
43
|
-
return z
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
n=100
|
48
|
-
|
49
|
-
data = np.random.rand(n).astype(np.float32)
|
50
|
-
|
51
|
-
data = np.sort(data)
|
52
|
-
|
53
|
-
target = true_func(data)
|
54
|
-
|
55
|
-
# noise付加
|
56
|
-
|
57
|
-
noise = 0.5 * np.random.randn(n)
|
58
|
-
|
59
|
-
target = target + noise
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
kx = rbf_kernel(X=data, Y=data, gamma=50)
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
clf = Ridge(alpha=30)
|
68
|
-
|
69
|
-
clf.fit(kx, target)
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
p_ridge = clf.predict(kx)
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
plt.scatter(data, target,label='data')
|
78
|
-
|
79
|
-
for i in range(len(kx)):
|
80
|
-
|
81
|
-
plt.plot(data, kx[i], color='black', linestyle='-', linewidth=1, markersize=3, label='rbf', alpha=0.2)
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
plt.plot(data, p_ridge, color='green', linestyle='-', linewidth=1, markersize=3,label='ridge regression')
|
86
|
-
|
87
|
-
```
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
#実行結果画像
|
94
|
-
|
95
|
-
![実行結果画像](a7975918f6ca95162871f4940fd5e935.png)
|