A "Tsetlin Machine" solves complex pattern recognition problems with easy-to-interpret propositional formulas, and is composed of a collective of Tsetlin Automata. The idea of the machine was proposed in a paper by Ole-Christoffer Granmo.
- Clone this repository using
git clone https://github.com/KhaledSharif/TsetlinMachine.git
- Inside the repository root folder, run
cargo test
- The test will run the XOR example found in
tests/xor.rs
- The test will only pass if the Tsetlin Machine reaches an accuracy greater than 99% on XOR
- Get the MNIST data from Kaggle in CSV form
- Create a folder called
mnist
in the same folder that containssrc
andtests
- Copy
train.csv
andtest.csv
into the newly createdmnist
folder - Run
cargo run
from the repository root folder - Read the code inside
src/main.rs
to get a better understanding
let mut tm = tsetlin_machine();
tm.create(2, 2, 10);
let mut rng = thread_rng();
let mut average_error : f32 = 1.0;
for e in 0..1000
{
let input_vector = &inputs[e % 4];
{
let output_vector = tm.activate(input_vector.to_vec());
let mut correct = false;
if (input_vector[0] == input_vector[1]) && (!output_vector[0] && output_vector[1])
{
correct = true;
}
else if output_vector[0] && !output_vector[1]
{
correct = true;
}
average_error = 0.99 * average_error + 0.01 * (if !correct {1.0} else {0.0});
println!("{} {} -> {} {} | {}", input_vector[0], input_vector[1], output_vector[0], output_vector[1], average_error);
}
tm.learn(&outputs[e % 4], 4.0, 4.0, &mut rng);
}
true true -> false true | 0.00007643679
false false -> false true | 0.00007567242
false true -> true false | 0.0000749157
true false -> true false | 0.00007416654
true true -> false true | 0.000073424875
This repository is a translation of this repository, which is an implementation of the Tsetlin Machine in C++.