Archief - (C++) Binary tree voor Machine Learning toepassing

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

iterums

Legacy Member
Wat volgt is een vrij vage beschrijving, aangezien ik vrij onvertrouwd ben met het onderwerp en taal.

Ik ben bezig met een project waarbij ik een variant van random forest moet maken (voor de geïnteresseerden, meer bepaald uitgebreid naar multivariate regressie zoals in volgende paper: research.microsoft.com/pubs/135411/Criminisi_MICCAI_MCV2010.pdf).

Schematisch iets als volgt: trainingdata gegeven als N paren van vectoren (data,label).
  • Maak X binaire bomen en genereer voor elke node een verzameling random tests die elk van de trainingvectoren in linker- of rechternode toekent; kies voor de node de beste test (gebaseerd op een bepaalde heuristiek).
  • Gegeven een nieuwe instantie, zoek de leaf bekomen via de tests in de nodes voor elke boom en geef de bijbehorende opgeslagen voorspelling bekomen van elke boom.

Implementatiegewijs bestaat het systeem uit (voorlopig binaire) bomen, waarbij elke node een (verschillende) test doet. De leaf nodes bevatten ook een voorspelling (een reële vector) en mogelijks bijkomende informatie zoals

Dus conceptueel iets als volgt (zoals in http://www.cprogramming.com/tutorial/lesson18.html):

Code:
class Btree
{
    public:
        Btree();
        ~Btree();

        void insert(int key);
        node *search(int key);
        void destroy_tree();

    private:
        void destroy_tree(node *leaf);
        void insert(int key, node *leaf);
        node *search(int key, node *leaf);
        
        node *root;
};


Code:
struct Node
{
  int id;
  Node *left;
  Node *right;
  NodeTest test;
  
  vector<float> prediction;
  (...)
};

Voor mijn specifiek probleem zal de test bij een node iets als volgt zijn.
Code:
class NodeTest
{
  int treshold;
  bool splitRight( input ) 
  {
     // calculate value based on input
     // ...
     return value > treshold;
  }
}

Nu het doel is om uiteindelijk een algemeen systeem te ontwerpen, waarbij de gebruiker bv. zelf specifieke tests of nodes met meer informatie kan uitbreiden kan maken.

Aangezien ik weinig tot geen ervaring heb met C++ (wegens externe factoren op C++ vastgelegd), zit ik met een aantal vragen met betrekking tot de mogelijkheden qua uitbreiding.

Ik heb reeds wat gezocht in verband met templates en overerving, maar concreet is het nog altijd wat vaag hoe ik dit moet oplossen.

Ik had met name gedacht in de richting van template specialization (Templates - C++ Documentation), maar ben nog wat zoekend naar wat aanwijzingen over mijn denkwijze/ontwerp en alternatieven of zoektermen.

MAXXUR

Legacy Member
Wat wilt ge precies kunnen parametriseren? Uw treshold in uw testen om links of rechts in te delen, of uw volledig soort van test (bv iets anders dan een tresholdtest) ?

iterums

Legacy Member
MAXXUR zei:
Wat wilt ge precies kunnen parametriseren? Uw treshold in uw testen om links of rechts in te delen, of uw volledig soort van test (bv iets anders dan een tresholdtest) ?
Indien niet te omslachtig, ook het laatste.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan