Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
```
% Vytvorte pôvodnú databázu transakcií ako pole buniek
transakcie ={ ...
{'Chlieb', 'Mlieko', 'Maslo'}, ...
{'Chlieb', 'Plienky', 'Pivo', 'Vajcia'}, ...
{'Mlieko', 'Plienky', 'Pivo', 'Cola'}, ...
{'Chlieb', 'Mlieko', 'Plienky', 'Cola'}, ...
{'Chlieb', 'Vajcia', 'Pivo'} ...
};
% Prevod transakcií do binárnej matice
binárneTransakcie =nuly(veľkosť(transakcie, 1), veľkosť(unikátne([transakcie{:}]), 2));
for i =1:veľkosť (transakcie, 1)
pre j =1:veľkosť(transakcie{i}, 2)
binaryTransactions(i, strcmp(transakcie{i}{j}, unique([transactions{:}]))) =1;
koniec
koniec
% Vytvorte strom častých vzorov z matice binárnych transakcií
fpStrom =fptree(binarneTransakcie);
% Nájdite všetky časté sady položiek s minimálnou podporou 2
častéPoložky =find_frequent_itemsets(fpTree, 2);
% Vytvorte pravidlá asociácie z častých sád položiek
AssociationRules =create_association_rules(frequentItemsets);
% Zobrazte časté sady položiek a pravidlá asociácie
disp('Časté množiny položiek:');
disp('------------------');
for i =1:length(frequentItemsets)
fprintf('%s\n', strjoin(frequentItemsets{i}, ', '));
koniec
disp('Pravidlá asociácie:');
disp('------------------');
pre i =1:dĺžka (pravidlá asociácie)
lhs =strjoin(asociačné pravidlá{i}.lhs, ', ');
rhs =strjoin(asociačné pravidlá{i}.rhs, ', ');
dôvera =asociáciaPravidlá{i}.dôvera * 100;
podpora =združeniePravidlá{i}.podpora * 100;
fprintf('Ak %s, potom %s. Dôvera =%f%%, Podpora =%f%%\n', lhs, rhs, dôvera, podpora);
koniec
% Funkcia na vytvorenie stromu častých vzorov z matice binárnych transakcií
funkcia fpTree =fptree (transakcie)
headerTable =create_header_table(transakcie);
root =add_node(-1, hlavičkaTabuľka.id);
fpTree =struct('root', root, 'headerTable', headerTable);
for i =1:veľkosť (transakcie, 1)
add_transaction(transactions(i, :), root, headerTable);
koniec
koniec
Funkcia % na vytvorenie tabuľky hlavičiek z transakcií
funkcia headerTable =create_header_table(transakcie)
hlavičkaTabuľka =struct();
uniqueItems =unique([transakcie{:}]);
for i =1:veľkosť(unikátnePoložky, 2)
headerTable(uniqueItems{i}).id =i;
headerTable(uniqueItems{i}).count =sum(sum(transactions ==uniqueItems{i}));
headerTable(uniqueItems{i}).link =[];
koniec
koniec
Funkcia % na pridanie transakcie do FP-Stromu
funkcia add_transaction(transakcia, uzol, hlavičkaTabuľka)
ak je prázdne (transakcia)
návrat;
koniec
% Nájdite položku s najvyššou frekvenciou v transakcii
maxFrekvencia =0;
maxItem ='';
pre i =1:dĺžka (transakcia)
if headerTable(transaction{i}).count> maxFrequency
maxFrekvencia =headerTable(transaction{i}).count;
maxItem =transakcia{i};
koniec
koniec
% Ak uzol nemá potomka pre maxItem, vytvorte ho
ak je prázdne (node.children)
node.children(maxItem).id =headerTable(maxItem).id;
node.children(maxItem).count =1;
node.children(maxItem).link =headerTable(maxItem).link;
uzol.children(maxItem).rodic =uzol;
inak
if isfield(node.children, maxItem)
uzol.deti(maxPoložka).počet =uzol.deti(maxPoložka).počet + 1;
inak
node.children(maxItem).id =headerTable(maxItem).id;
node.children(maxItem).count =1;
node.children(maxItem).link =headerTable(maxItem).link;
uzol.children(maxItem).rodic =uzol;
koniec
koniec
% Aktualizujte tabuľku hlavičiek
headerTable(maxItem).link =uzol;
% Rekurzívne pridajte zvyšné položky do stromu
pre i =1:dĺžka (transakcia)
if ~(strcmp(maxItem, transakcia{i}))
add_transaction(transaction(2:end), node.children(maxItem), headerTable);
koniec
koniec
koniec
% Funkcia na nájdenie všetkých častých sád položiek zo stromu FP
function častéPoložky =find_frequent_itemsets(fpTree, minSupport)
časté množiny položiek ={};
% Rekurzívne nájsť časté sady položiek z každej vetvy FP-Stromu
pre vetvu v kľúčoch fpTree.root.children.keys
vetvaFrekvencia =fpStrom.headerTable(vetva).pocet;
% Ak je frekvencia vetvy nižšia ako minimálna podpora, pokračujte na ďalšiu vetvu
if branchFrequency
koniec
% Pridať položku pobočky ako častú sadu položiek
častéPoložky{end + 1} ={vetva};
% Rekurzívne nájsť časté sady položiek pre všetky podstromy aktuálnej vetvy
subFrequentItemsets =find_frequent_itemsets(subtrees(fpTree.root, branch), minSupport);
% Pridať položku vetvy do všetkých častých sád položiek z podstromu
for i =1:length (subFrequentItemsets)
subFrequentItemsets{i}{1} =[vetva, subFrequentItemsets{i}{1}];
časté sadyPoložiek{end + 1} =subFrequentItemsets{i};
koniec
koniec
koniec
% Funkcia na generovanie pravidiel asociácie z častých sád položiek
function AssociationRules =create_association_rules(frequentItemsets)
AssociationRules ={};
% Pre každú častú sadu položiek vygenerujte všetky možné pravidlá asociácie
pre množinu položiek =časté množiny položiek
pre i =1:dĺžka (množina položiek)
% Vytvorte predchádzajúci a dôsledok pre pravidlo
antecedent =množina položiek (1:i-1);
následný =množina položiek(i+1:koniec);
% Vypočítajte podporu, spoľahlivosť a zdvih pravidla
podpora =100 * (nájdi_podporu(únia(predchádzajúca, dôsledok)) / nájdi_podporu(predchádzajúca));
spoľahlivosť =100 * (nájdi_podporu (zjednotenie (predchádzajúca, dôsledná)) / nájdite podporu (predchádzajúca));
zdvih =dôvera / (100 * nájdi_podporu (následný) / nájdi_podporu (predtým));
% Pridajte pravidlo asociácie do zoznamu
AssociationRules{end + 1} =struct('lhs', antecedent, 'rhs', dôsledok, 'dôvera', dôvera, 'podpora', podpora);
koniec
koniec
koniec
% Funkcia na nájdenie podpory pre sadu položiek
podpora funkcie =find_support (sada položiek)
podpora =0;
% Iterujte všetky transakcie a skontrolujte, či obsahujú sadu položiek
for i =1:veľkosť(binárneTransakcie, 1)
if all(binaryTransactions(i, ismember(unique([binaryTransactions{:}]), itemset)))
podpora =podpora + 1;
koniec
koniec
koniec
```