Her er en simpel MATLAB-implementering af FP-Tree-associeringsalgoritmen til datamining. Denne kode finder hyppige varesæt og tilknytningsregler fra et givet transaktionsdatasæt.
```
% Opret den oprindelige transaktionsdatabase som et cellearray
transaktioner ={ ...
{'Brød', 'Mælk', 'Smør'}, ...
{'Brød', 'Bleer', 'Øl', 'Æg'}, ...
{'Mælk', 'Bleer', 'Øl', 'Cola'}, ...
{'Brød', 'Mælk', 'Bleer', 'Cola'}, ...
{'Brød', 'Æg', 'Øl'} ...
};
% Konverter transaktioner til en binær matrix
binære Transaktioner =nuller(størrelse(transaktioner, 1), størrelse(unik([transaktioner{:}]), 2));
for i =1:størrelse(transaktioner, 1)
for j =1:størrelse(transaktioner{i}, 2)
binære Transaktioner(i, strcmp(transaktioner{i}{j}, unik([transaktioner{:}]))) =1;
ende
ende
% Opret et hyppigt mønstertræ fra den binære transaktionsmatrix
fpTree =fptree(binære Transaktioner);
% Find alle hyppige emnesæt med minimum støtte på 2
frequentItemsets =find_frequent_itemsets(fpTree, 2);
% Generer tilknytningsregler fra de hyppige varesæt
associationRules =generere_association_rules(hyppige Varesæt);
% Vis de hyppige varesæt og tilknytningsregler
disp('Hyppige emnesæt:');
disp('------------------------');
for i =1:længde(frequentItemsets)
fprintf('%s\n', strjoin(frequentItemsets{i}, ', '));
ende
disp('Foreningsregler:');
disp('------------------------');
for i =1:længde(associationRegler)
lhs =strjoin(associationRules{i}.lhs, ', ');
rhs =strjoin(associationRegler{i}.rhs, ', ');
tillid =associationRegler{i}.tillid * 100;
support =associationRegler{i}.support * 100;
fprintf('Hvis %s, så %s. Tillid =%f%%, Support =%f%%\n', lhs, rhs, tillid, support);
ende
% Funktion til at skabe et hyppigt mønstertræ fra en binær transaktionsmatrix
funktion fpTree =fptree(transaktioner)
headerTable =create_header_table(transaktioner);
root =add_node(-1, headerTable.id);
fpTree =struct('root', root, 'headerTable', headerTable);
for i =1:størrelse(transaktioner, 1)
add_transaction(transaktioner(i, :), root, headerTable);
ende
ende
% Funktion til at oprette en overskriftstabel ud fra transaktionerne
function headerTable =create_header_table(transaktioner)
headerTable =struct();
uniqueItems =unik([transaktioner{:}]);
for i =1:størrelse(uniqueItems, 2)
headerTable(uniqueItems{i}).id =i;
headerTable(uniqueItems{i}).count =sum(sum(transaktioner ==unikkeItems{i}));
headerTable(uniqueItems{i}).link =[];
ende
ende
% Funktion til at tilføje en transaktion til FP-træet
funktion add_transaction(transaktion, node, headerTable)
hvis den er tom (transaktion)
returnere;
ende
% Find varen med den højeste frekvens i transaktionen
maxFrequency =0;
maxItem ='';
for i =1:længde(transaktion)
if headerTable(transaction{i}).count> maxFrequency
maxFrequency =headerTable(transaktion{i}).count;
maxItem =transaktion{i};
ende
ende
% Hvis noden ikke har et underordnet til maxItem, skal du oprette en
if isempty(node.children)
node.children(maxItem).id =headerTable(maxItem).id;
node.children(maxItem).count =1;
node.children(maxItem).link =headerTable(maxItem).link;
node.children(maxItem).parent =node;
andet
if isfield(node.children, maxItem)
node.children(maxItem).count =node.children(maxItem).count + 1;
andet
node.children(maxItem).id =headerTable(maxItem).id;
node.children(maxItem).count =1;
node.children(maxItem).link =headerTable(maxItem).link;
node.children(maxItem).parent =node;
ende
ende
% Opdater overskriftstabellen
headerTable(maxItem).link =node;
% Tilføj rekursivt de resterende elementer til træet
for i =1:længde(transaktion)
if ~(strcmp(maxItem, transaktion{i}))
add_transaction(transaction(2:end), node.children(maxItem), headerTable);
ende
ende
ende
% Funktion til at finde alle hyppige emnesæt fra FP-træet
function frequentItemsets =find_frequent_itemsets(fpTree, minSupport)
frequentItemsets ={};
% Find hyppige emnesæt fra hver gren af FP-træet rekursivt
for gren i fpTree.root.children.keys
branchFrequency =fpTree.headerTable(branch).count;
% Hvis grenfrekvensen er mindre end minimumsstøtten, fortsæt til næste gren
hvis branchFrequency
fortsætte;
ende
% Tilføj grenelementet som et hyppigt elementsæt
frequentItemsets{end + 1} ={branch};
% Find hyppige emnesæt for alle undertræer i den aktuelle gren rekursivt
subFrequentItemsets =find_frequent_itemsets(subtrees(fpTree.root, branch), minSupport);
% Tilføj grenelementet til alle de hyppige elementsæt fra undertræet
for i =1:length(subFrequentItemsets)
subFrequentItemsets{i}{1} =[branch, subFrequentItemsets{i}{1}];
frequentItemsets{end + 1} =subFrequentItemsets{i};
ende
ende
ende
% Funktion til at generere tilknytningsregler fra de hyppige varesæt
funktion associationRegler =generere_tilknytning_regler(hyppige Varesæt)
associationRules ={};
% Generer alle mulige tilknytningsregler for hvert hyppigt varesæt
for varesæt =hyppige varesæt
for i =1:længde(varesæt)
% Opret antecedenten og konsekvensen for reglen
antecedent =itemset(1:i-1);
consequent =itemset(i+1:end);
% Beregn reglens støtte, selvtillid og løfteevne
support =100 * (find_support(union(antecedent, konsekvent)) / find_support(antecedent));
konfidens =100 * (find_support(union(antecedent, konsekvent)) / find_support(antecedent));
lift =tillid / (100 * find_support(konsequent) / find_support(antecedent));
% Tilføj tilknytningsreglen til listen
associationRules{end + 1} =struct('lhs', antecedent, 'rhs', consequent, 'confidence', confidence, 'support', support);
ende
ende
ende
% Funktion til at finde understøttelse af et varesæt
funktionssupport =find_support(varesæt)
støtte =0;
% Gentag alle transaktionerne og kontroller, om de indeholder varesættet
for i =1:størrelse(binære transaktioner, 1)
if all(binære Transaktioner(i, ermedlem(unik([binære Transaktioner{:}]), varesæt)))
støtte =støtte + 1;
ende
ende
ende
```