```
% Δημιουργήστε την αρχική βάση δεδομένων συναλλαγών ως πίνακα κελιών
συναλλαγές ={...
{'Ψωμί', 'Γάλα', 'Βούτυρο'}, ...
{'Ψωμί', 'Πάνες', 'Μπύρα', 'Αυγά'}, ...
{'Γάλα', 'Πάνες', 'Μπύρα', 'Κόκα'}, ...
{'Ψωμί', 'Γάλα', 'Πάνες', 'Κόκα'}, ...
{'Ψωμί', 'Αυγά', 'Μπύρα'} ...
};
% Μετατροπή συναλλαγών σε δυαδικό πίνακα
binaryTransactions =zeros(size(transactions, 1), size(unique([transactions{:}]), 2));
για i =1:μέγεθος (συναλλαγές, 1)
για j =1:size(συναλλαγές{i}, 2)
binaryTransactions(i, strcmp(transactions{i}{j}, unique([transactions{:}]))) =1;
τέλος
τέλος
% Δημιουργήστε ένα συχνό δέντρο προτύπων από τον πίνακα δυαδικών συναλλαγών
fpTree =fptree(binaryTransactions);
% Βρείτε όλα τα συχνά σύνολα στοιχείων με ελάχιστη υποστήριξη 2
frequencyItemsets =find_frequent_itemsets(fpTree, 2);
% Δημιουργία κανόνων συσχέτισης από τα συχνά σύνολα στοιχείων
AssociationRules =generate_association_rules(frequentItemsets);
% Εμφάνιση των συχνών συνόλων στοιχείων και των κανόνων συσχέτισης
disp('Συχνά σύνολα στοιχείων:');
disp('------------------');
για i =1:length(frequentItemsets)
fprintf('%s\n', strjoin(frequentItemsets{i}, ', '));
τέλος
disp('Κανόνες συσχέτισης:');
disp('------------------');
για i =1:length(associationRules)
lhs =strjoin(associationRules{i}.lhs, ', ');
rhs =strjoin(associationRules{i}.rhs, ', ');
εμπιστοσύνη =AssociationRules{i}. εμπιστοσύνη * 100;
support =AssociationRules{i}.support * 100;
fprintf('Εάν %s, τότε %s. Εμπιστοσύνη =%f%%, Υποστήριξη =%f%%\n', lhs, rhs, εμπιστοσύνη, υποστήριξη);
τέλος
% Λειτουργία για τη δημιουργία ενός δέντρου συχνών προτύπων από έναν πίνακα δυαδικών συναλλαγών
συνάρτηση fpTree =fptree(συναλλαγές)
headerTable =create_header_table(transactions);
root =add_node(-1, headerTable.id);
fpTree =struct('root', root, 'headerTable', headerTable);
για i =1:μέγεθος (συναλλαγές, 1)
add_transaction(transactions(i, :), root, headerTable);
τέλος
τέλος
% Λειτουργία για τη δημιουργία πίνακα κεφαλίδων από τις συναλλαγές
συνάρτηση headerTable =create_header_table (συναλλαγές)
headerTable =struct();
uniqueItems =μοναδικό([συναλλαγές{:}]);
for i =1:size(uniqueItems, 2)
headerTable(uniqueItems{i}).id =i;
headerTable(uniqueItems{i}).count =sum(sum(transactions ==uniqueItems{i}));
headerTable(uniqueItems{i}).link =[];
τέλος
τέλος
% Λειτουργία για την προσθήκη μιας συναλλαγής στο FP-Tree
συνάρτηση add_transaction (συναλλαγή, κόμβος, headerTable)
εάν είναι κενό (συναλλαγή)
απόδοση;
τέλος
% Βρείτε το στοιχείο με τη μεγαλύτερη συχνότητα στη συναλλαγή
maxFrequency =0;
maxItem ='';
για i =1:length (συναλλαγή)
if headerTable(transaction{i}).count> maxFrequency
maxFrequency =headerTable(transaction{i}).count;
maxItem =συναλλαγή{i};
τέλος
τέλος
% Εάν ο κόμβος δεν έχει παιδί για το maxItem, δημιουργήστε ένα
εάν είναι κενό (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;
αλλού
if isfield(node.children, maxItem)
node.children(maxItem).count =node.children(maxItem).count + 1;
αλλού
node.children(maxItem).id =headerTable(maxItem).id;
node.children(maxItem).count =1;
node.children(maxItem).link =headerTable(maxItem).link;
node.children(maxItem).parent =node;
τέλος
τέλος
% Ενημερώστε τον πίνακα κεφαλίδων
headerTable(maxItem).link =node;
% Προσθέστε αναδρομικά τα υπόλοιπα στοιχεία στο δέντρο
για i =1:length (συναλλαγή)
if ~(strcmp(maxItem, συναλλαγή{i}))
add_transaction(transaction(2:end), node.children(maxItem), headerTable);
τέλος
τέλος
τέλος
% Λειτουργία για εύρεση όλων των συχνών συνόλων στοιχείων από το FP-Tree
συνάρτηση frequencyItemsets =find_frequent_itemsets (fpTree, minSupport)
frequencyItemsets ={};
% Βρείτε αναδρομικά συχνά σύνολα στοιχείων από κάθε κλάδο του FP-Tree
για κλάδο στο fpTree.root.children.keys
branchFrequency =fpTree.headerTable(branch).count;
% Εάν η συχνότητα διακλάδωσης είναι μικρότερη από την ελάχιστη υποστήριξη, συνεχίστε στην επόμενη διακλάδωση
εάν διακλάδωσηΣυχνότητα
τέλος
% Προσθέστε το στοιχείο διακλάδωσης ως συχνό σύνολο στοιχείων
frequencyItemsets{end + 1} ={branch};
% Βρείτε αναδρομικά συχνά σύνολα στοιχείων για όλα τα υποδέντρα του τρέχοντος κλάδου
subFrequentItemsets =find_frequent_itemsets(subtrees(fpTree.root, branch), minSupport);
% Προσθέστε το στοιχείο διακλάδωσης σε όλα τα συχνά σύνολα στοιχείων από το υποδέντρο
για i =1:length(subFrequentItemsets)
subFrequentItemsets{i}{1} =[branch, subFrequentItemsets{i}{1}];
frequencyItemsets{end + 1} =subFrequentItemsets{i};
τέλος
τέλος
τέλος
% Λειτουργία για τη δημιουργία κανόνων συσχέτισης από τα συχνά σύνολα στοιχείων
συνάρτηση AssociationRules =generate_association_rules(frequentItemsets)
AssociationRules ={};
% Για κάθε συχνό σύνολο στοιχείων, δημιουργήστε όλους τους πιθανούς κανόνες συσχέτισης
for itemset =συχνάΣύνολο στοιχείων
για i =1:length (σύνολο στοιχείων)
% Δημιουργήστε το προηγούμενο και το επακόλουθο για τον κανόνα
προηγούμενο =σύνολο στοιχείων(1:i-1);
consequent =σύνολο στοιχείων(i+1:end);
% Υπολογίστε την υποστήριξη, την εμπιστοσύνη και την άρση του κανόνα
υποστήριξη =100 * (find_support(union(antecedent, consequent)) / find_support(antecedent));
εμπιστοσύνη =100 * (find_support(union(antecedent, consequent)) / find_support(antecedent));
lift =σιγουριά / (100 * find_support(consequent) / find_support(antecedent));
% Προσθέστε τον κανόνα συσχέτισης στη λίστα
AssociationRules{end + 1} =struct('lhs', antecedent, 'rhs', consequent, ' εμπιστοσύνη', εμπιστοσύνη, 'υποστήριξη', υποστήριξη);
τέλος
τέλος
τέλος
% Λειτουργία για την εύρεση της υποστήριξης ενός συνόλου στοιχείων
υποστήριξη συνάρτησης =find_support (σύνολο στοιχείων)
υποστήριξη =0;
% Επαναλάβετε όλες τις συναλλαγές και ελέγξτε εάν περιέχουν το σύνολο στοιχείων
για i =1:μέγεθος (δυαδικές συναλλαγές, 1)
if all(binaryTransactions(i, ismember(unique([binaryTransactions{:}]), itemset)))
υποστήριξη =υποστήριξη + 1;
τέλος
τέλος
τέλος
```
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα