-
Notifications
You must be signed in to change notification settings - Fork 1
/
utility.pl
89 lines (81 loc) · 2.83 KB
/
utility.pl
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/***
* UNIVPM - Intelligenza Artificiale (a.a. 2020/2021)
* Albero di Decisione binario con diverse politiche di scelta dell'attributo (Gini, Gain, Gainratio)
*
* Conti Edoardo - [email protected]
* Federici Lorenzo - [email protected]
* Melnic Andrian - [email protected]
*
* utility.pl
***/
/*
* calc_classe_dominante(+Classi, -ClasseDominante)
* +Classi = lista di foglie risultanti (es. [sick, healthy, healthy])
* -ClasseDominante = classe con maggiori occorrenze in Classi (es. healthy)
* se non esiste classe dominante (probabilità 1/2) si riporta la foglia [sick, healthy]
*/
calc_classe_dominante(_, [sick, healthy]):-
occurrences(_, sick, healthy).
calc_classe_dominante(Classi, ClasseDominante):-
\+ occurrences(Classi, sick, healthy),
calc_prob_classi(Classi, ClasseDominante).
/*
* occurrences(+Classi, -Classe1, -Classe2)
* verifica le occorrenze delle due classi nella lista di foglie Classi
*/
occurrences([],_A,_B,N,N).
occurrences([H|T],A,B,N0,M0) :-
elem_x_count(H,A,N1,N0),
elem_x_count(H,B,M1,M0),
occurrences(T,A,B,N1,M1).
occurrences(List,A,B) :-
dif(A,B),
occurrences(List,A,B,0,0).
elem_x_count(X,X,(Old+1),Old):- !.
elem_x_count(_,_,Old,Old):- !.
/*
* calc_prob_classi(+Lista, -Classe)
* ricava Classe con il maggior numero di occorrenze in Lista
*/
calc_prob_classi(List, X) :-
aggregate(max(N1, X1), conteggio_elementi(X1, N1, List), max(N1, X)).
% versione con Occorrenze come output
% calc_prob_classi(L, N, X) :-
% aggregate(max(N1,X1), conteggio_elementi(X1,N1,L), max(N,X)).
/*
* conteggio_elementi(-X, -Count, +Lista)
* conta le occorrenze di X in Lista
*/
conteggio_elementi(X, Count, List) :-
aggregate(count, member(X, List), Count).
/*
* log2(+P, -Log2ris)
* predicato per il calcolo del logaritmo in base 2
*/
log2(P, Log2ris):-
log(P,X),
log(2,Y),
Log2ris is X/Y.
/*
* del(-Attributo, -Attributi, -AttributiRimanenti)
* +Attributo = attributo da rimuovere
* +Attributi = lista degli attributi dal quale rimuovere Attributo
* -AttributiRimanenti = lista degli attributi rimanenti in seguito alla rimozione
*/
del(T,[T|C],C) :- !.
del(A,[T|C],[T|C1]) :-
del(A,C,C1).
/*
* concat_path_dataset(+Dataset, -PathDataset, -PathTraining, -PathTest)
* +Dataset = parametro di riferimento del dataset scelto
* -PathDataset = stringa contenente il path degli attributi del Dataset
* -PathTraining = stringa contenente il path del Training Set
* -PathTest = stringa contenente il path del Test Set
*/
concat_path_dataset(Dataset, PathDataset, PathTraining, PathTest) :-
atom_concat('data/', Dataset, Path1),
atom_concat(Path1, '/', Path2),
atom_concat(Path2, Dataset, Path3),
atom_concat(Path3, '_dataset.pl', PathDataset),
atom_concat(Path3, '_training_set.pl', PathTraining),
atom_concat(Path3, '_test_set.pl', PathTest).