Skip to main content

Python-based implementation of PSyKE, i.e. a Platform for Symbolic Knowledge Extraction

Project description

PSyKE

PSyKE Logo

Some quick links:

Intro

PSyKE (Platform for Symbolic Knowledge Extraction) is intended as a library for extracting symbolic knowledge (in the form of logic rules) out of sub-symbolic predictors.

More precisely, PSyKE offers a general purpose API for knowledge extraction, and a number of different algorithms implementing it, supporting both classification and regression problems. The extracted knowledge consists of a Prolog theory (i.e., a list of Horn clauses) or an OWL ontology containing SWRL rules.

PSyKE relies on 2ppy (tuProlog in Python) for logic support, which in turn is based on the 2p-Kt logic ecosystem.

Class diagram overview:

PSyKE class diagram

PSyKE is designed around the notion of extractor. More precisely, an Extractor is any object capable of extracting a logic Theory out of a trained sub-symbolic regressor or classifier. Accordingly, an Extractor is composed of (i) a trained predictor (i.e., black-box used as an oracle) and (ii) a set of feature descriptors, and it provides two methods:

  • extract: returns a logic theory given a dataset;
  • predict: predicts a value using the extracted rules (instead of the original predictor).

Currently, the supported extraction algorithms are:

  • CART, straightforward extracts rules from both classification and regression decision trees;
  • Classification:
    • REAL (Rule Extraction As Learning), generates and generalizes rules strarting from dataset samples;
    • Trepan, generates rules by inducing a decision tree and possibly exploiting m-of-n expressions;
  • Regression:
    • ITER, builds and iteratively expands hypercubes in the input space. Each cube holds a constant value, that is the estimated output for the samples inside the cube;
    • GridEx, extension of the ITER algorithm that produces shorter rule lists retaining higher fidelity w.r.t. the predictor.
    • GridREx, extension of GridEx where the output of each hypercube is a linear combination of the input variables and not a constant value.

Users may exploit the PEDRO algorithm, included in PSyKE, to tune the optimal values for GridEx and GridREx hyper-parameters.

We are working on PSyKE to extend its features to encompass explainable clustering tasks, as well as to make more general-purpose the supported extraction algorithms (e.g., by adding classification support to GridEx and GridREx).

Users

End users

PSyKE is deployed as a library on Pypi, and it can therefore be installed as Python package by running:

pip install psyke

Requirements

  • numpy 1.21.3+
  • pandas 1.3.4+
  • scikit-learn 1.0.1+
  • 2ppy 0.3.3+
Test requirements
  • skl2onnx 1.10.0+
  • onnxruntime 1.9.0+
  • parameterized 0.8.1+

Once installed, it is possible to create an extractor from a predictor (e.g. Neural Network, Support Vector Machine, K-Nearest Neighbor, Random Forest, etc.) and from the dataset used to train the predictor.

Note: the predictor must expose a method named predict to be properly used as an oracle.

End users

A brief example is presented in demo.py script in the demo folder. Using sklearn iris dataset we train a K-Nearest Neighbor to predict the correct output class. Before training, we make the dataset discrete. After that we create two different extractors: REAL and Trepan. We output the extracted theory for both extractors.

REAL extracted rules:

iris(PetalLength, PetalWidth, SepalLength, SepalWidth, setosa) :- PetalWidth =< 1.0.
iris(PetalLength1, PetalWidth1, SepalLength1, SepalWidth1, versicolor) :- PetalLength1 > 4.9, SepalWidth1 in [2.9, 3.2].
iris(PetalLength2, PetalWidth2, SepalLength2, SepalWidth2, versicolor) :- PetalWidth2 > 1.6.
iris(PetalLength3, PetalWidth3, SepalLength3, SepalWidth3, virginica) :- SepalWidth3 =< 2.9.
iris(PetalLength4, PetalWidth4, SepalLength4, SepalWidth4, virginica) :- SepalLength4 in [5.4, 6.3].
iris(PetalLength5, PetalWidth5, SepalLength5, SepalWidth5, virginica) :- PetalWidth5 in [1.0, 1.6].

Trepan extracted rules:

iris(PetalLength6, PetalWidth6, SepalLength6, SepalWidth6, virginica) :- PetalLength6 > 3.0, PetalLength6 in [3.0, 4.9].
iris(PetalLength7, PetalWidth7, SepalLength7, SepalWidth7, versicolor) :- PetalLength7 > 3.0.
iris(PetalLength8, PetalWidth8, SepalLength8, SepalWidth8, setosa) :- true.

Developers

Working with PSyKE codebase requires a number of tools to be installed:

  • Python 3.9+
  • JDK 11+ (please ensure the JAVA_HOME environment variable is properly configured)
  • Git 2.20+

Develop PSyKE with PyCharm

To participate in the development of PSyKE, we suggest the PyCharm IDE.

Importing the project

  1. Clone this repository in a folder of your preference using git_clone appropriately
  2. Open PyCharm
  3. Select Open
  4. Navigate your file system and find the folder where you cloned the repository
  5. Click Open

Developing the project

Contributions to this project are welcome. Just some rules:

  • We use git flow, so if you write new features, please do so in a separate feature/ branch
  • We recommend forking the project, developing your code, then contributing back via pull request
  • Commit often
  • Stay in sync with the develop (or master) branch (pull frequently if the build passes)
  • Do not introduce low quality or untested code

Issue tracking

If you meet some problems in using or developing PSyKE, you are encouraged to signal it through the project "Issues" section on GitHub.

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

psyke-0.2.2.dev221.tar.gz (84.6 kB view details)

Uploaded Source

Built Distribution

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

psyke-0.2.2.dev221-py3-none-any.whl (89.2 kB view details)

Uploaded Python 3

File details

Details for the file psyke-0.2.2.dev221.tar.gz.

File metadata

  • Download URL: psyke-0.2.2.dev221.tar.gz
  • Upload date:
  • Size: 84.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.14

File hashes

Hashes for psyke-0.2.2.dev221.tar.gz
Algorithm Hash digest
SHA256 a9baeb425f4f087cb276787a44b67368e9b4452598acc2f4e4df1e040d0233c8
MD5 810d3ae2659936a91bf8e374ec53e3ea
BLAKE2b-256 01eef75833da1b11b9d22bd0476df5588afd8e326fbdf056fd908252ad31d0a3

See more details on using hashes here.

File details

Details for the file psyke-0.2.2.dev221-py3-none-any.whl.

File metadata

  • Download URL: psyke-0.2.2.dev221-py3-none-any.whl
  • Upload date:
  • Size: 89.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.14

File hashes

Hashes for psyke-0.2.2.dev221-py3-none-any.whl
Algorithm Hash digest
SHA256 555c5868c4502eb1c4d49511af5fca52d3ffe9ac46a2f2dac166def7e96b0504
MD5 652405cbcb25fc5bd17309fcdc5e1af9
BLAKE2b-256 7cb02cfd150b37c583e3569b04e3a2502c8f2b6fb130e61f0b1a489b3f64bb87

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