Här är en enkel MATLAB-implementering av FP-Tree-associationsalgoritmen för datautvinning. Denna kod hittar frekventa artikeluppsättningar och associationsregler från en given transaktionsdatauppsättning.
```
% Skapa den ursprungliga transaktionsdatabasen som en cellmatris
transaktioner ={ ...
{'Bröd', 'Mjölk', 'Smör'}, ...
{'Bröd', 'Blöjor', 'Öl', 'Ägg'}, ...
{'Mjölk', 'Blöjor', 'Öl', 'Cola'}, ...
{'Bröd', 'Mjölk', 'Blöjor', 'Cola'}, ...
{'Bröd', 'Ägg', 'Öl'} ...
};
% Konvertera transaktioner till en binär matris
binära Transaktioner =nollor(storlek(transaktioner, 1), storlek(unik([transaktioner{:}]), 2));
för i =1:storlek(transaktioner, 1)
för j =1:storlek(transaktioner{i}, 2)
binära Transaktioner(i, strcmp(transaktioner{i}{j}, unik([transaktioner{:}]))) =1;
avsluta
avsluta
% Skapa ett frekvent mönsterträd från den binära transaktionsmatrisen
fpTree =fptree(binära transaktioner);
% Hitta alla vanliga objektuppsättningar med minst stöd av 2
frequentItemsets =find_frequent_itemsets(fpTree, 2);
% Generera associationsregler från de frekventa artikeluppsättningarna
associationRules =generera_association_rules(frequentItemset);
% Visa de vanliga postuppsättningarna och associationsreglerna
disp('Vanliga objektuppsättningar:');
disp('------------------------');
för i =1:längd(frequentItemset)
fprintf('%s\n', strjoin(frequentItemsets{i}, ', '));
avsluta
disp('Föreningsregler:');
disp('------------------------');
för i =1:längd(associationRules)
lhs =strjoin(associationRules{i}.lhs, ', ');
rhs =strjoin(associationRules{i}.rhs, ', ');
confidence =associationRules{i}.confidence * 100;
support =associationRules{i}.support * 100;
fprintf('Om %s, då %s. Confidence =%f%%, Support =%f%%\n', lhs, rhs, confidence, support);
avsluta
% Funktion för att skapa ett frekvent mönsterträd från en binär transaktionsmatris
funktion fpTree =fptree(transaktioner)
headerTable =create_header_table(transaktioner);
root =add_node(-1, headerTable.id);
fpTree =struct('root', root, 'headerTable', headerTable);
för i =1:storlek(transaktioner, 1)
add_transaction(transactions(i, :), root, headerTable);
avsluta
avsluta
% Funktion för att skapa en rubriktabell från transaktionerna
function headerTable =create_header_table(transaktioner)
headerTable =struct();
uniqueItems =unik([transaktioner{:}]);
för i =1:storlek(unika artiklar, 2)
headerTable(uniqueItems{i}).id =i;
headerTable(uniqueItems{i}).count =summa(sum(transaktioner ==uniqueItems{i}));
headerTable(uniqueItems{i}).länk =[];
avsluta
avsluta
% Funktion för att lägga till en transaktion till FP-trädet
funktion add_transaction(transaktion, nod, headerTable)
om den är tom (transaktion)
återvända;
avsluta
% Hitta artikeln med högst frekvens i transaktionen
maxFrekvens =0;
maxItem ='';
för i =1:längd(transaktion)
if headerTable(transaktion{i}).count> maxFrequency
maxFrequency =headerTable(transaktion{i}).count;
maxItem =transaktion{i};
avsluta
avsluta
% Om noden inte har en underordnad för maxItem, skapa 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 =nod;
annan
if isfield(node.children, maxItem)
node.children(maxItem).count =node.children(maxItem).count + 1;
annan
node.children(maxItem).id =headerTable(maxItem).id;
node.children(maxItem).count =1;
node.children(maxItem).link =headerTable(maxItem).link;
node.children(maxItem).parent =nod;
avsluta
avsluta
% Uppdatera rubriktabellen
headerTable(maxItem).länk =nod;
% Lägg till de återstående objekten i trädet rekursivt
för i =1:längd(transaktion)
if ~(strcmp(maxItem, transaktion{i}))
add_transaction(transaction(2:end), node.children(maxItem), headerTable);
avsluta
avsluta
avsluta
% Funktion för att hitta alla vanliga poster från FP-trädet
function frequentItemsets =find_frequent_itemsets(fpTree, minSupport)
frequentItemsets ={};
% Hitta frekventa objektuppsättningar från varje gren av FP-trädet rekursivt
för gren i fpTree.root.children.keys
branchFrequency =fpTree.headerTable(branch).count;
% Om grenfrekvensen är mindre än minimistödet, fortsätt till nästa gren
om branchFrequency
fortsätta;
avsluta
% Lägg till filialposten som en frekvent artikeluppsättning
frequentItemsets{end + 1} ={branch};
% Hitta frekventa objektuppsättningar för alla underträd i den aktuella grenen rekursivt
subFrequentItemsets =find_frequent_itemsets(subtrees(fpTree.root, branch), minSupport);
% Lägg till grenobjektet till alla vanliga objektuppsättningar från underträdet
för i =1:längd(subFrequentItemset)
subFrequentItemsets{i}{1} =[branch, subFrequentItemsets{i}{1}];
frequentItemsets{end + 1} =subFrequentItemsets{i};
avsluta
avsluta
avsluta
% Funktion för att generera associationsregler från de frekventa artikeluppsättningarna
function associationRules =generera_association_rules(frequentItemset)
associationRules ={};
% Generera alla möjliga associationsregler för varje frekvent artikeluppsättning
för itemset =frequentItemsets
för i =1:längd(varuuppsättning)
% Skapa antecedenten och följden för regeln
antecedent =itemset(1:i-1);
consequent =itemset(i+1:slut);
% Beräkna regelns stöd, självförtroende och lyft
support =100 * (find_support(union(antecedent, konsekvent)) / find_support(antecedent));
konfidens =100 * (find_support(union(antecedent, konsekvent)) / find_support(antecedent));
lyft =förtroende / (100 * find_support(consequent) / find_support(antecedent));
% Lägg till associationsregeln i listan
associationRules{end + 1} =struct('lhs', antecedent, 'rhs', consequent, 'confidence', confidence, 'support', support);
avsluta
avsluta
avsluta
% Funktion för att hitta stöd för en artikeluppsättning
function support =find_support(artikeluppsättning)
stöd =0;
% Iterera igenom alla transaktioner och kontrollera om de innehåller artikeluppsättningen
för i =1:storlek(binära transaktioner, 1)
if all(binära Transaktioner(i, ärmedlem(unik([binära Transaktioner{:}]), artikeluppsättning)))
support =support + 1;
avsluta
avsluta
avsluta
```