Installation

  • Install the current PyPI release:

    $ pip install waveletml==0.2.0
    
  • Install directly from source code:

    $ git clone https://github.com/thieu1995/WaveletML.git
    $ cd WaveletML
    $ python setup.py install
    
  • In case, you want to install the development version from Github:

    $ pip install git+https://github.com/thieu1995/WaveletML
    

After installation, you can import MetaPerceptron as any other Python module:

$ python
>>> import waveletml
>>> waveletml.__version__

Examples

Classification

In this example, we will use Adam optimizer to train Wavelet Weighted Linear Neural Network (WNN) for a classification task.

from sklearn.datasets import load_iris
from waveletml import Data, GdWnnClassifier

# Load data object
X, y = load_iris(return_X_y=True)
data = Data(X, y)

# Split train and test
data.split_train_test(test_size=0.2, random_state=2, inplace=True, shuffle=True)
print(data.X_train.shape, data.X_test.shape)

# Scaling dataset
data.X_train, scaler_X = data.scale(data.X_train, scaling_methods=("standard", "minmax"))
data.X_test = scaler_X.transform(data.X_test)

data.y_train, scaler_y = data.encode_label(data.y_train)
data.y_test = scaler_y.transform(data.y_test)

print(type(data.X_train), type(data.y_train))

# Create model
model = GdWnnClassifier(size_hidden=10, wavelet_fn="morlet", act_output=None,
                        epochs=100, batch_size=16, optim="Adam", optim_params=None,
                        valid_rate=0.1, seed=42, verbose=True, device=None)
# Train the model
model.fit(X=data.X_train, y=data.y_train)

# Test the model
y_pred = model.predict(data.X_test)
print(y_pred)
print(model.predict_proba(data.X_test))

# Calculate some metrics
print(model.evaluate(y_true=data.y_test, y_pred=y_pred, list_metrics=["F2S", "CKS", "FBS", "PS", "RS", "NPV", "F1S"]))

# Print model parameters
for k, v in model.network.named_parameters():
    print(f"{k}: {v.shape}, {v.data}")

Regression

In this example, we will use Genetic Algorithm - GA to train Wavelet Summation Neural Network (WNN) for a regression task.

from sklearn.datasets import load_diabetes
from waveletml import Data, MhaWnnRegressor, CustomWaveletSummationNetwork

# Load data object
X, y = load_diabetes(return_X_y=True)
data = Data(X, y)

# Split train and test
data.split_train_test(test_size=0.2, random_state=2, inplace=True)
print(data.X_train.shape, data.X_test.shape)

# Scaling dataset
data.X_train, scaler_X = data.scale(data.X_train, scaling_methods=("standard", "minmax"))
data.X_test = scaler_X.transform(data.X_test)

data.y_train, scaler_y = data.scale(data.y_train, scaling_methods=("standard", "minmax"))
data.y_test = scaler_y.transform(data.y_test.reshape(-1, 1))

print(type(data.X_train), type(data.y_train))

# Create model
model = MhaWnnRegressor(size_hidden=10, wavelet_fn="morlet", act_output=None,
                        optim="BaseGA", optim_params={"epoch": 40, "pop_size": 20},
                        obj_name="MSE", seed=42, verbose=True, wnn_type=CustomWaveletSummationNetwork,
                        lb=None, ub=None, mode='single', n_workers=None, termination=None)
# Train the model
model.fit(data.X_train, data.y_train)

# Test the model
y_pred = model.predict(data.X_test)
print(y_pred)

# Calculate some metrics
print(model.evaluate(y_true=data.y_test, y_pred=y_pred, list_metrics=["R2", "NSE", "MAPE", "NNSE"]))

# Print model parameters
for k, v in model.network.named_parameters():
    print(f"{k}: {v.shape}, {v.data}")

For more use cases, please read the examples folder.