-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathtest.cpp
More file actions
61 lines (54 loc) · 1.75 KB
/
Copy pathtest.cpp
File metadata and controls
61 lines (54 loc) · 1.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//
// test.cpp
//
//
// Created by Maurizio Giordano on 20/03/2014
//
// the WISARD C++ implementation
//
#include "wisard.hpp"
#include <iostream>
#include <string>
wkey_t *mkTuple(discr_t *discr, int *sample) {
int i,j;
/* alloc tuple array */
wkey_t *intuple = (wkey_t *)malloc(discr->n_ram * sizeof(wkey_t));
int x;
for (i = 0; i < discr->n_ram; i++)
for (j = 0; j < discr->n_bit; j++) {
x = discr->map[(i * discr->n_bit) + j] % discr->size;
intuple[i] += (2^(discr->n_bit -1 - j)) * sample[x];
}
return intuple;
}
int main() {
int X[8][8] ={{0, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 1, 1, 1, 1, 0, 0},
{0, 0, 1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 0, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 1, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 1}};
std::string y[8] = {"A","A","B","B","A","A","B","A"};
wvalue_t responses[2];
int s;
int test[8] = {0, 0, 1, 0, 0, 0, 1, 0};
// init WiSARD (create discriminator for each class "A" and "B")
discr_t wisard[2];
wisard[0] = *makeDiscr(2,8,"A","random",0);
wisard[1] = *makeDiscr(2,8,"B","random",0);
// train WiSARD
for (s=0; s < 8; s++)
if (y[s] == "A")
trainDiscr(wisard,mkTuple(wisard,X[s]));
else
trainDiscr(wisard+1,mkTuple(wisard+1,X[s]));
// predict by WiSARD
responses[0] = classifyDiscr(wisard,mkTuple(wisard,test));
responses[1] = classifyDiscr(wisard+1,mkTuple(wisard+1,test));
if (responses[0] > responses[1])
std::cout << "Response is A" << std::endl;
else
std::cout << "Response is B" << std::endl;
}