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).
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):
Voor mijn specifiek probleem zal de test bij een node iets als volgt zijn.
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.
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.