tick icon indicating copy to clipboard operation
tick copied to clipboard

Error in HawkesBasisKernels when n_basis is not specified

Open Jbollenbacher opened this issue 3 years ago • 1 comments

I've encountered a critical error in HawkesBasisKernels in tick version 0.7.0.1.

Minimal error reproduction example:

import numpy as np
from tick.hawkes import HawkesBasisKernels

hawkes_model = HawkesBasisKernels(kernel_support = 4)
ticks = [[np.array([1.,2.,3.,4.,5.])]]

hawkes_model = hawkes_model.fit(ticks)

Error:

RuntimeError                              Traceback (most recent call last)
<ipython-input-7-0a26049ca8d2> in <module>
      5 ticks = [[np.array([1.,2.,3.,4.,5.])]]
      6 
----> 7 hawkes_model = hawkes_model.fit(ticks)

~/.local/lib/python3.8/site-packages/tick/hawkes/inference/hawkes_basis_kernels.py in fit(self, events, end_times, baseline_start, amplitudes_start, basis_kernels_start)
    204         """
    205         LearnerHawkesNoParam.fit(self, events, end_times=end_times)
--> 206         self.solve(baseline_start=baseline_start,
    207                    amplitudes_start=amplitudes_start,
    208                    basis_kernels_start=basis_kernels_start)

~/.local/lib/python3.8/site-packages/tick/solver/base/solver.py in solve(self, *args, **kwargs)
    107     def solve(self, *args, **kwargs):
    108         self._start_solve()
--> 109         self._solve(*args, **kwargs)
    110         self._end_solve()
    111         return self.solution

~/.local/lib/python3.8/site-packages/tick/hawkes/inference/hawkes_basis_kernels.py in _solve(self, baseline_start, amplitudes_start, basis_kernels_start)
    260                 prev_basis_kernels = self.basis_kernels.copy()
    261 
--> 262             rel_ode = self._learner.solve(self.baseline, self.basis_kernels,
    263                                           self._amplitudes_2d,
    264                                           self.ode_max_iter, self.ode_tol)

~/.local/lib/python3.8/site-packages/tick/hawkes/inference/build/hawkes_inference.py in solve(self, mu, gdm, auvd, max_iter_gdm, max_tol_gdm)
    934     def solve(self, mu: 'ArrayDouble &', gdm: 'ArrayDouble2d &', auvd: 'ArrayDouble2d &', max_iter_gdm: 'ulong', max_tol_gdm: 'double') -> "double":
    935         r"""solve(HawkesBasisKernels self, ArrayDouble & mu, ArrayDouble2d & gdm, ArrayDouble2d & auvd, ulong max_iter_gdm, double max_tol_gdm) -> double"""
--> 936         return _hawkes_inference.HawkesBasisKernels_solve(self, mu, gdm, auvd, max_iter_gdm, max_tol_gdm)
    937 
    938     def get_kernel_support(self) -> "double":

RuntimeError: basis functions / gdm argument must be an array of shape (1, 10)

This error for some reason does not effect the example here, despite having the same type for ticks.

Jbollenbacher avatar Apr 29 '21 03:04 Jbollenbacher

This problem appears to occur only when n_basis=None (which is the default value). If you specify n_basis, then the error does not occur.

Jbollenbacher avatar Apr 29 '21 15:04 Jbollenbacher