Metadata-Version: 2.1
Name: pyNNRW
Version: 0.1.1
Summary: A Python library for NNRW (neural network with random weights)
Home-page: https://github.com/zhangys11/pyNNRW
Author: Yinsheng Zhang (Ph.D.)
Author-email: oo@zju.edu.cn
License: UNKNOWN
Project-URL: Bug Tracker, https://github.com/zhangys11/pyNNRW/issues
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)
Classifier: Operating System :: OS Independent
Classifier: Topic :: Scientific/Engineering :: Mathematics
Requires-Python: >=3.6
Description-Content-Type: text/markdown
License-File: LICENCE

---- pyNNRW ----

pyNNRW: A Python library for NNRW (neural network with random weights). 
Basic functions:
1. Implements 2 fundamental NNRW flavors, i.e., ELM and RVFL.  
2. Performance comparison with main machine learning models, e.g., SVM, decision tree, MLP.   
3. NNRW-based ensembles (under development).

---- Installation ----

pip install pyNNRW

---- How to use ----

Download the sample dataset from the /data folder.
There are two data files: 1. 7044X_RAMAN.csv 2. 7143X_UV.csv.  
The two files are the Raman and UV (ultra-violet) spectroscopic profiling data of herb samples from 4 different regions.  

Use the following sample code to use the package:

<1> Use low-level classes, e.g., ELM, RVFL. The following code trains and tests an ELM model.

# ===============================
# Import library
# ===============================
# import the library
from pyNNRW.pyNNRW import *

# ===============================
# Load dataset
# ===============================
df = pd.read_csv('7044X_RAMAN.csv')
X = np.array(df.iloc[:,1:])
y = np.array(df.iloc[:,0]) # 1st col is the label
n_classes = len(set(y))
x_train, x_test, t_train, t_test = train_test_split(X, y, test_size=0.2)
t_train = to_categorical(t_train, n_classes).astype(np.float32)
t_test = to_categorical(t_test, n_classes).astype(np.float32)
# print(x_train.shape, x_test.shape, t_train.shape, t_test.shape)

# ===============================
# set ELM parameters
# ===============================
n_hidden_nodes = L #x_train.shape[1]
loss = 'mean_squared_error' # 'mean_absolute_error'
activation = 'sigmoid' # 'identity'

# ===============================
# Instantiate ELM
# ===============================
model = ELM(
    n_input_nodes = x_train.shape[1],
    n_hidden_nodes = n_hidden_nodes,
    n_output_nodes = n_classes,
    loss = loss,
    activation=activation,
    name='elm'
)

# ===============================
# Training
# ===============================
    
train_loss, train_acc, train_precision, train_recall = model.evaluate(x_train, t_train, metrics=['loss', 'accuracy', 'precision', 'recall'])

# ===============================
# Validation
# ===============================
val_loss, val_acc, val_precision, val_recall = model.evaluate(x_test, t_test, metrics=['loss', 'accuracy', 'precision', 'recall'])


<2> You may also use high-level APIs, as follows.

# train and test an ELM model
train_acc, val_acc, t = ELMClf(X, y, L = 20, verbose = False) # L is hidden layer nodes

# train and test a RVFL model
train_acc, val_acc, t = RVFLClf(X, y, L = 20, verbose = False) # L is hidden layer nodes

# Conduct a performance test for ELM at varied L hyper-parameters (1~60). Each iteration is averaged on 20 rounds.
train_accs, val_accs, ts = PerformenceTests(ELMClf, X, y, Ls = list(range(1, 60)), N = 20)

