Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save prostoiChelovek/dbe265f01e8d036f1a5c89abf478f635 to your computer and use it in GitHub Desktop.
Save prostoiChelovek/dbe265f01e8d036f1a5c89abf478f635 to your computer and use it in GitHub Desktop.
Classification of 128D face descriptors using Dlib`s SVM
#include <iostream>
#include <ctime>
#include <vector>
#include <dlib/svm.h>
using namespace std;
using namespace dlib;
int main() {
typedef matrix<double, 128, 1> sample_type;
typedef histogram_intersection_kernel<sample_type> kernel_type;
typedef svm_c_trainer<kernel_type> trainer_type;
typedef decision_function<kernel_type> classifier_type;
std::vector<sample_type> samples;
std::vector<double> labels;
sample_type sample;
// Samples ->
sample = -0.104075,0.0353173,0.00178374,-0.0753537,-0.112815,-0.0216224,0.0377481,-0.0488139,0.130309,-0.0945303,0.189362,-0.080766,-0.270349,-0.0193643,0.00921101,0.102551,-0.144811,-0.0940015,-0.100384,-0.0194314,0.0840833,-0.0457241,0.00452904,0.171996,-0.0478158,-0.337642,-0.0606557,-0.12361,0.0453943,-0.0810385,-0.00750464,-0.00348612,-0.184124,-0.0607891,0.00567712,0.0163766,-0.065054,-0.0689181,0.275373,-0.00692585,-0.210958,0.0456122,0.0682701,0.185818,0.114852,0.126975,0.0209696,-0.0770583,0.145237,-0.259534,-0.00618521,0.159552,0.130259,0.0423294,0.0381017,-0.243362,0.0506221,0.0585256,-0.238777,0.0836526,0.016785,-0.0530354,0.0251246,-0.0529856,0.211764,0.0799277,-0.124546,-0.10222,0.0979962,-0.251062,0.00890116,0.137394,-0.0783996,-0.219414,-0.205879,0.0177117,0.368439,0.220738,-0.133819,-0.0384351,-0.0966111,-0.033576,0.0769655,0.0631562,-0.114062,-0.00451132,-0.0715965,-0.0035767,0.178221,0.00795265,0.0111314,0.270876,0.0673086,0.0844882,-0.00819079,-0.0163729,-0.115238,-0.0281309,-0.0970927,0.0501709,-0.0570326,-0.0846196,0.0545082,0.018509,-0.234103,0.086503,-0.0694707,-0.0701453,-0.103499,0.0656028,-0.16278,-0.00461275,0.122112,-0.279784,0.181822,0.226671,0.0704477,0.121105,0.106161,0.0137667,0.00364055,-0.0579583,-0.149734,-0.0602896,0.114759,-0.0573909,0.114782,-0.0360935;
samples.emplace_back(sample);
labels.emplace_back(0);
sample = -0.0842,-0.0103397,0.0437481,-0.0915171,-0.121723,0.047498,0.0291496,-0.0520389,0.109445,-0.101838,0.207581,-0.042889,-0.261914,-0.0272596,-0.0122164,0.129571,-0.111065,-0.0958717,-0.0959525,-0.0309603,0.040987,0.0442716,-0.0776685,0.121829,-0.0996475,-0.273584,-0.0581177,-0.0933449,0.0422948,-0.106526,-0.0250359,0.00632503,-0.116516,-0.00496327,0.0263013,0.0218429,-0.10571,-0.0795319,0.230139,0.0533274,-0.19153,0.0430984,0.109349,0.198607,0.160474,0.102349,0.0172319,-0.0652291,0.173123,-0.319695,-0.00167657,0.102906,0.161848,0.0766309,0.062149,-0.275844,0.0167591,0.0957278,-0.257827,0.135327,-0.0340539,-0.0602341,0.0391055,-0.000294158,0.176372,0.0883962,-0.108477,-0.135414,0.142614,-0.269609,-0.0416085,0.137218,-0.0736702,-0.209561,-0.248708,0.0174135,0.328648,0.227066,-0.127844,-0.0400331,-0.0207468,-0.0271468,0.0624786,0.0223526,-0.127371,-0.0507193,-0.0705351,-0.0386092,0.226436,0.0161928,0.0283753,0.291317,0.0748442,0.060255,0.00212815,-0.00675054,-0.106867,-0.0389765,-0.0808003,-0.00568769,-0.055365,-0.0840885,0.123313,0.0872616,-0.241685,0.164179,-0.0865613,-0.057848,-0.09122,0.0460555,-0.150213,0.0417642,0.162199,-0.250288,0.154162,0.211319,0.112408,0.089575,0.115256,-0.0271589,-0.00892242,-0.0478827,-0.140988,-0.0462185,0.0768425,-0.121777,0.0938285,0.010045;
samples.emplace_back(sample);
labels.emplace_back(0);
sample = -0.0978358,0.0709425,0.020139,-0.0539767,-0.106043,-0.038511,-0.0323637,-0.0489498,0.125475,-0.091147,0.186535,-0.0606332,-0.275319,0.0278714,-0.0611131,0.141716,-0.134006,-0.102553,-0.107076,-0.0573679,0.0345221,-0.0304099,-0.0275326,0.161304,-0.0157732,-0.369536,-0.0601802,-0.11889,0.0252082,-0.0295627,-0.0208615,0.0195551,-0.0876718,0.0012647,0.0447854,0.00787807,-0.0552982,-0.0651739,0.249512,0.0130658,-0.210867,0.0447451,0.0623386,0.233348,0.16764,0.101574,0.0430824,-0.0918493,0.169075,-0.224624,-0.0399393,0.212465,0.140077,0.0482294,0.057114,-0.194208,0.0428332,0.106622,-0.23841,0.0403159,-0.0190844,-0.0557801,0.0052258,-0.0547541,0.218452,0.0954618,-0.16453,-0.0951377,0.150382,-0.253538,-0.00401735,0.0833804,-0.138927,-0.238872,-0.214282,0.0490967,0.359415,0.223867,-0.115441,-0.00866659,-0.0399673,-0.034252,0.0565229,0.101769,-0.15668,-0.0643157,-0.0535608,-0.0301986,0.17905,-0.0018792,0.0096971,0.236539,0.0381527,0.0628982,-0.030916,0.0177048,-0.133797,-0.0393437,-0.11919,0.0132527,-0.0574581,-0.0529518,0.0478393,0.0262021,-0.210943,0.0471565,-0.069947,-0.052542,-0.0889676,0.0694725,-0.129556,-0.0473471,0.143644,-0.212603,0.170811,0.230272,0.123877,0.104408,0.115162,-0.0289311,0.0189222,-0.0846141,-0.125151,-0.0587768,0.1035,-0.0582598,0.052436,-0.0582029;
samples.emplace_back(sample);
labels.emplace_back(0);
sample = -0.126522,0.0319873,0.00187707,-0.120072,-0.123556,0.00292977,0.0418033,-0.0606101,0.159975,-0.0928595,0.22005,-0.107388,-0.324147,-0.0317906,-0.0104141,0.140513,-0.194119,-0.136761,-0.0851905,0.0113113,0.0771631,-0.0242498,-0.0192393,0.181996,-0.057078,-0.367424,-0.0300393,-0.0976255,0.031719,-0.0693734,-0.0298967,0.0139186,-0.200132,-0.0748742,-0.00165558,0.0104902,-0.054281,-0.0708156,0.24483,0.0684215,-0.238472,0.0192754,0.0417971,0.20967,0.114163,0.0911764,0.0326391,-0.0759872,0.141883,-0.285695,-0.0629732,0.16985,0.155762,0.0191476,0.0214467,-0.222599,0.0370057,0.112789,-0.258202,0.122799,0.0409928,-0.092703,0.0684799,-0.0420754,0.207907,0.0697944,-0.113577,-0.127193,0.113454,-0.202868,-0.0448259,0.109454,-0.0619653,-0.224775,-0.229836,0.000217827,0.361454,0.191158,-0.156097,-0.0240398,-0.095871,-0.0277176,0.0918829,0.0748022,-0.0982409,0.00167911,-0.111231,-0.0488532,0.192903,0.0189611,0.026221,0.292158,0.050855,0.0781836,0.0332289,0.00487117,-0.136719,0.00770431,-0.0884422,0.0368335,-0.087971,-0.0969056,0.0808982,0.00766043,-0.19901,0.0872219,-0.0761324,-0.0498969,-0.108662,0.0554951,-0.115868,-0.0178331,0.0981563,-0.285069,0.173806,0.229875,0.0843561,0.12486,0.100232,-0.00831145,-0.00420871,-0.0331781,-0.11974,-0.0765445,0.106831,-0.0638017,0.12045,-0.0277105;
samples.emplace_back(sample);
labels.emplace_back(0);
sample = -0.10335,-0.0261625,0.00137092,-0.0483094,-0.130698,-0.0289098,-0.00297254,-0.109376,0.133929,-0.122888,0.203615,-0.0877784,-0.251294,-0.0176401,-0.00792937,0.0651111,-0.0975169,-0.0942837,-0.0612092,0.0212462,0.0599851,-0.0556742,0.0130003,0.123464,-0.0988346,-0.340076,-0.107551,-0.102154,0.0406744,-0.0556701,-0.0298652,0.0783741,-0.122576,-0.00632841,-0.0190893,0.0513654,-0.0514447,-0.0638378,0.204935,-0.0189354,-0.220947,-0.00805555,0.00821837,0.212095,0.145723,0.0508061,0.0583623,-0.0510986,0.0839936,-0.297205,-0.018292,0.139929,0.129209,0.0323222,0.0870035,-0.180137,0.0219154,0.100242,-0.220658,0.120234,0.00309831,-0.0123899,0.0658231,-0.0851544,0.261954,0.112507,-0.16569,-0.0731154,0.108416,-0.253344,-0.0212734,0.128558,-0.088779,-0.274934,-0.223173,-0.000328381,0.387094,0.250818,-0.137104,0.0122386,-0.126519,-0.0669795,0.037784,0.041111,-0.0846463,0.0321905,-0.0878601,-0.0239568,0.229007,-0.0142915,0.0222697,0.319817,0.0267228,0.0465912,-0.0153743,0.00636861,-0.0728014,-0.0299445,-0.0556069,0.0275444,-0.0366564,-0.145955,0.0734804,0.0348594,-0.234492,0.150292,-0.0677077,-0.00417273,-0.0391117,0.0368302,-0.140964,0.0152144,0.162962,-0.352202,0.139412,0.190908,0.120835,0.137655,0.0600661,0.00703168,-8.67462e-05,-0.0598214,-0.104442,-0.046698,0.0553857,-0.0880691,0.0482511,0.0331484;
samples.emplace_back(sample);
labels.emplace_back(0);
sample = -0.0747794,0.0599716,0.104357,0.0171097,-0.107826,0.0228154,-0.0160701,-0.104345,0.215406,-0.0301139,0.319424,-0.0928952,-0.261799,-0.0480986,-0.0272904,0.132217,-0.162538,-0.0905289,0.00991054,-0.0546338,0.143675,0.0514548,0.0194964,-0.0279531,-0.113532,-0.37718,-0.0756576,-0.084144,0.127134,-0.14251,0.0165121,0.0625192,-0.131651,-0.0768975,0.0313139,0.00132751,-0.0594401,-0.0812516,0.184943,0.0147684,-0.192822,-0.0754119,-0.00756551,0.244543,0.109082,0.0360784,0.0445343,-0.106098,0.0573233,-0.186273,0.00132984,0.177965,0.128675,-0.0144253,0.132387,-0.139339,-0.045164,0.120188,-0.196908,0.119649,0.111078,-0.0556789,0.00238846,-0.0714772,0.0902855,-0.00614173,-0.0610147,-0.108776,0.162766,-0.0633179,-0.0672863,0.0813232,-0.133274,-0.261187,-0.285472,-0.0472829,0.432981,0.0399363,-0.184117,0.0352643,0.038713,-0.00763012,0.108755,0.103787,-0.0341671,0.0206235,-0.1097,0.0127266,0.100237,-0.065043,-0.0117502,0.21276,-0.0564498,0.0166006,0.0486062,0.0745433,-0.0584746,0.0415644,-0.0925556,-0.0548447,0.0341059,-0.0784855,0.0372009,0.0703525,-0.153265,0.109039,0.01998,0.00630709,-0.0225419,-0.0452089,-0.0619298,0.0137255,0.168837,-0.291805,0.117585,0.196099,-0.0100371,0.147048,0.00132537,0.0443261,0.0125434,-0.0433713,-0.160816,-0.0629199,-0.0589016,-0.0292457,-0.0440207,-6.45183e-05;
samples.emplace_back(sample);
labels.emplace_back(1);
sample = -0.0280804,0.0900723,0.0489269,-0.0264516,-0.109222,-0.01149,-0.0211865,-0.192353,0.163108,-0.0944134,0.21127,-0.0772988,-0.219639,-0.00106713,-0.0521957,0.10086,-0.195406,-0.151913,-0.0254852,-0.114356,0.111122,0.0479662,-0.0238223,-0.039346,-0.101908,-0.271754,-0.11369,-0.0849318,0.184507,-0.0695057,0.0332392,0.0174348,-0.150369,-0.0530707,0.061547,0.00619719,-0.0494947,-0.0877306,0.210287,-0.0128018,-0.206645,-0.0179879,-0.00609098,0.238508,0.136951,0.0472148,0.0100472,-0.134479,0.133885,-0.212943,0.0560542,0.169456,0.106006,0.0174845,0.0952562,-0.161216,-0.0136702,0.162638,-0.160511,0.10272,0.0951669,-0.0939917,0.0102175,-0.0307235,0.11419,0.0226004,-0.0491709,-0.154356,0.198846,-0.11484,-0.10516,0.0991869,-0.0879686,-0.170173,-0.271702,-0.057943,0.513388,0.0734098,-0.167736,0.0476622,-0.0310715,0.0137407,0.192342,0.0761806,-0.0475286,-0.030887,-0.12483,-0.0145041,0.212903,-0.0940454,-0.0835781,0.196369,-0.0440817,0.0749867,0.0267086,0.0684915,-0.0766119,0.0116088,-0.0889445,-0.109556,0.099053,-0.0090099,-0.00414894,0.168618,-0.174341,0.1546,0.0139454,0.0290754,-0.00276804,-0.0503204,-0.0272399,0.0249558,0.178984,-0.280777,0.162974,0.199922,-0.0439427,0.121178,0.0379156,-0.0226001,0.0355226,-0.0980636,-0.241536,-0.101994,-0.000339511,0.00186459,-0.0267513,0.00824318;
samples.emplace_back(sample);
labels.emplace_back(1);
sample = -0.0721213,0.00700722,0.160401,-0.0228993,-0.140312,-0.0464273,-0.0547312,-0.109121,0.144691,-0.0711958,0.266724,-0.0175473,-0.229282,-0.0424146,-0.00338844,0.0951746,-0.0808474,-0.153668,-0.00187692,-0.107113,0.0879866,0.0456208,-0.0378574,-0.0539984,-0.147555,-0.289724,-0.0895247,-0.121908,0.0992489,-0.0578449,-0.00488761,0.0189582,-0.147976,-0.0742888,0.0289609,0.0658343,-0.0375671,-0.0870719,0.209453,-0.0261307,-0.228254,-0.0435662,0.0123986,0.189711,0.0813026,0.00690518,0.100581,-0.0797863,0.121947,-0.194671,0.0886046,0.12144,0.14356,-0.00569004,0.133403,-0.206541,0.0251482,0.158326,-0.172178,0.147711,0.119059,-0.121217,-0.00648374,-0.0195529,0.160461,0.0158278,-0.0496137,-0.162578,0.206018,-0.0761053,-0.110513,0.122503,-0.12382,-0.140122,-0.35606,0.00641477,0.481502,0.0213423,-0.208944,0.0521787,-0.0283136,0.00955795,0.140967,0.0650306,-0.0181252,-0.00251793,-0.188846,-0.0404419,0.216932,-0.0431477,-0.018308,0.146047,-0.0037725,0.0857361,0.0399315,0.101402,-0.102266,-0.00209025,-0.0579272,-0.0174932,0.0826744,-0.0620878,-0.012201,0.137765,-0.180317,0.117051,-0.0231811,8.06544e-05,-0.0571364,-0.0378106,-0.0446354,0.0104351,0.155475,-0.263501,0.144063,0.175661,0.0105882,0.127497,0.0630127,-0.018317,-0.00635095,-0.0729699,-0.261971,-0.0962189,-0.0457554,-0.0527738,-0.0128318,0.100784;
samples.emplace_back(sample);
labels.emplace_back(1);
sample = -0.122747,0.0737782,0.0375799,-0.000933662,-0.0723391,-0.00480655,-0.0237596,-0.107327,0.1516,-0.0701183,0.295205,-0.0575179,-0.269481,-0.0228563,-0.0774222,0.143119,-0.162987,-0.120049,-0.0270124,-0.0884918,0.0869806,0.00989229,0.0337947,0.0598255,-0.174125,-0.265331,-0.0334858,-0.0662133,0.0586656,-0.0536037,-0.00558342,0.0957141,-0.192708,0.00170979,0.0467534,0.06515,-0.0381473,-0.0615333,0.215868,0.0360411,-0.171137,-0.00230633,-0.0568868,0.301833,0.0919367,-0.016477,0.0311869,-0.108473,0.102262,-0.262414,0.00904227,0.240891,0.0732307,0.0393796,0.00577062,-0.207688,0.0569143,0.169048,-0.15995,0.0627787,0.0644119,-0.0801017,0.0158612,-0.0717733,0.146761,0.0846186,-0.117994,-0.129414,0.118865,-0.0459748,-0.0131679,0.108101,-0.172985,-0.268192,-0.269747,0.0537072,0.403261,0.119843,-0.169349,0.0498713,-0.0539045,0.0842952,0.121198,0.0670844,-0.0851275,-0.0243289,-0.130315,0.0198595,0.145663,-0.0486903,-0.0861856,0.196489,-0.0186718,0.00565619,0.0512044,0.0716775,-0.0857192,0.0181243,-0.0824928,0.0145792,0.00931435,-0.108367,0.0016159,0.0719751,-0.186505,0.12318,-0.00941414,-0.000870045,-0.0327401,-0.00723495,-0.0819723,0.0206564,0.105921,-0.320462,0.247801,0.206491,0.0514065,0.198856,0.0833657,0.0430306,-0.0316111,-0.00767343,-0.105495,-0.0936909,0.0449717,0.00191308,0.0168201,-0.0246723;
samples.emplace_back(sample);
labels.emplace_back(1);
sample = -0.0218071,0.118063,0.0572995,0.00382704,-0.143801,0.0129298,-0.0507389,-0.200426,0.149996,-0.1209,0.183347,-0.103098,-0.203234,-0.0145165,-0.0777189,0.106394,-0.132325,-0.163793,-0.0317822,-0.119253,0.128254,0.0322197,-0.0154419,0.00760023,-0.0848815,-0.289642,-0.0988643,-0.0848887,0.19399,-0.0421889,0.0123657,0.0375445,-0.124927,-0.065024,0.0217151,0.0238062,-0.0726293,-0.133573,0.216962,-0.0194739,-0.199525,0.00466875,-0.0127689,0.263737,0.166997,-0.0229861,0.0669178,-0.10644,0.13092,-0.246664,0.0408268,0.171373,0.0947926,0.039701,0.118898,-0.154534,-0.00886203,0.152158,-0.135201,0.121594,0.0734167,-0.0885185,-0.00750333,-0.0520819,0.156683,0.0530398,-0.0516239,-0.160242,0.215355,-0.124433,-0.107428,0.101487,-0.112842,-0.138831,-0.286742,-0.00303372,0.546537,0.0954871,-0.174317,0.0706908,-0.0260913,0.0311491,0.163566,0.112408,-0.0360563,-0.0475711,-0.1087,-0.0124997,0.193315,-0.0851964,-0.11329,0.219782,0.00256745,0.047991,0.0672785,0.0867595,-0.0713367,-0.0128014,-0.103795,-0.0760618,0.111806,-0.0483422,-0.0094979,0.139299,-0.165508,0.155997,-0.0130792,0.0434078,0.013437,-0.0564381,-0.0765508,0.054194,0.201812,-0.278234,0.132677,0.171107,0.0119759,0.133807,0.0839997,-0.00414663,0.0658159,-0.0879882,-0.19351,-0.110968,0.000656247,-0.0040416,-0.0735178,0.04046;
samples.emplace_back(sample);
labels.emplace_back(1);
sample = -0.0680787,0.0490121,-0.0228516,-0.0199773,-0.138268,-0.0623055,-0.122148,-0.0877277,0.0393443,-0.0740676,0.195877,-0.110199,-0.269022,0.0126539,-0.053478,0.0666211,-0.194031,-0.119194,-0.124168,-0.164821,-0.062569,0.0992251,-0.0449014,0.036008,-0.16369,-0.31583,-0.115811,-0.142249,0.0439648,-0.136829,-0.0188178,0.0508835,-0.0827461,-0.0700611,0.0559807,0.0338388,-0.113843,-0.0694346,0.230614,0.117819,-0.0793671,0.0275893,0.0477016,0.354827,0.200417,0.0148669,0.0352756,-0.113198,0.0934919,-0.266847,0.0940658,0.263211,0.15668,0.127795,0.124367,-0.080677,0.00760341,0.0920908,-0.134311,0.0893997,0.0939706,-0.0223978,-0.0332946,-0.0539624,0.197287,0.0858487,-0.0911242,-0.0579409,0.172618,-0.164275,-0.177661,-0.00104806,-0.0773618,-0.176941,-0.280109,0.0541703,0.318635,0.146533,-0.185379,0.0688137,-0.0388886,-0.101486,0.0760343,0.0617343,-0.145083,-0.0537285,-0.0259247,0.0943287,0.164665,-0.051523,-0.00691614,0.170216,0.0309291,0.0209875,0.187379,0.0830711,-0.129172,-0.0875827,-0.0726968,0.00248451,0.168171,-0.128618,0.0108058,0.0707278,-0.112919,0.196275,0.00465484,-0.0909042,0.000778161,-0.0476848,-0.0665009,-0.0106214,0.234784,-0.249355,0.177797,0.132893,-0.0210171,0.146671,0.0735224,0.0345507,-0.0769876,-0.0273329,-0.12999,-0.132441,-0.00968639,0.0594994,-0.0366242,0.0287891;
samples.emplace_back(sample);
labels.emplace_back(2);
sample = 0.00152394,0.107174,0.0763347,0.0278526,-0.0663752,0.0106939,-0.0977305,-0.0831123,0.0793385,0.00796449,0.239612,-0.0724745,-0.277728,-0.0621828,-0.0173428,0.0968813,-0.216515,-0.0922196,-0.0800501,-0.106088,0.0687543,0.0872806,-0.0159646,0.00831456,-0.233816,-0.330129,-0.0658947,-0.154555,0.0996618,-0.154571,-0.0376358,-0.00539073,-0.137292,-0.0347368,0.0221276,0.0674818,-0.0576502,-0.15446,0.221343,0.101186,-0.11159,-0.0444348,0.00427334,0.255125,0.21059,0.0170396,0.0822066,-0.0746766,0.131239,-0.261049,0.0703027,0.201052,0.135373,0.16326,0.102567,-0.178065,-0.014857,0.120827,-0.133864,0.0666291,0.017591,-0.0316333,0.039886,-0.0560856,0.140497,0.0343367,-0.038033,-0.0611225,0.162371,-0.156266,-0.157505,0.0299599,-0.08623,-0.151622,-0.33627,-0.0041092,0.353137,0.134722,-0.245173,-0.0141854,-0.0152421,-0.0824341,0.0868183,0.0533679,-0.0833675,0.0323585,-0.0807244,0.0539468,0.253298,-0.0584534,0.032612,0.217618,-0.00633537,0.0525213,0.118639,0.0179745,-0.0858768,-0.00314274,-0.0318251,-0.00917933,0.113212,-0.116991,0.0241053,0.0981716,-0.206005,0.163154,0.032069,-0.0740938,0.00161977,-0.0641071,-0.105631,0.0234391,0.294422,-0.241919,0.17518,0.217619,-0.0105913,0.134553,0.0338769,0.0767384,-0.0810838,-0.057853,-0.169394,-0.0952946,-0.0125765,-0.003767,-0.0479925,0.0182667;
samples.emplace_back(sample);
labels.emplace_back(2);
sample = -0.0334521,0.165314,0.100942,-0.107112,-0.0939783,0.020693,-0.0721133,-0.0103156,0.134287,-0.0163153,0.195839,-0.0102342,-0.261244,0.00434867,-0.0413475,0.033018,-0.140725,-0.164566,-0.147704,-0.137489,0.0116584,0.161284,-0.0464268,-0.0455896,-0.204876,-0.372294,-0.0520239,-0.0687085,0.0806163,-0.158038,0.0618888,0.0916491,-0.212653,-0.0517991,0.0561497,0.0411459,-0.0629816,-0.0562597,0.163203,0.1196,-0.141237,0.107275,0.0196738,0.34596,0.242407,0.0106104,0.0181747,-0.0724061,0.0990352,-0.290586,0.074104,0.24843,0.101707,0.0674704,0.190331,-0.126438,-0.0324816,0.12372,-0.156702,0.0873813,0.0379565,-0.0166609,-0.0384359,-0.125666,0.109324,0.0428063,-0.106034,-0.111091,0.15441,-0.14313,-0.0824638,0.0919994,-0.0886068,-0.099125,-0.269113,0.0764371,0.364509,0.124349,-0.224986,0.0452749,-0.0187242,-0.0112776,0.0356663,0.0221876,-0.169598,-0.0324027,-0.0199361,0.0708596,0.208808,0.0694582,-0.0553481,0.219689,-0.0186558,0.0297398,0.102682,0.0154247,-0.131151,-0.107079,-0.123349,-0.0142968,0.0325244,-0.119639,-0.071431,0.189014,-0.148885,0.169697,-0.0152942,-0.0328621,-0.0095615,0.0260473,-0.0358964,-0.0128549,0.195418,-0.278804,0.183649,0.176049,-0.0460867,0.0684247,0.0850842,-0.0148746,-0.0302213,0.0228767,-0.153114,-0.146131,-0.00774069,-0.0500241,-0.0385227,-0.0215499;
samples.emplace_back(sample);
labels.emplace_back(2);
sample = 0.0276394,0.106774,0.0346928,0.033433,-0.0386805,0.0176376,-0.0602936,-0.058853,0.0741085,-0.00664763,0.188254,-0.12525,-0.213995,0.014534,-0.00958589,0.11981,-0.176422,-0.123281,-0.123554,-0.109805,-0.0590582,0.101351,0.0280144,0.0228986,-0.145527,-0.373805,-0.0892244,-0.175089,0.115114,-0.0895606,-0.0545662,0.0302052,-0.188325,-0.0153073,0.111812,0.0268575,-0.0740467,-0.0421782,0.243691,0.103407,-0.122307,0.00736372,0.0426024,0.279347,0.21248,0.0580155,0.0122752,-0.0795033,0.0522376,-0.202412,0.113516,0.221131,0.106087,0.158952,0.0996295,-0.113456,-0.0120885,0.0948953,-0.121476,0.103937,0.0445217,-0.0569614,-0.0253197,-0.0872654,0.156599,0.0483043,-0.0671482,-0.159112,0.114027,-0.206247,-0.109486,0.0627712,-0.0769272,-0.106184,-0.336484,0.00728934,0.371089,0.112652,-0.225603,-0.0103889,0.031997,-0.119942,0.0650275,0.113977,-0.109368,-0.0444939,-0.02965,0.026579,0.198203,-0.0382843,-0.0140091,0.11857,-0.133375,0.0378802,0.0528349,0.061294,-0.137434,-0.0557474,-0.0390322,-0.0544707,0.0344505,-0.0987389,-0.0538649,0.152046,-0.201335,0.163817,-0.0586872,-0.102178,0.0106874,0.0323804,-0.0391336,-0.0128398,0.244465,-0.241188,0.201844,0.204572,-0.0688987,0.0766498,-0.00103353,0.104099,-0.0942358,0.0401704,-0.231078,-0.135886,-0.03625,-0.00195246,-0.0496831,-0.020857;
samples.emplace_back(sample);
labels.emplace_back(2);
// <- Samples
// Unique labels ->
std::vector<double> total_labels;
for(double &label : labels) {
if(find(total_labels.begin(), total_labels.end(), label) == total_labels.end())
total_labels.emplace_back(label);
}
// <- Unique labels
// Init trainers ->
std::vector<trainer_type> trainers;
int num_trainers = total_labels.size() * (total_labels.size() - 1) / 2;
cout << "Number of trainers is " << num_trainers << endl;
for(int i = 0; i < num_trainers; i++) {
trainers.emplace_back(trainer_type());
trainers[i].set_kernel(kernel_type());
trainers[i].set_c(10);
}
// <- Init trainers
// Init classifiers ->
std::vector<pair<double, double>> classifiersLabels;
std::vector<classifier_type> classifiers;
int label1 = 0, label2 = 1;
for(trainer_type &trainer : trainers) {
std::vector<sample_type> samples4pair;
std::vector<double> labels4pair;
for(int i = 0; i < samples.size(); i++) {
if(labels[i] == total_labels[label1]) {
samples4pair.emplace_back(samples[i]);
labels4pair.emplace_back(-1);
}
if(labels[i] == total_labels[label2]) {
samples4pair.emplace_back(samples[i]);
labels4pair.emplace_back(+1);
}
}
classifiers.emplace_back(trainer.train(samples4pair, labels4pair));
classifiersLabels.emplace_back(make_pair(total_labels[label1],
total_labels[label2]));
label2++;
if(label2 == total_labels.size()) {
label1++;
label2 = label1 + 1;
}
}
// <- Init classifiers
double threshold = 0.3;
auto classify = [&](){
std::map<double, int> votes;
for(int i = 0; i < classifiers.size(); i++) {
cout << "Classifier #" << i << ":" << endl;
double prediction = classifiers[i](sample);
cout << prediction << ": ";
if(abs(prediction) < threshold) {
cout << "-1" << endl;
} else if (prediction < 0) {
votes[classifiersLabels[i].first]++;
cout << classifiersLabels[i].first << endl;
} else {
votes[classifiersLabels[i].second]++;
cout << classifiersLabels[i].second << endl;
}
}
cout << "Votes: " << endl;
for(auto &vote : votes) {
cout << vote.first << ": " << vote.second << endl;
}
auto max = std::max_element(votes.begin(), votes.end(),
[](const pair<double, int>& p1, const pair<double, int>& p2) {
return p1.second < p2.second; });
double label = votes.empty() ? -1 : max->first;
cout << "Label is " << label << endl;
};
// Test ->
cout << endl;
sample = -0.0971093, 0.032979, -0.00232806, -0.0775666, -0.104656, -0.0213076, 0.0440379, -0.043141, 0.136777, -0.0917763, 0.189543, -0.083707, -0.270727, -0.0139097, 0.0127185, 0.111778, -0.14769, -0.0923357, -0.112922, -0.01858, 0.0920879, -0.0328995, -0.00988505, 0.176391, -0.0517067, -0.330701, -0.0573135, -0.120238, 0.03891, -0.0811417, -0.0062335, -0.00582212, -0.175581, -0.0633392, 0.0196587, 0.0117917, -0.0642359, -0.0725538, 0.26311, -0.00794454, -0.217682, 0.0531818, 0.0754044, 0.18775, 0.11898, 0.130947, 0.0187837, -0.0821722, 0.147936, -0.267008, -0.02548, 0.152956, 0.126058, 0.0447444, 0.0386803, -0.241704, 0.0531144, 0.0567665, -0.252407, 0.0763161, 0.0147238, -0.0643942, 0.025673, -0.0492289, 0.209865, 0.0744244, -0.130712, -0.110718, 0.096995, -0.258515, 0.00138445, 0.135271, -0.0734771, -0.219869, -0.215243, 0.00833692, 0.376754, 0.215932, -0.136894, -0.0235863, -0.0943465, -0.0238652, 0.0747226, 0.0624485, -0.111935, -0.00083195, -0.0754247, -0.00678038, 0.185864, 0.00404199, 0.0149508, 0.269781, 0.0672718, 0.0757727, -0.00328051, -0.0112517, -0.119511, -0.0335051, -0.0959721, 0.0433323, -0.0548581, -0.0765576, 0.0629578, 0.0222137, -0.237346, 0.101207, -0.0736032, -0.072094, -0.104499, 0.0676804, -0.156867, 0.00140005, 0.120492, -0.282342, 0.175658, 0.224496, 0.0745439, 0.118358, 0.0977724, 0.00916617, -0.00463025, -0.0491896, -0.154108, -0.0677093, 0.112468, -0.0569714, 0.123482, -0.0399552;
cout << "True: 0 - " << endl;
classify();
cout << endl;
sample = -0.0548414, 0.0179529, 0.176459, -0.0843574, -0.184163, -0.0626531, 0.0162518, -0.159672, 0.143066, -0.0638621, 0.229184, -0.0920061, -0.246312, 0.0712642, -0.114078, 0.107531, -0.192119, -0.132619, 0.0177445, -0.0661823, 0.0736513, 0.0911127, 0.0196019, 0.04123, -0.115117, -0.2551, -0.0454847, -0.0520578, 0.0979006, -0.0379641, -0.00283066, 0.0995967, -0.23198, -0.0363207, 0.00388159, 0.0917775, -0.145097, -0.181358, 0.238158, -0.0266171, -0.234171, 0.0407377, 0.106173, 0.169435, 0.230818, -0.0425213, -0.00710307, -0.0873749, 0.128565, -0.317755, -0.0164259, 0.217735, 0.0541285, 0.0361509, 0.0510274, -0.196004, -0.019012, 0.152443, -0.200899, 0.103972, 0.0896348, -0.0884954, 0.0582597, -0.0689247, 0.113905, 0.0465575, -0.0717632, -0.148646, 0.189532, -0.192352, -0.0852281, 0.18976, -0.138861, -0.180767, -0.240213, -0.00220958, 0.377882, 0.0775573, -0.0539777, 0.0663008, -0.0413166, 0.0172401, 0.0340436, 0.0538497, 0.0118911, -0.0484412, -0.16633, 0.000217961, 0.200148, -0.0498012, -0.0300744, 0.279778, 0.00355724, -0.00393701, 0.0400963, 0.119659, -0.13085, -0.00332516, -0.159637, -0.0437832, 0.0290696, -0.06017, 0.0112542, 0.176463, -0.157963, 0.09521, -0.10191, -0.0181358, -0.0248331, -0.109978, -0.0355285, 0.0201314, 0.153278, -0.256059, 0.178837, 0.125624, -0.0152108, 0.099858, 0.0401217, -0.00174256, -0.0196828, -0.0658795, -0.159044, -0.0922645, -0.0128661, -0.0346288, 0.0277335, 0.0460183;
cout << "True: 1 - " << endl;
classify();
cout << endl;
sample = -0.0456186,0.0617834,0.0938465,-0.0287812,-0.152831,0.0288536,0.0151297,-0.100132,0.180275,-0.0343588,0.28995,-0.0436007,-0.294277,-0.0427745,-0.0749562,0.102137,-0.138176,-0.127064,-0.0367929,-0.0745191,0.144281,0.0670551,-0.0116302,-0.0738852,-0.12768,-0.32462,-0.0797729,-0.0734851,0.114582,-0.0947568,0.0282712,0.0788089,-0.151277,-0.0650899,0.0310718,0.0140418,-0.0401929,-0.0830215,0.191061,-0.0198357,-0.185289,-0.0299972,0.0257059,0.187353,0.15258,0.0444705,0.0596579,-0.135817,0.0762868,-0.24275,0.0772908,0.168147,0.0600582,0.0425849,0.113079,-0.195256,-0.0167043,0.154209,-0.154431,0.0837185,0.0758599,-0.0676173,-0.0121355,-0.0420253,0.130945,0.00563364,-0.0441476,-0.172781,0.210895,-0.123644,-0.105147,0.130844,-0.12724,-0.146013,-0.300122,-0.00175532,0.481475,0.0372227,-0.185859,0.0370284,-0.032148,0.00983087,0.15234,0.0294786,-0.0242431,-0.0596193,-0.172615,-0.0379154,0.221705,-0.0505945,-0.0587732,0.222031,0.0118512,0.038234,0.0879821,0.0991976,-0.042545,6.48946e-05,-0.0898371,-0.0503936,0.0711653,-0.081802,-0.053725,0.140714,-0.155926,0.121435,-0.0321751,0.0217256,-0.0289338,-0.120691,-0.036509,0.040188,0.189742,-0.289431,0.167486,0.159828,-0.0057037,0.130433,0.030502,0.0322856,-0.00470976,-0.0861046,-0.223781,-0.089723,-0.0167852,-0.0490616,-0.0387607,0.0366309;
cout << "True: 1 - " << endl;
classify();
cout << endl;
sample = -0.0500396, 0.0947202, 0.0816832, -0.00189278, -0.0470068, -0.00927673, -0.103326, -0.0298444, 0.0820566, -0.0491373, 0.193819, -0.0230329, -0.199039, -0.0129657, -0.0263235, 0.0975714, -0.137361, -0.085507, -0.160144, -0.112563, -0.00183824, 0.092021, 0.0254179, -0.000323817, -0.196121, -0.33831, -0.083187, -0.114107, 0.110478, -0.08086, -0.034503, 0.0393715, -0.0906622, -0.0187497, 0.057704, 0.0708942, -0.041734, -0.0816931, 0.226217, 0.0646157, -0.138106, 0.0766833, -0.00500637, 0.334222, 0.275759, -0.0236348, 0.0800966, -0.0972928, 0.178226, -0.265896, 0.121356, 0.187552, 0.0785289, 0.0738566, 0.163329, -0.129213, -0.0341521, 0.144698, -0.0940927, 0.106727, 0.017687, -0.0209317, -0.0652293, -0.111159, 0.0735365, 0.104449, -0.120084, -0.114499, 0.17618, -0.13419, -0.0389865, 0.0203212, -0.163691, -0.115558, -0.328103, 0.0314409, 0.398486, 0.0915483, -0.220653, 0.0423704, 0.019557, -0.0184066, 0.0759446, 0.10585, -0.139979, -0.0645244, -0.0312636, 0.0921689, 0.186076, -0.0205149, -0.0334036, 0.153762, -0.0260083, 0.0306355, 0.102896, 0.0874713, -0.139607, -0.0787164, -0.110476, 0.0173531, 0.113239, -0.142412, -0.0118219, 0.123184, -0.148113, 0.18359, 0.00428711, 0.0166258, 0.0745664, 0.0170726, -0.0947355, 0.011094, 0.24075, -0.156822, 0.174287, 0.169882, -0.0223925, 0.0915674, 0.106495, 0.0762406, -0.0456071, 0.0736452, -0.172661, -0.0851732, -0.0521038, 0.00934764, -0.0540899, 0.0206803;
cout << "True: 2 - " << endl;
classify();
cout << endl;
sample = -0.0702862, 0.065316, 0.00344345, -0.0209906, -0.179637, 0.0185943, 0.0261926, -0.0624318, 0.135034, -0.045549, 0.208815, -0.14152, -0.259452, -0.0297795, -0.00371025, 0.0383584, -0.124444, -0.138411, -0.0337768, -0.0643024, 0.018503, -0.034471, -0.0557689, 0.0298863, -0.136499, -0.342855, -0.0210571, -0.151203, 0.0964397, -0.110682, -0.0136464, 0.0808922, -0.146772, -0.0529498, 0.0126913, 0.0965551, -0.0745764, -0.0651253, 0.196424, -0.0349629, -0.155697, -0.0927496, 0.013605, 0.266362, 0.118541, 0.0723407, 0.0295033, -0.00613415, 0.0794452, -0.259628, 0.0516792, 0.173592, 0.111059, -0.0123195, 0.108252, -0.167802, 0.0105933, 0.0559828, -0.21584, 0.0946278, 0.0825261, -0.0762247, -0.0815342, -0.0801107, 0.222087, 0.123216, -0.0243548, -0.0865799, 0.255706, -0.189356, -0.0988045, 0.0288075, -0.079157, -0.157024, -0.246657, -0.0205723, 0.352201, 0.152004, -0.130065, 0.0229637, 0.0141956, 0.00822578, 0.104619, 0.0308491, -0.110701, -0.0103852, -0.122388, 0.0539578, 0.167317, -0.0484747, -0.00902239, 0.121011, -0.027719, -0.0366864, 0.0566576, -0.0158901, -0.057706, 0.000564046, -0.0913375, -0.00431401, 0.183858, -0.1342, 0.0238999, 0.142317, -0.228564, 0.0680972, -0.0524954, -0.0495786, 0.00725759, -0.0737322, -0.0647511, 0.045852, 0.212607, -0.263416, 0.185229, 0.155892, -0.0167244, 0.1117, 0.0207998, -0.0224134, 0.0399873, -0.077706, -0.239053, -0.140369, -0.0346774, -0.0403659, -0.0279446, 0.0453012;
cout << "Unknown - " << endl;
classify();
cout << endl;
sample = -0.0789684, 0.0632067, 0.00530965, -0.0243714, -0.151384, 0.00741675, 0.0220941, -0.045409, 0.146309, -0.0475405, 0.228729, -0.0770539, -0.260348, -0.0572961, -0.00492026, 0.0718308, -0.125328, -0.135833, -0.0186799, -0.027117, 0.0233305, 0.0160602, 0.000914279, 0.0552161, -0.0866725, -0.427097, -0.0593629, -0.189531, 0.0192018, -0.155003, -0.0227336, 0.00253075, -0.184025, -0.044019, 0.0104562, 0.0762348, -0.0830011, -0.0424879, 0.234524, 0.0325369, -0.160408, -0.0740466, 0.0129889, 0.275247, 0.133689, 0.101612, 0.0434719, 0.00148278, 0.0667591, -0.213359, 0.0676137, 0.17131, 0.102222, -0.0336725, 0.0862763, -0.159568, -0.0186935, -0.00296116, -0.188687, 0.044199, 0.0849485, -0.0142151, -0.0721356, -0.025883, 0.250024, 0.0813095, -0.0276176, -0.100079, 0.210486, -0.221166, -0.0664854, 0.0156311, -0.131092, -0.167357, -0.207614, 0.00437018, 0.372652, 0.102157, -0.0871763, 0.0343862, -0.0430422, -0.016809, 0.0593906, 0.00549066, -0.0958963, 0.0574787, -0.12205, 0.093749, 0.178399, -0.0472146, 0.0108371, 0.126135, -0.0654983, 0.00372677, 0.0745589, -0.051554, -0.0375826, 0.0303461, -0.082445, 0.0217952, 0.119058, -0.130104, 0.0308339, 0.11141, -0.254875, 0.0367534, -0.0624973, -0.0774563, -0.0215083, -0.00830765, -0.158427, -0.0095076, 0.202725, -0.237783, 0.222149, 0.167177, -0.028925, 0.0986807, 0.0246918, 0.00589215, 6.56825e-05, -0.0527402, -0.255289, -0.101352, -0.00954829, -0.00314603, 0.0330486, 0.0117508;
cout << "Unknown - " << endl;
classify();
cout << endl;
sample = -0.0941284, 0.0542927, 0.0423221, -0.0538551, -0.125402, -0.0249267, 0.0375936, -0.0500835, 0.121473, -0.0438819, 0.208355, -0.104564, -0.228502, -0.0353618, -0.0178314, 0.0337492, -0.0972334, -0.147936, -0.0531802, -0.0873369, 0.0243244, -0.00530953, -0.00945706, 0.0313281, -0.0805805, -0.399992, -0.0488974, -0.158938, 0.0374729, -0.138058, 0.0103938, 0.00735913, -0.221903, -0.0704594, -0.0265263, 0.0793482, -0.0853012, -0.0571805, 0.21251, 0.0206267, -0.13455, -0.0730303, 0.0401467, 0.286255, 0.140604, 0.0891075, 0.0215824, 0.0111124, 0.0316423, -0.247163, 0.0566459, 0.164891, 0.101211, -0.0217644, 0.0943441, -0.130814, 0.00541449, -0.0182013, -0.168691, 0.0338117, 0.0783234, 0.0149726, -0.0841688, -0.0606893, 0.253616, 0.0923348, -0.0370857, -0.0598241, 0.156297, -0.218803, -0.0548848, 0.0203893, -0.102989, -0.140149, -0.210763, 0.0159017, 0.381124, 0.0984975, -0.0947773, 0.0286161, -0.068338, -0.0147354, 0.0879964, -0.0114995, -0.116366, 0.0749649, -0.100338, 0.0959399, 0.168588, -0.0350666, -0.0168961, 0.108029, -0.0475915, -0.00252356, 0.0622835, -0.0454127, -0.042325, 0.0209878, -0.107021, 0.0287657, 0.109392, -0.100783, 0.00117754, 0.105555, -0.249216, 0.0396372, -0.0352377, -0.091267, -0.0150437, -0.0298994, -0.134287, -0.0266917, 0.181765, -0.234045, 0.150002, 0.195989, -0.0472413, 0.0963846, 0.0482402, -0.0229047, 0.0140981, -0.0172432, -0.231018, -0.0764818, -0.0138804, -0.00515467, 0.00855513, 0.00840678;
cout << "Unknown - " << endl;
classify();
// <- Test
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment