@@ -88,7 +88,10 @@ function calculate_mean_and_coeffs(
88
88
# we want to calc lambda/m * coeffs^2 in the end
89
89
pred_mean, features = predictive_mean (rfm, fitted_features, DataContainer (itest))
90
90
scaled_coeffs = sqrt (1 / n_features) * get_coeffs (fitted_features)
91
- return pred_mean, scaled_coeffs
91
+ chol_fac = get_decomposition (get_feature_factors (fitted_features)). L
92
+ complexity = 2 * sum (log (chol_fac[i, i]) for i in 1 : size (chol_fac, 1 ))
93
+ complexity = sqrt (complexity)
94
+ return pred_mean, scaled_coeffs, complexity
92
95
93
96
end
94
97
@@ -107,15 +110,19 @@ function estimate_mean_and_coeffnorm_covariance(
107
110
n_test = size (get_inputs (io_pairs), 2 ) - n_train
108
111
means = zeros (n_test, n_samples)
109
112
coeffl2norm = zeros (1 , n_samples)
113
+ complexity = zeros (1 , n_samples)
114
+
110
115
for i in 1 : n_samples
111
116
for j in 1 : repeats
112
- m, c = calculate_mean_and_coeffs (rng, l, noise_sd, n_features, batch_sizes, io_pairs, feature_type)
117
+ m, c, cplx = calculate_mean_and_coeffs (rng, l, noise_sd, n_features, batch_sizes, io_pairs, feature_type)
113
118
means[:, i] += m' / repeats
114
119
coeffl2norm[1 , i] += sqrt (sum (c .^ 2 )) / repeats
120
+ complexity[1 , i] += cplx / repeats
121
+
115
122
end
116
123
end
117
124
118
- Γ = cov (vcat (means, coeffl2norm), dims = 2 )
125
+ Γ = cov (vcat (means, coeffl2norm, complexity ), dims = 2 )
119
126
return Γ
120
127
121
128
end
@@ -136,14 +143,16 @@ function calculate_ensemble_mean_and_coeffnorm(
136
143
137
144
means = zeros (n_test, N_ens)
138
145
coeffl2norm = zeros (1 , N_ens)
146
+ complexity = zeros (1 , N_ens)
139
147
for (i, l) in zip (collect (1 : N_ens), lvec)
140
148
for j in collect (1 : repeats)
141
- m, c = calculate_mean_and_coeffs (rng, l, noise_sd, n_features, batch_sizes, io_pairs, feature_type)
149
+ m, c, cplx = calculate_mean_and_coeffs (rng, l, noise_sd, n_features, batch_sizes, io_pairs, feature_type)
142
150
means[:, i] += m' / repeats
143
151
coeffl2norm[1 , i] += sqrt (sum (c .^ 2 )) / repeats
152
+ complexity[1 , i] += cplx / repeats
144
153
end
145
154
end
146
- return vcat (means, coeffl2norm)
155
+ return vcat (means, coeffl2norm, complexity )
147
156
148
157
end
149
158
@@ -185,7 +194,7 @@ batch_sizes = Dict("train" => 100, "test" => 100, "feature" => 100)
185
194
n_train = Int (floor (0.8 * n_data))
186
195
n_test = n_data - n_train
187
196
n_samples = n_test + 1 # > n_test
188
- n_features = 80
197
+ n_features = 300
189
198
repeats = 1
190
199
191
200
@@ -214,8 +223,16 @@ for (idx, type) in enumerate(feature_types)
214
223
N_ens = 50
215
224
N_iter = 20
216
225
initial_params = construct_initial_ensemble (rng, priors, N_ens)
217
- data = vcat (y[(n_train + 1 ): end ], 0.0 )
218
- ekiobj = [EKP. EnsembleKalmanProcess (initial_params, data, Γ, Inversion ())]
226
+ data = vcat (y[(n_train + 1 ): end ], 0.0 , 0.0 )
227
+ ekiobj = [
228
+ EKP. EnsembleKalmanProcess (
229
+ initial_params,
230
+ data,
231
+ Γ,
232
+ Inversion (),
233
+ scheduler = DataMisfitController (terminate_at = 1000 ),
234
+ ),
235
+ ]
219
236
220
237
221
238
err = zeros (N_iter)
0 commit comments