Skip to main content

This project is an extension of the wisardpkg library and provides additional machine learning models based on the WiSARD architecture, including symbolic capabilities. It offers implementations of WiSARD-based models with high performance, easy installation, and a unified usage pattern.

Project description

Symbolicwisardpkg

Description:

This project is an extension of the wisardpkg library that expands the WiSARD ecosystem by introducing new models and functionalities while preserving the original design principles of simplicity, performance, and ease of use.

The library provides machine learning models based on the WiSARD architecture, supporting supervised, unsupervised, and semi-supervised learning paradigms. In addition to the classical WiSARD model, this project introduces neuro-symbolic extensions that enable the direct incorporation of symbolic knowledge into weightless neural networks.

The following WiSARD-based models are made available:

  • WiSARD: the classical weightless neural network model based on RAM memories.

  • SWiSARD: a neuro-symbolic extension of WiSARD that allows the direct insertion of logical rules into discriminators, enabling hybrid learning from rules and examples.

  • ClusWiSARD: a clustering-based WiSARD model for unsupervised learning.

to install:

python:


pip install Symbolicwisardpkg

Works to python2 and pyhton3.

If you are on Linux and not in a virtual environment, you may need to run as superuser.

obs:

To install on windows platform you can use anaconda and do:


python -m pip install Symbolicwisardpkg

c++:

copy the file Symbolicwisardpkg.hpp inside your project


include/Symbolicwisardpkg.hpp

to uninstall:


pip uninstall Symbolicwisardpkg

to import:

python:

import Symbolicwisardpkg as wp

c++:

# include "Symbolicwisardpkg.hpp"



namespace wp = Symbolicwisardpkg;

to use:

WiSARD

WiSARD with bleaching by default:

python:

# load input data, just zeros and ones  

X = [

      [1,1,1,0,0,0,0,0],

      [1,1,1,1,0,0,0,0],

      [0,0,0,0,1,1,1,1],

      [0,0,0,0,0,1,1,1]

    ]



# load label data, which must be a string array

y = [

      "cold",

      "cold",

      "hot",

      "hot"

    ]





addressSize = 3     # number of addressing bits in the ram

ignoreZero  = False # optional; causes the rams to ignore the address 0



# False by default for performance reasons,

# when True, WiSARD prints the progress of train() and classify()

verbose = True



wsd = wp.Wisard(addressSize, ignoreZero=ignoreZero, verbose=verbose)







# train using the input data

wsd.train(X,y)



# classify some data

out = wsd.classify(X)



# the output of classify is a string list in the same sequence as the input

for i,d in enumerate(X):

    print(out[i],d)

SWiSARD

SWiSARD with bleaching by default:

python:

# load input data, just zeros and ones  

X = [

      [1,1,1,0,0,0,0,0],

      [1,1,1,1,0,0,0,0],

      [0,0,0,0,1,1,1,1],

      [0,0,0,0,0,1,1,1]

    ]



# load label data, which must be a string array

y = [

      "cold",

      "cold",

      "hot",

      "hot"

    ]



addressSize = 3     # number of addressing bits in the ram

ignoreZero  = False # optional; causes the rams to ignore the address 0

verbose = True      # optional; prints the progress of train() and classify()



wsd = wp.Wisard(addressSize, ignoreZero=ignoreZero, verbose=verbose)



# Add symbolic rules to discriminators

# variableIndexes maps variable names to indices in the input vector

# Example: if the vector has 8 positions [0,1,2,3,4,5,6,7], we can name:

# - x0 for index 0, x1 for index 1, etc.



# Add rule for class "cold": (x0 * x1) + (x0 * x2)

# This means: (position 0 AND position 1) OR (position 0 AND position 2)

variableIndexes_cold = {

    "x0": 0,  # first position of the vector

    "x1": 1,  # second position of the vector

    "x2": 2   # third position of the vector

}

rule_cold = "(x0 * x1) + (x0 * x2)"  # boolean expression: * = AND, + = OR, ! = NOT

alpha = 10  # rule weight (the higher, the more influence the rule has)



wsd.addRule("cold", variableIndexes_cold, rule_cold, alpha)



# Add rule for class "hot": (x4 * x5) + (x5 * x6)

variableIndexes_hot = {

    "x4": 4,

    "x5": 5,

    "x6": 6

}

rule_hot = "(x4 * x5) + (x5 * x6)"

wsd.addRule("hot", variableIndexes_hot, rule_hot, alpha)



# Train using trainWithRules (considers rules during training)

wsd.trainWithRules(X, y)



# Classify using classifyWithRules (considers rules during classification)

out = wsd.classifyWithRules(X)



# the output of classifyWithRules is a string list in the same sequence as the input

for i, d in enumerate(X):

    print(out[i], d)

ClusWiSARD

ClusWiSARD with bleaching by default:

addressSize        = 3    # number of addressing bits in the ram.

minScore           = 0.1  # min score of training process

threshold          = 10   # limit of training cycles by discriminator

discriminatorLimit = 5    # limit of discriminators by clusters



# False by default for performance reasons

# when enabled,e ClusWiSARD prints the progress of train() and classify()

verbose = True



clus = ClusWisard(addressSize, minScore, threshold, discriminatorLimit, verbose=True)







# train using the input data

clus.train(X,y)



# optionally you can train using arbitrary labels for the data

# input some labels in a dict,

# the keys must be integer indices indicating which input array the entry is associated to,

# the values are the labels which must be strings

y2 = {

  1: "cold",

  3: "hot"

}



clus.train(X,y2)



# classify some data

out = clus.classify(X)



# the output of classify is a string list in the same sequence as the input

for i,d in enumerate(X):

    print(out[i], d)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

symbolicwisardpkg-0.1.5.tar.gz (138.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

symbolicwisardpkg-0.1.5-cp312-cp312-win_amd64.whl (255.7 kB view details)

Uploaded CPython 3.12Windows x86-64

File details

Details for the file symbolicwisardpkg-0.1.5.tar.gz.

File metadata

  • Download URL: symbolicwisardpkg-0.1.5.tar.gz
  • Upload date:
  • Size: 138.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.10

File hashes

Hashes for symbolicwisardpkg-0.1.5.tar.gz
Algorithm Hash digest
SHA256 f12e8f9fca774dc3c8c3f3ceb4df46938c54e08283d36f9c3faf1612c5d9cdce
MD5 5e04ca8a9829a457f0582924d8124bdf
BLAKE2b-256 7325729b30b7af1293635684471206ebecd0697abc04d103e7c9d00679bffb38

See more details on using hashes here.

File details

Details for the file symbolicwisardpkg-0.1.5-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for symbolicwisardpkg-0.1.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e9f77b1b8103933e2fac0d3654ecf3267733dd879e91c6c82406f08cd3eb0588
MD5 1e15b4d1c637a45035f7f02f184ba7a7
BLAKE2b-256 6edd2a2fbecc28b453b315148e8a0de4945ee2610e55744e95272d463672cbcf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page