Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy

Existuje nejaký MATLAB kód pre techniku ​​dolovania údajov pomocou algoritmu s častými vzorovými stromami?

Tu je jednoduchá implementácia asociačného algoritmu FP-Tree v MATLAbe pre dolovanie údajov. Tento kód nájde časté množiny položiek a pravidlá asociácie z danej množiny údajov transakcie.

```

% 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 pokračovať;

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

```

Najnovšie články

Copyright © počítačové znalosti Všetky práva vyhradené