Hier ist eine einfache MATLAB-Implementierung des FP-Tree-Assoziationsalgorithmus für Data Mining. Dieser Code findet häufige Elementmengen und Zuordnungsregeln aus einem bestimmten Transaktionsdatensatz.
„
% Erstellen Sie die ursprüngliche Transaktionsdatenbank als Zellenarray
Transaktionen ={ ...
{'Brot', 'Milch', 'Butter'}, ...
{'Brot', 'Windeln', 'Bier', 'Eier'}, ...
{'Milch', 'Windeln', 'Bier', 'Cola'}, ...
{'Brot', 'Milch', 'Windeln', 'Cola'}, ...
{'Brot', 'Eier', 'Bier'} ...
};
% Transaktionen in eine binäre Matrix umwandeln
BinaryTransactions =Zeros(size(transactions, 1), size(unique([transactions{:}]), 2));
für i =1:size(transactions, 1)
für j =1:size(transactions{i}, 2)
binärTransactions(i, strcmp(transactions{i}{j}, unique([transactions{:}]))) =1;
Ende
Ende
% Erstellen Sie einen häufigen Musterbaum aus der binären Transaktionsmatrix
fpTree =fptree(binaryTransactions);
% Finden Sie alle häufigen Itemsets mit einer Mindestunterstützung von 2
frequentItemsets =find_frequent_itemsets(fpTree, 2);
% Generieren Sie Assoziationsregeln aus den häufigen Itemsets
AssociationRules =generic_association_rules(frequentItemsets);
% Zeigt die häufigen Itemsets und Assoziationsregeln an
disp('Häufige Itemsets:');
disp('------------------');
für i =1:length(frequentItemsets)
fprintf('%s\n', strjoin(frequentItemsets{i}, ', '));
Ende
disp('Assoziationsregeln:');
disp('------------------');
für i =1:length(associationRules)
lhs =strjoin(associationRules{i}.lhs, ', ');
rhs =strjoin(associationRules{i}.rhs, ', ');
Confidence =AssociationRules{i}.confidence * 100;
support =AssociationRules{i}.support * 100;
fprintf('Wenn %s, dann %s. Vertrauen =%f%%, Unterstützung =%f%%\n', lhs, rhs, Vertrauen, Unterstützung);
Ende
% Funktion zum Erstellen eines häufigen Musterbaums aus einer binären Transaktionsmatrix
Funktion fpTree =fptree(transactions)
headerTable =create_header_table(transactions);
root =add_node(-1, headerTable.id);
fpTree =struct('root', root, 'headerTable', headerTable);
für i =1:size(transactions, 1)
add_transaction(transactions(i, :), root, headerTable);
Ende
Ende
% Funktion zum Erstellen einer Header-Tabelle aus den Transaktionen
Funktion headerTable =create_header_table(transactions)
headerTable =struct();
uniqueItems =unique([transactions{:}]);
für i =1:size(uniqueItems, 2)
headerTable(uniqueItems{i}).id =i;
headerTable(uniqueItems{i}).count =sum(sum(transactions ==uniqueItems{i}));
headerTable(uniqueItems{i}).link =[];
Ende
Ende
% Funktion zum Hinzufügen einer Transaktion zum FP-Baum
Funktion add_transaction(transaction, node, headerTable)
if isempty(Transaktion)
zurückkehren;
Ende
% Finden Sie den Artikel mit der höchsten Häufigkeit in der Transaktion
maxFrequency =0;
maxItem ='';
für i =1:length(transaktion)
wenn headerTable(transaction{i}).count> maxFrequency
maxFrequency =headerTable(transaction{i}).count;
maxItem =transaktion{i};
Ende
Ende
% Wenn der Knoten kein untergeordnetes Element für maxItem hat, erstellen Sie eines
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;
anders
if isfield(node.children, maxItem)
node.children(maxItem).count =node.children(maxItem).count + 1;
anders
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
% Aktualisieren Sie die Header-Tabelle
headerTable(maxItem).link =node;
% Füge die verbleibenden Elemente rekursiv zum Baum hinzu
für i =1:length(transaktion)
if ~(strcmp(maxItem, transaktion{i}))
add_transaction(transaction(2:end), node.children(maxItem), headerTable);
Ende
Ende
Ende
% Funktion zum Finden aller häufigen Itemsets aus dem FP-Baum
Funktion frequentItemsets =find_frequent_itemsets(fpTree, minSupport)
häufigeItemsets ={};
% Finden Sie rekursiv häufige Itemsets aus jedem Zweig des FP-Baums
für den Zweig in fpTree.root.children.keys
branchFrequency =fpTree.headerTable(branch).count;
% Wenn die Verzweigungshäufigkeit unter der Mindestunterstützung liegt, fahren Sie mit der nächsten Verzweigung fort
wenn branchFrequency
weitermachen;
Ende
% Fügen Sie das Zweigelement als häufiges Elementset hinzu
frequentItemsets{end + 1} ={branch};
% Rekursiv nach häufigen Itemsets für alle Teilbäume des aktuellen Zweigs suchen
subFrequentItemsets =find_frequent_itemsets(subtrees(fpTree.root, branch), minSupport);
% Fügen Sie das Zweigelement zu allen häufigen Elementmengen aus dem Unterbaum hinzu
für i =1:length(subFrequentItemsets)
subFrequentItemsets{i}{1} =[branch, subFrequentItemsets{i}{1}];
frequentItemsets{end + 1} =subFrequentItemsets{i};
Ende
Ende
Ende
% Funktion zum Generieren von Assoziationsregeln aus den häufigen Itemsets
Funktion AssociationRules =generic_association_rules(frequentItemsets)
AssociationRules ={};
% Generieren Sie für jedes häufige Itemset alle möglichen Assoziationsregeln
für itemset =frequentItemsets
für i =1:length(itemset)
% Erstellen Sie den Antezedens und die Konsequenz für die Regel
antecedent =itemset(1:i-1);
consequent =itemset(i+1:end);
% Berechnen Sie die Unterstützung, das Vertrauen und die Wirksamkeit der Regel
support =100 * (find_support(union(antecedent, consequent)) / find_support(antecedent));
Konfidenz =100 * (find_support(union(antecedent, consequent)) / find_support(antecedent));
Lift =Vertrauen / (100 * find_support(consequent) / find_support(antecedent));
% Fügen Sie die Assoziationsregel zur Liste hinzu
AssociationRules{end + 1} =struct('lhs', antecedent, 'rhs', consequent, 'confidence', confidenz, 'support', support);
Ende
Ende
Ende
% Funktion zum Finden der Unterstützung eines Itemsets
Funktionsunterstützung =find_support(itemset)
Unterstützung =0;
% Durchlaufen Sie alle Transaktionen und prüfen Sie, ob sie das Itemset enthalten
für i =1:size(binaryTransactions, 1)
if all(binaryTransactions(i, ismember(unique([binaryTransactions{:}]), itemset)))
Unterstützung =Unterstützung + 1;
Ende
Ende
Ende
„