質問編集履歴

2

出力された図を加えました

2020/01/27 10:03

投稿

ygtygtygt
ygtygtygt

スコア7

test CHANGED
File without changes
test CHANGED
@@ -10,13 +10,17 @@
10
10
 
11
11
  自分で考えた中では入力データの負担率だと思うのですがあってますか?
12
12
 
13
+ このプログラムにおけるy_trueとy_estimatedは何を表していますか?
14
+
15
+
16
+
13
17
  負担率とは、あるデータxにおいて、k番目のクラスの正規分布からの観測される確率のことです。別の言い方をすると、あるデータxにおける混合正規分布の割合とも考えられそうです。
14
18
 
15
19
 
16
20
 
17
21
  3つのクラスA,B,Cに分かれると想定した場合1つのデータを入力すると
18
22
 
19
- [クラスAに属する確率,クラスBに属する確率,クラスCに属する確率] = [0.5, 0.3, 0.2]
23
+ [クラスAに属する確率,クラスBに属する確率,クラスCに属する確率] = [0.5, 0.3, 0.2]と出るはずです.
20
24
 
21
25
 
22
26
 
@@ -24,23 +28,55 @@
24
28
 
25
29
 
26
30
 
27
- このプログラムでは入力データが100個なのですがいずれは30個で行いたいと思ってます。
28
-
29
- ちなみに16個のデータを入力したら重ね合わせる最適なガウス分布の個数は1で出力データは入力データの個数と同じ個数出てきました。
31
+ ちなみに25個のデータを入力したら重ね合わせる最適なガウス分布の個数は1で出力データは入力データの個数と同じ個数出てきました。
30
32
 
31
33
 
32
34
 
33
35
  入力データ:
34
36
 
35
- [1,2,2,1,2,1,2,3,3,1,2,2,3,4,1,1]
37
+ [1. 1. 1. 2. 1. 1. 1. 2. 1. 2. 3. 1. 3. 1. 2. 4. 1. 2. 4. 1. 1. 2. 5. 1. 1. ]
36
38
 
37
39
 
38
40
 
39
41
  出力データ:
40
42
 
43
+ <y_true>
44
+
41
- [0.00979, 0.19649, 0.19649, 0.00979, 0.19649, 0.00979, 0.19649, 0.96889, 0.96889, 0.00979, 0.19649, 0.19649, 0.96889, 0.99995, 0.00979, 0.00979]
45
+ [0.41558912 0.57036429 0.52914185 0.48112792 0.60293698 0.46554157
46
+
42
-
47
+ 0.52676959 0.54020389 0.37723733 0.44722378 0.56863281 0.58951637
48
+
43
-
49
+ 0.51391066 0.51027414 0.58159079 0.45768141 0.45611032 0.43729612
50
+
51
+ 0.55446468 0.48241021 0.45572774 0.55418018 0.51759982 0.44739818
52
+
53
+ 0.45398047]
54
+
55
+
56
+
57
+ <y_estimated>
58
+
59
+ [0.49164472 0.49164472 0.49164472 0.50693811 0.49164472 0.49164472
60
+
61
+ 0.49164472 0.50693811 0.49164472 0.50693811 0.52245777 0.49164472
62
+
63
+ 0.52245777 0.49164472 0.50693811 0.5224578 0.49164472 0.50693811
64
+
65
+ 0.5224578 0.49164472 0.49164472 0.50693811 0.5224578 0.49164472
66
+
67
+ 0.49164472]
68
+
69
+
70
+
71
+ <図1>
72
+
73
+ ![イメージ説明](2caaa2a8c81d421942d37dcc1976ab0a.png)
74
+
75
+
76
+
77
+ <図2>
78
+
79
+ ![イメージ説明](3f4370f4cb893ba815d3f02b1679a34b.png)
44
80
 
45
81
 
46
82
 
@@ -90,7 +126,7 @@
90
126
 
91
127
 
92
128
 
93
- #sample.csvの3列目の値を取得
129
+
94
130
 
95
131
  list = []
96
132
 
@@ -100,11 +136,11 @@
100
136
 
101
137
  for row in reader:
102
138
 
103
- list.append(row[2])
139
+ list.append(row[3])#sample.csvの4列目の値を取得
104
-
140
+
105
- float = float(list)#文字列をfloat型に変換
141
+ float = [float(s) for s in list]#文字列をfloat型に変換
106
-
142
+
107
- x = np.array(list)#numpy型に変換 xは入力したデータ
143
+ x = np.array(float)#numpy型に変換 xは入力したデータ
108
144
 
109
145
 
110
146
 
@@ -200,7 +236,9 @@
200
236
 
201
237
  print(y_true)
202
238
 
203
-
239
+ print(y_estimated)
240
+
241
+
204
242
 
205
243
  # gaussian fit
206
244
 
@@ -222,7 +260,7 @@
222
260
 
223
261
  plt.savefig("mix_gauss_fit.png")
224
262
 
225
- plt.show()
263
+ plt.show()#図1
226
264
 
227
265
  plt.close()
228
266
 
@@ -246,7 +284,7 @@
246
284
 
247
285
  plt.savefig("bic.png")
248
286
 
249
- plt.show()
287
+ plt.show()#図2
250
288
 
251
289
  plt.close()
252
290
 

1

入力データと出力データをコードに反映させました。

2020/01/27 10:03

投稿

ygtygtygt
ygtygtygt

スコア7

test CHANGED
File without changes
test CHANGED
@@ -66,6 +66,8 @@
66
66
 
67
67
  import math
68
68
 
69
+ import csv
70
+
69
71
 
70
72
 
71
73
  """Setting up test data"""
@@ -86,9 +88,23 @@
86
88
 
87
89
 
88
90
 
91
+
92
+
89
- num_sample = 100
93
+ #sample.csvの3列目の値を取得
94
+
90
-
95
+ list = []
96
+
97
+ with open('data/src/sample.csv') as f:#ファイル名は架空のものを記載
98
+
99
+ reader = csv.reader(f)
100
+
101
+ for row in reader:
102
+
103
+ list.append(row[2])
104
+
105
+ float = float(list)#文字列をfloat型に変換
106
+
91
- x = np.linspace(0, 1, num_sample)
107
+ x = np.array(list)#numpy型に変換 xは入力したデータ
92
108
 
93
109
 
94
110
 
@@ -176,9 +192,13 @@
176
192
 
177
193
  for i in range(num_peak_estimated):
178
194
 
179
- y_estimated += gaussian_func(x, plsq_global_opt[3*i+1], plsq_global_opt[3*i+2],
195
+ y_estimated += gaussian_func(x, plsq_global_opt[3*i+1], plsq_global_opt[3*i+2],plsq_global_opt[3*(i+1)])
196
+
197
+
198
+
180
-
199
+ #出力データ
200
+
181
- plsq_global_opt[3*(i+1)])
201
+ print(y_true)
182
202
 
183
203
 
184
204