dynamicslab / pysindy

A package for the sparse identification of nonlinear dynamical systems from data
https://pysindy.readthedocs.io/en/latest/
Other
1.36k stars 304 forks source link

[BUG] TypeError for keyword normalize when instantiating optimizer. #497

Closed sebzuddas closed 1 month ago

sebzuddas commented 1 month ago

Unexpected keyword argument 'normalize' when instantiating LinearRegression

When running an example program, PySINDy seems to instantiate a LinearRegression object when creating the optimizer ps.STLSQ, and throws a TypeError: TypeError: LinearRegression.__init__() got an unexpected keyword argument 'normalize'.

Reproducing code example:

import pysindy

poly_order = 3  # Adjust based on your problem
feature_library = ps.PolynomialLibrary(degree=poly_order)

lag = 1

# stack lagged data
X = np.column_stack([np.roll(self.training_input_data, i) for i in range(lag+1)] + 
                            [np.roll(self.training_output_data, i) for i in range(lag+1)])

#remove rows due to shifting
X = X[lag:, :]
self.training_output_data = self.training_output_data[lag:]

optimizer = ps.STLSQ(threshold=0.1)# ERROR THROWN HERE

model = ps.SINDy(feature_names=["power", "input"], feature_library=feature_library, optimizer=optimizer) # SAME ERROR THROWN HERE WHEN REMOVING ps.STLSQ() AND REMOVING OPTIMIZER.

model.fit(X, t=1)

model.print()

Error message:

Exception has occurred: TypeError
LinearRegression.__init__() got an unexpected keyword argument 'normalize'
  File "/Users/sebastianozuddas/Programming/Python/HAOS_Websocket/SystemIdentification.py", line 112, in fit_model_pysindy
    optimizer = ps.STLSQ(threshold=0.1)#where threshold is Lambda
                ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sebastianozuddas/Programming/Python/HAOS_Websocket/main.py", line 92, in main
    test.fit_model_pysindy()
  File "/Users/sebastianozuddas/Programming/Python/HAOS_Websocket/main.py", line 118, in <module>
    asyncio.run(main())
TypeError: LinearRegression.__init__() got an unexpected keyword argument 'normalize'

PySINDy/Python version information:

>>> import sys, pysindy; print(pysindy.__version__, sys.version)
1.3.0 3.12.2 | packaged by conda-forge | (main, Feb 16 2024, 20:54:21) [Clang 16.0.6 ]
sebzuddas commented 1 month ago

Issue found. When installing via conda install pysindy, an older version of pysindy is installed. Installing with pip install pysindy doesn't throw the error.