CPairTree:: CPairTree ( ) {
}
CPairTree:: CPairTree ( const HyperParameters & hp)
: m_hp( hp ) , m_nTreeID( - 1 )
{
if ( hp.useRandProj ) {
m_rootNode = CPairNode:: Ptr ( new CPairNodeHyperPlane( hp, 0 , 0 ) ) ;
}
else
{
if ( hp.useInfoGain )
{
m_rootNode = CPairNode:: Ptr ( new CPairNodeInfoGain( hp, 0 , 0 ) ) ;
}
else
{
m_rootNode = CPairNode:: Ptr ( new CPairNodeGini( hp, 0 , 0 ) ) ;
}
}
}
CPairTree:: CPairTree ( const HyperParameters & hp, const xmlNodePtr treeNode)
: m_hp( hp ) , m_nTreeID( - 1 )
{
xmlNodePtr cur = treeNode- > xmlChildrenNode;
while ( cur ! = 0 )
{
if ( xmlStrcmp( cur- > name, reinterpret_cast < const xmlChar* > ( "node" ) ) == 0 )
{
std:: string nodeType = readStringProp( cur, "type" ) ;
if ( nodeType == NODE_PAIR_INFOGAIN)
{
m_rootNode = CPairNode:: Ptr ( new CPairNodeInfoGain( hp, 0 , cur ) ) ;
}
else if ( nodeType == NODE_PAIR_HYPERPLANE) {
m_rootNode = CPairNode:: Ptr ( new CPairNodeHyperPlane( hp, 0 , cur ) ) ;
}
else if ( nodeType == NODE_PAIR_GINI)
{
m_rootNode = CPairNode:: Ptr ( new CPairNodeGini( hp, 0 , cur ) ) ;
}
}
else if ( xmlStrcmp( cur- > name, reinterpret_cast < const xmlChar* > ( "constants" ) ) == 0 )
{
//Configurator::conf()->loadConstants( cur );
}
cur = cur- > next;
}
}
CPairTree:: CPairTree ( const HyperParameters & hp, const xmlNodePtr treeNode, int treeID)
: m_hp( hp ) , m_nTreeID( treeID)
{
xmlNodePtr cur = treeNode- > xmlChildrenNode;
while ( cur ! = 0 )
{
if ( xmlStrcmp( cur- > name, reinterpret_cast < const xmlChar* > ( "node" ) ) == 0 )
{
std:: string nodeType = readStringProp( cur, "type" ) ;
if ( nodeType == NODE_PAIR_INFOGAIN)
{
m_rootNode = CPairNode:: Ptr ( new CPairNodeInfoGain( hp, 0 , cur ) ) ;
}
else if ( nodeType == NODE_PAIR_HYPERPLANE) {
m_rootNode = CPairNode:: Ptr ( new CPairNodeHyperPlane( hp, 0 , cur ) ) ;
}
else if ( nodeType == NODE_PAIR_GINI)
{
m_rootNode = CPairNode:: Ptr ( new CPairNodeGini( hp, 0 , cur ) ) ;
}
}
else if ( xmlStrcmp( cur- > name, reinterpret_cast < const xmlChar* > ( "constants" ) ) == 0 )
{
//Configurator::conf()->loadConstants( cur );
}
cur = cur- > next;
}
}
CUNQYWlyVHJlZTo6Q1BhaXJUcmVlKCl7CgoJfQoKCUNQYWlyVHJlZTo6Q1BhaXJUcmVlKGNvbnN0IEh5cGVyUGFyYW1ldGVycyAmaHApCgkJCQkJCTptX2hwKCBocCApLCBtX25UcmVlSUQoLTEpCgl7CgkJaWYgKGhwLnVzZVJhbmRQcm9qKXsKCQkJbV9yb290Tm9kZSA9IENQYWlyTm9kZTo6UHRyKG5ldyBDUGFpck5vZGVIeXBlclBsYW5lKGhwLCAwLCAwKSk7CgkJfQoJCWVsc2UKCQl7CgkJCWlmIChocC51c2VJbmZvR2FpbikKCQkJewoJCQkJbV9yb290Tm9kZSA9IENQYWlyTm9kZTo6UHRyKG5ldyBDUGFpck5vZGVJbmZvR2FpbihocCwgMCwgMCkpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJbV9yb290Tm9kZSA9IENQYWlyTm9kZTo6UHRyKG5ldyBDUGFpck5vZGVHaW5pKGhwLCAwLCAwKSk7CgkJCX0KCQl9Cgl9CgoJQ1BhaXJUcmVlOjpDUGFpclRyZWUoY29uc3QgSHlwZXJQYXJhbWV0ZXJzICZocCwgY29uc3QgeG1sTm9kZVB0ciB0cmVlTm9kZSkKCQkJCQkJOm1faHAoIGhwICksIG1fblRyZWVJRCgtMSkKCXsKCQl4bWxOb2RlUHRyIGN1ciA9IHRyZWVOb2RlLT54bWxDaGlsZHJlbk5vZGU7CgkJd2hpbGUgKCBjdXIgIT0gMCApCgkJewoJCQlpZiAoIHhtbFN0cmNtcCggY3VyLT5uYW1lLCByZWludGVycHJldF9jYXN0PGNvbnN0IHhtbENoYXIqPiggIm5vZGUiICkgKSA9PSAwICkKCQkJewoJCQkJc3RkOjpzdHJpbmcgbm9kZVR5cGUgPSByZWFkU3RyaW5nUHJvcCggY3VyLCAidHlwZSIgKTsKCQkJCQoJCQkJaWYgKG5vZGVUeXBlID09IE5PREVfUEFJUl9JTkZPR0FJTikKCQkJCXsKCQkJCQltX3Jvb3ROb2RlID0gQ1BhaXJOb2RlOjpQdHIoIG5ldyBDUGFpck5vZGVJbmZvR2FpbiggaHAsIDAsIGN1ciApICk7CgkJCQl9CgkJCQllbHNlIGlmIChub2RlVHlwZSA9PSBOT0RFX1BBSVJfSFlQRVJQTEFORSkgewoJCQkJCW1fcm9vdE5vZGUgPSBDUGFpck5vZGU6OlB0ciggbmV3IENQYWlyTm9kZUh5cGVyUGxhbmUoIGhwLCAwLCBjdXIgKSApOwoJCQkJfQoJCQkJZWxzZSBpZiAobm9kZVR5cGUgPT0gTk9ERV9QQUlSX0dJTkkpCgkJCQl7CgkJCQkJbV9yb290Tm9kZSA9IENQYWlyTm9kZTo6UHRyKCBuZXcgQ1BhaXJOb2RlR2luaSggaHAsIDAsIGN1ciApICk7CgkJCQl9CgkJCX0KCQkJZWxzZSBpZiAoIHhtbFN0cmNtcCggY3VyLT5uYW1lLCByZWludGVycHJldF9jYXN0PGNvbnN0IHhtbENoYXIqPiggImNvbnN0YW50cyIgKSApID09IDAgKQoJCQl7CgkJCQkvL0NvbmZpZ3VyYXRvcjo6Y29uZigpLT5sb2FkQ29uc3RhbnRzKCBjdXIgKTsKCQkJfQoJCQljdXIgPSBjdXItPm5leHQ7CgkJfQoJfQoKCUNQYWlyVHJlZTo6Q1BhaXJUcmVlKGNvbnN0IEh5cGVyUGFyYW1ldGVycyAmaHAsIGNvbnN0IHhtbE5vZGVQdHIgdHJlZU5vZGUsIGludCB0cmVlSUQpCgkJCQkJCTptX2hwKCBocCApLCBtX25UcmVlSUQodHJlZUlEKQoJewoJCXhtbE5vZGVQdHIgY3VyID0gdHJlZU5vZGUtPnhtbENoaWxkcmVuTm9kZTsKCQl3aGlsZSAoIGN1ciAhPSAwICkKCQl7CgkJCWlmICggeG1sU3RyY21wKCBjdXItPm5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgeG1sQ2hhcio+KCAibm9kZSIgKSApID09IDAgKQoJCQl7CgkJCQlzdGQ6OnN0cmluZyBub2RlVHlwZSA9IHJlYWRTdHJpbmdQcm9wKCBjdXIsICJ0eXBlIiApOwoJCQkJCgkJCQlpZiAobm9kZVR5cGUgPT0gTk9ERV9QQUlSX0lORk9HQUlOKQoJCQkJewoJCQkJCW1fcm9vdE5vZGUgPSBDUGFpck5vZGU6OlB0ciggbmV3IENQYWlyTm9kZUluZm9HYWluKCBocCwgMCwgY3VyICkgKTsKCQkJCX0KCQkJCWVsc2UgaWYgKG5vZGVUeXBlID09IE5PREVfUEFJUl9IWVBFUlBMQU5FKSB7CgkJCQkJbV9yb290Tm9kZSA9IENQYWlyTm9kZTo6UHRyKCBuZXcgQ1BhaXJOb2RlSHlwZXJQbGFuZSggaHAsIDAsIGN1ciApICk7CgkJCQl9CgkJCQllbHNlIGlmIChub2RlVHlwZSA9PSBOT0RFX1BBSVJfR0lOSSkKCQkJCXsKCQkJCQltX3Jvb3ROb2RlID0gQ1BhaXJOb2RlOjpQdHIoIG5ldyBDUGFpck5vZGVHaW5pKCBocCwgMCwgY3VyICkgKTsKCQkJCX0KCQkJfQoJCQllbHNlIGlmICggeG1sU3RyY21wKCBjdXItPm5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgeG1sQ2hhcio+KCAiY29uc3RhbnRzIiApICkgPT0gMCApCgkJCXsKCQkJCS8vQ29uZmlndXJhdG9yOjpjb25mKCktPmxvYWRDb25zdGFudHMoIGN1ciApOwoJCQl9CgkJCWN1ciA9IGN1ci0+bmV4dDsKCQl9Cgl9