Skip to content

Commit fb527fd

Browse files
authored
Merge pull request #57 from JesseLivezey/analysis_update
fixed analysis funcs from dca update
2 parents 2b96440 + f3a8f5f commit fb527fd

2 files changed

Lines changed: 13 additions & 18 deletions

File tree

dca/analysis.py

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
from sklearn.decomposition import PCA
44
from scipy.stats import special_ortho_group as sog
55

6-
from .cov_util import calc_cross_cov_mats_from_data
76
from .data_util import CrossValidate, form_lag_matrix
87
from .methods_comparison import SlowFeatureAnalysis as SFA
98
from .dca import DynamicalComponentsAnalysis
@@ -114,15 +113,14 @@ def run_analysis(X, Y, T_pi_vals, dim_vals, offset_vals, num_cv_folds, decoding_
114113
Y_test_ctd = Y_test - Y_mean
115114

116115
# compute cross-cov mats for DCA
117-
T_max = 2 * np.max(T_pi_vals)
118-
cross_cov_mats = calc_cross_cov_mats_from_data(X_train_ctd, T_max)
116+
dca_model = DynamicalComponentsAnalysis(T=np.max(T_pi_vals))
117+
dca_model.estimate_data_statistics(X_train_ctd)
119118

120119
# do PCA/SFA
121120
pca_model = PCA(svd_solver='full').fit(np.concatenate(X_train_ctd))
122121
sfa_model = SFA(1).fit(X_train_ctd)
123122

124123
# make DCA object
125-
opt = DynamicalComponentsAnalysis(d=1, T=1)
126124

127125
# loop over dimensionalities
128126
for dim_idx in range(len(dim_vals)):
@@ -147,9 +145,8 @@ def run_analysis(X, Y, T_pi_vals, dim_vals, offset_vals, num_cv_folds, decoding_
147145
# loop over T_pi vals
148146
for T_pi_idx in range(len(T_pi_vals)):
149147
T_pi = T_pi_vals[T_pi_idx]
150-
opt.cross_covs = cross_cov_mats[:2 * T_pi]
151-
opt.fit_projection(d=dim, n_init=n_init)
152-
V_dca = opt.coef_
148+
dca_model.fit_projection(d=dim, T=T_pi, n_init=n_init)
149+
V_dca = dca_model.coef_
153150

154151
# compute DCA R2 over offsets
155152
X_train_dca = [np.dot(Xi, V_dca) for Xi in X_train_ctd]
@@ -221,21 +218,19 @@ def run_dim_analysis_dca(X, Y, T_pi, dim_vals, offset, num_cv_folds, decoding_wi
221218
Y_train_ctd = [Yi - Y_mean for Yi in Y_train]
222219
Y_test_ctd = Y_test - Y_mean
223220

221+
# make DCA object
224222
# compute cross-cov mats for DCA
225-
cross_cov_mats = calc_cross_cov_mats_from_data(X_train_ctd, 2 * T_pi)
226-
227-
# make DCA object with arb parameters
228-
opt = DynamicalComponentsAnalysis(d=1, T=1)
223+
dca_model = DynamicalComponentsAnalysis(T=T_pi)
224+
dca_model.estimate_data_statistics(X_train_ctd)
229225

230226
# loop over dimensionalities
231227
for dim_idx in range(len(dim_vals)):
232228
dim = dim_vals[dim_idx]
233229
if verbose:
234230
print("dim", dim_idx + 1, "of", len(dim_vals))
235231

236-
opt.cross_covs = cross_cov_mats
237-
opt.fit_projection(d=dim, n_init=n_init)
238-
V_dca = opt.coef_
232+
dca_model.fit_projection(d=dim, n_init=n_init)
233+
V_dca = dca_model.coef_
239234

240235
# compute DCA R2 over offsets
241236
X_train_dca = [np.dot(Xi, V_dca) for Xi in X_train_ctd]

dca/dca.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -292,17 +292,17 @@ def make_cepts2(X, T_pi):
292292

293293
# Compute the power spectral density
294294
window = torch.Tensor(hann(Y.shape[-1])[np.newaxis, np.newaxis]).type(Y.dtype)
295-
Yf = torch.rfft(Y * window, 1, onesided=True)
296-
spect = Yf[:, :, :, 0]**2 + Yf[:, :, :, 1]**2
295+
Yf = torch.fft.rfft(Y * window, dim=1)
296+
spect = abs(Yf)**2
297297
spect = spect.mean(dim=1)
298298
spect = torch.cat([torch.flip(spect[:, 1:], dims=(1,)), spect], dim=1)
299299

300300
# Log of the DFT of the autocorrelation
301301
logspect = torch.log(spect) - np.log(float(Y.shape[-1]))
302302

303303
# Compute squared cepstral coefs (b_k^2)
304-
cepts = torch.rfft(logspect, 1, onesided=True) / float(Y.shape[-1])
305-
cepts = torch.sqrt(cepts[:, :, 0]**2 + cepts[:, :, 1]**2)
304+
cepts = torch.fft.rfft(logspect, dim=1) / float(Y.shape[-1])
305+
cepts = abs(cepts)
306306
return cepts**2
307307

308308

0 commit comments

Comments
 (0)