Classification Tree: Klasifikácia

V sérii "Classification Tree" vyšlo:
Classification Tree: 2D Problém
Classification Tree: Separátory

Definícia problému:

Pomocou funkcie create_nodes sme našli všetkých (n-1) separátorov oddeľujúcich našich n skupín. Zároveň sme meraním získali novú neznámu vzorku, ktorú potrebujeme klasifikovať, t.j. priradiť jej meno jednej zo skupín. Meno jej chceme priradiť spustením novej funkcie, ktorá využije už vytvorený klasifikačný strom obsahujúci koeficienty jednotlivých separátorov.

Riešenie problému:

Problém vyriešime pomocou funkcie tree_classify, ktorá má dva vstupy.

Prvým vstupom je premenná tree typu struct array, ktorá predstavuje spomínaný klasifikačný strom. Táto premenná je zároveň výstupom z funkcie create_nodes, je rozmeru 1×(n-1) a obsahuje polia a, b, right a left. Konštrukcia premennej tree ako aj obsah jednotlivých polí je vysvetlený v príspevku Classification Tree: Separátory.

Druhým vstupom je premenná sample reprezentujúca našu neznámu vzorku. Sample je stĺpcový vektor rozmeru m×1, kde m je počet vlastností alebo súradníc.

function class_name = tree_classify(tree, sample)

for i = 1:length(tree)
    
    if (tree(i).a'*sample + tree(i).b >= 0)
        class_name = tree(i).left;
        return
    
    elseif (i == length(tree))
            class_name = tree(i).right;
            return
    end
    
end
end

Algoritmus, ktorý priradí meno neznámej vzorke vyplýva z obrázka, ktorý bol uverejnený aj v minulom príspevku. Ak je pri danej iterácii splnená prvá podmienka, do premennej class_name, ktorá je výstupom z funkcie, sa zapíše hodnota z určeného poľa left premennej tree. Pripomínam, že v poli left sa nachádzajú iba mená skupín (vyplýva z konkrétneho typu klasifikačného stromu). Keď program pristúpi k poslednej iterácii a prvá podmienka nie je splnená, výstupom bude hodnota z poľa right, t.j. meno poslednej skupiny.