Her er en enkel MATLAB-implementering av FP-Tree assosiasjonsalgoritmen for data mining. Denne koden finner hyppige varesett og assosiasjonsregler fra et gitt transaksjonsdatasett.
```
% Opprett den opprinnelige transaksjonsdatabasen som en cellematrise
transaksjoner ={ ...
{'Brød', 'Melk', 'Smør'}, ...
{'Brød', 'Bleier', 'Øl', 'Egg'}, ...
{'Melk', 'Bleier', 'Øl', 'Cola'}, ...
{'Brød', 'Melk', 'Bleier', 'Cola'}, ...
{'Brød', 'Egg', 'Øl'} ...
};
% Konverter transaksjoner til en binær matrise
binære transaksjoner =nuller(størrelse(transaksjoner, 1), størrelse(unikk([transaksjoner{:}]), 2));
for i =1:størrelse(transaksjoner, 1)
for j =1:størrelse(transaksjoner{i}, 2)
binære Transaksjoner(i, strcmp(transaksjoner{i}{j}, unik([transaksjoner{:}]))) =1;
slutt
slutt
% Opprett et hyppig mønstertre fra den binære transaksjonsmatrisen
fpTree =fptree(binære transaksjoner);
% Finn alle hyppige varesett med minimum støtte på 2
frequentItemsets =find_frequent_itemsets(fpTree, 2);
% Generer assosiasjonsregler fra de hyppige varesettene
associationRules =generere_tilknytning_regler(frequentItemsets);
% Vis de hyppige varesettene og tilknytningsregler
disp('Hyppige varesett:');
disp('------------------------');
for i =1:length(frequentItemsets)
fprintf('%s\n', strjoin(frequentItemsets{i}, ', '));
slutt
disp('Foreningsregler:');
disp('------------------------');
for i =1:lengde(tilknytningsregler)
lhs =strjoin(association Rules{i}.lhs, ', ');
rhs =strjoin(association Rules{i}.rhs, ', ');
confidence =associationRegler{i}.confidence * 100;
support =associationRules{i}.support * 100;
fprintf('Hvis %s, så %s. Confidence =%f%%, Support =%f%%\n', lhs, rhs, confidence, support);
slutt
% Funksjon for å lage et hyppig mønstertre fra en binær transaksjonsmatrise
funksjon fpTree =fptree(transaksjoner)
headerTable =create_header_table(transaksjoner);
root =add_node(-1, headerTable.id);
fpTree =struct('root', root, 'headerTable', headerTable);
for i =1:størrelse(transaksjoner, 1)
add_transaction(transactions(i, :), root, headerTable);
slutt
slutt
% Funksjon for å lage en overskriftstabell fra transaksjonene
function headerTable =create_header_table(transaksjoner)
headerTable =struct();
uniqueItems =unik([transaksjoner{:}]);
for i =1:size(uniqueItems, 2)
headerTable(uniqueItems{i}).id =i;
headerTable(uniqueItems{i}).count =sum(sum(transaksjoner ==unikeItems{i}));
headerTable(uniqueItems{i}).link =[];
slutt
slutt
% Funksjon for å legge til en transaksjon til FP-treet
funksjon add_transaction(transaksjon, node, headerTable)
hvis det er tomt (transaksjon)
retur;
slutt
% Finn varen med høyest frekvens i transaksjonen
maxFrequency =0;
maxItem ='';
for i =1:lengde(transaksjon)
if headerTable(transaction{i}).count> maxFrequency
maxFrequency =headerTable(transaksjon{i}).count;
maxItem =transaksjon{i};
slutt
slutt
% Hvis noden ikke har et barn for maxItem, oppretter du 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;
ellers
if isfield(node.children, maxItem)
node.children(maxItem).count =node.children(maxItem).count + 1;
ellers
node.children(maxItem).id =headerTable(maxItem).id;
node.children(maxItem).count =1;
node.children(maxItem).link =headerTable(maxItem).link;
node.children(maxItem).parent =node;
slutt
slutt
% Oppdater overskriftstabellen
headerTable(maxItem).link =node;
% Legg til de gjenværende elementene i treet rekursivt
for i =1:lengde(transaksjon)
if ~(strcmp(maxItem, transaksjon{i}))
add_transaction(transaction(2:end), node.children(maxItem), headerTable);
slutt
slutt
slutt
% Funksjon for å finne alle hyppige elementsett fra FP-treet
function frequentItemsets =find_frequent_itemsets(fpTree, minSupport)
frequentItemsets ={};
% Finn hyppige elementsett fra hver gren av FP-treet rekursivt
for gren i fpTree.root.children.keys
branchFrequency =fpTree.headerTable(branch).count;
% Hvis grenfrekvensen er mindre enn minimumsstøtten, fortsett til neste gren
if branchFrequency
fortsette;
slutt
% Legg til grenelementet som et hyppig elementsett
frequentItemsets{end + 1} ={branch};
% Finn hyppige elementsett for alle undertrær i gjeldende gren rekursivt
subFrequentItemsets =find_frequent_itemsets(subtrees(fpTree.root, branch), minSupport);
% Legg til grenelementet til alle de hyppige elementsettene fra undertreet
for i =1:length(subFrequentItemsets)
subFrequentItemsets{i}{1} =[branch, subFrequentItemsets{i}{1}];
frequentItemsets{end + 1} =subFrequentItemsets{i};
slutt
slutt
slutt
% Funksjon for å generere assosiasjonsregler fra de hyppige varesettene
function associationRules =generer_tilknytning_regler(frequentItemsets)
associationRules ={};
% For hvert hyppige varesett, generer alle mulige tilknytningsregler
for itemset =frequentItemsets
for i =1:lengde(varesett)
% Opprett antecedenten og konsekvensen for regelen
antecedent =itemset(1:i-1);
consequent =itemset(i+1:slutt);
% Beregn støtten, selvtilliten og løftet til regelen
support =100 * (find_support(union(antecedent, konsekvent)) / find_support(antecedent));
konfidens =100 * (finn_støtte(union(forutgående, påfølgende)) / finn_støtte(forutgående));
løft =tillit / (100 * find_support(konsekvens) / find_support(antecedent));
% Legg til assosiasjonsregelen i listen
associationRules{end + 1} =struct('lhs', antecedent, 'rhs', consequent, 'confidence', confidence, 'support', support);
slutt
slutt
slutt
% Funksjon for å finne støtte for et varesett
funksjonsstøtte =finn_støtte(varesett)
støtte =0;
% Iterer gjennom alle transaksjonene og sjekk om de inneholder varesettet
for i =1:størrelse(binære transaksjoner, 1)
if all(binære transaksjoner(i, ermedlem(unikk([binære transaksjoner{:}]), varesett)))
støtte =støtte + 1;
slutt
slutt
slutt
```