TinyML-CAM/[h]-HogClassifier.h

3876 lines
49 KiB
C++

#ifndef UUID5828661360
#define UUID5828661360
/**
* RandomForestClassifier(base_estimator=DecisionTreeClassifier(), bootstrap=True, ccp_alpha=0.0, class_name=RandomForestClassifier, class_weight=None, criterion=gini, estimator_params=('criterion', 'max_depth', 'min_samples_split', 'min_samples_leaf', 'min_weight_fraction_leaf', 'max_features', 'max_leaf_nodes', 'min_impurity_decrease', 'random_state', 'ccp_alpha'), max_depth=40, max_features=auto, max_leaf_nodes=None, max_samples=None, min_impurity_decrease=0.0, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=None, num_outputs=4, oob_score=False, package_name=everywhereml.sklearn.ensemble, random_state=None, template_folder=everywhereml/sklearn/ensemble, verbose=0, warm_start=False)
*/
class RandomForestClassifier {
public:
/**
* Predict class from features
*/
int predict(float *x) {
int predictedValue = 0;
size_t startedAt = micros();
uint16_t votes[4] = { 0 };
uint8_t classIdx = 0;
float classScore = 0;
tree0(x, &classIdx, &classScore);
votes[classIdx] += classScore;
tree1(x, &classIdx, &classScore);
votes[classIdx] += classScore;
tree2(x, &classIdx, &classScore);
votes[classIdx] += classScore;
tree3(x, &classIdx, &classScore);
votes[classIdx] += classScore;
tree4(x, &classIdx, &classScore);
votes[classIdx] += classScore;
tree5(x, &classIdx, &classScore);
votes[classIdx] += classScore;
tree6(x, &classIdx, &classScore);
votes[classIdx] += classScore;
tree7(x, &classIdx, &classScore);
votes[classIdx] += classScore;
tree8(x, &classIdx, &classScore);
votes[classIdx] += classScore;
tree9(x, &classIdx, &classScore);
votes[classIdx] += classScore;
// return argmax of votes
uint8_t maxClassIdx = 0;
float maxVote = votes[0];
for (uint8_t i = 1; i < 4; i++) {
if (votes[i] > maxVote) {
maxClassIdx = i;
maxVote = votes[i];
}
}
predictedValue = maxClassIdx;
latency = micros() - startedAt;
return (lastPrediction = predictedValue);
}
/**
* Predict class label
*/
String predictLabel(float *x) {
return getLabelOf(predict(x));
}
/**
* Get label of last prediction
*/
String getLabel() {
return getLabelOf(lastPrediction);
}
/**
* Get label of given class
*/
String getLabelOf(int8_t idx) {
switch (idx) {
case -1:
return "ERROR";
case 0:
return "empty";
case 1:
return "pi";
case 2:
return "portenta";
case 3:
return "wio";
default:
return "UNKNOWN";
}
}
/**
* Get latency in micros
*/
uint32_t latencyInMicros() {
return latency;
}
/**
* Get latency in millis
*/
uint16_t latencyInMillis() {
return latency / 1000;
}
protected:
float latency = 0;
int lastPrediction = 0;
/**
* Random forest's tree #0
*/
void tree0(float *x, uint8_t *classIdx, float *classScore) {
if (x[18] <= 0.0369415208697319) {
if (x[78] <= 0.1300949603319168) {
if (x[90] <= 0.02731012087315321) {
if (x[63] <= 0.8730830252170563) {
if (x[113] <= 0.26372766494750977) {
if (x[98] <= 0.022605867125093937) {
if (x[34] <= 0.2811869978904724) {
if (x[55] <= 0.07885900512337685) {
if (x[92] <= 0.3012963682413101) {
*classIdx = 2;
*classScore = 508.0;
return;
}
else {
if (x[134] <= 0.28155651688575745) {
*classIdx = 1;
*classScore = 466.0;
return;
}
else {
*classIdx = 2;
*classScore = 508.0;
return;
}
}
}
else {
*classIdx = 1;
*classScore = 466.0;
return;
}
}
else {
if (x[78] <= 0.02770218253135681) {
*classIdx = 1;
*classScore = 466.0;
return;
}
else {
*classIdx = 2;
*classScore = 508.0;
return;
}
}
}
else {
if (x[116] <= 0.00469584483653307) {
*classIdx = 1;
*classScore = 466.0;
return;
}
else {
*classIdx = 2;
*classScore = 508.0;
return;
}
}
}
else {
if (x[106] <= 0.11038459464907646) {
*classIdx = 2;
*classScore = 508.0;
return;
}
else {
*classIdx = 1;
*classScore = 466.0;
return;
}
}
}
else {
*classIdx = 3;
*classScore = 523.0;
return;
}
}
else {
if (x[114] <= 0.0355784073472023) {
if (x[99] <= 0.0847080098465085) {
*classIdx = 3;
*classScore = 523.0;
return;
}
else {
*classIdx = 2;
*classScore = 508.0;
return;
}
}
else {
if (x[63] <= 0.5556537806987762) {
if (x[112] <= 0.3595939725637436) {
*classIdx = 1;
*classScore = 466.0;
return;
}
else {
*classIdx = 2;
*classScore = 508.0;
return;
}
}
else {
*classIdx = 1;
*classScore = 466.0;
return;
}
}
}
}
else {
if (x[48] <= 0.05262908060103655) {
*classIdx = 0;
*classScore = 481.0;
return;
}
else {
*classIdx = 1;
*classScore = 466.0;
return;
}
}
}
else {
if (x[112] <= 0.38147011026740074) {
*classIdx = 3;
*classScore = 523.0;
return;
}
else {
*classIdx = 2;
*classScore = 508.0;
return;
}
}
}
/**
* Random forest's tree #1
*/
void tree1(float *x, uint8_t *classIdx, float *classScore) {
if (x[66] <= 0.03470461815595627) {
if (x[92] <= 0.4885159134864807) {
*classIdx = 3;
*classScore = 506.0;
return;
}
else {
*classIdx = 2;
*classScore = 518.0;
return;
}
}
else {
if (x[54] <= 0.2060672491788864) {
if (x[92] <= 0.600633054971695) {
if (x[79] <= 0.23793259263038635) {
if (x[56] <= 0.20621951669454575) {
if (x[59] <= 0.07552803680300713) {
if (x[79] <= 0.157677061855793) {
*classIdx = 3;
*classScore = 506.0;
return;
}
else {
*classIdx = 1;
*classScore = 466.0;
return;
}
}
else {
if (x[113] <= 0.07983606681227684) {
if (x[53] <= 0.543332826346159) {
*classIdx = 1;
*classScore = 466.0;
return;
}
else {
*classIdx = 3;
*classScore = 506.0;
return;
}
}
else {
if (x[63] <= 0.2800687700510025) {
if (x[93] <= 0.05621062591671944) {
if (x[42] <= 0.08418368548154831) {
*classIdx = 2;
*classScore = 518.0;
return;
}
else {
*classIdx = 1;
*classScore = 466.0;
return;
}
}
else {
*classIdx = 2;
*classScore = 518.0;
return;
}
}
else {
if (x[123] <= 0.09437189996242523) {
*classIdx = 2;
*classScore = 518.0;
return;
}
else {
*classIdx = 1;
*classScore = 466.0;
return;
}
}
}
}
}
else {
if (x[98] <= 0.005484993336722255) {
*classIdx = 1;
*classScore = 466.0;
return;
}
else {
if (x[2] <= 0.08067275956273079) {
*classIdx = 2;
*classScore = 518.0;
return;
}
else {
*classIdx = 1;
*classScore = 466.0;
return;
}
}
}
}
else {
if (x[80] <= 0.3647053986787796) {
*classIdx = 2;
*classScore = 518.0;
return;
}
else {
if (x[20] <= 0.5538146793842316) {
if (x[49] <= 0.05982496030628681) {
if (x[56] <= 0.2696080878376961) {
*classIdx = 2;
*classScore = 518.0;
return;
}
else {
*classIdx = 1;
*classScore = 466.0;
return;
}
}
else {
if (x[70] <= 0.11429519951343536) {
if (x[114] <= 0.16653749346733093) {
*classIdx = 1;
*classScore = 466.0;
return;
}
else {
if (x[123] <= 0.032165540382266045) {
if (x[103] <= 0.4637199342250824) {
*classIdx = 2;
*classScore = 518.0;
return;
}
else {
*classIdx = 1;
*classScore = 466.0;
return;
}
}
else {
*classIdx = 1;
*classScore = 466.0;
return;
}
}
}
else {
*classIdx = 2;
*classScore = 518.0;
return;
}
}
}
else {
if (x[2] <= 0.04892366752028465) {
*classIdx = 2;
*classScore = 518.0;
return;
}
else {
if (x[6] <= 0.018453402444720268) {
*classIdx = 1;
*classScore = 466.0;
return;
}
else {
if (x[116] <= 0.09328529983758926) {
*classIdx = 1;
*classScore = 466.0;
return;
}
else {
*classIdx = 2;
*classScore = 518.0;
return;
}
}
}
}
}
}
}
else {
if (x[59] <= 0.09137589856982231) {
*classIdx = 1;
*classScore = 466.0;
return;
}
else {
if (x[61] <= 0.19741814583539963) {
if (x[79] <= 0.38941070437431335) {
*classIdx = 2;
*classScore = 518.0;
return;
}
else {
*classIdx = 1;
*classScore = 466.0;
return;
}
}
else {
*classIdx = 1;
*classScore = 466.0;
return;
}
}
}
}
else {
if (x[65] <= 0.36613909900188446) {
if (x[67] <= 0.7522072196006775) {
*classIdx = 2;
*classScore = 518.0;
return;
}
else {
*classIdx = 1;
*classScore = 466.0;
return;
}
}
else {
*classIdx = 0;
*classScore = 488.0;
return;
}
}
}
}
/**
* Random forest's tree #2
*/
void tree2(float *x, uint8_t *classIdx, float *classScore) {
if (x[133] <= 0.45472584664821625) {
if (x[57] <= 0.30642061680555344) {
*classIdx = 3;
*classScore = 459.0;
return;
}
else {
*classIdx = 2;
*classScore = 511.0;
return;
}
}
else {
if (x[94] <= 0.013848140370100737) {
if (x[80] <= 0.9212180376052856) {
if (x[116] <= 0.09623592719435692) {
if (x[55] <= 0.05950098857283592) {
*classIdx = 2;
*classScore = 511.0;
return;
}
else {
*classIdx = 1;
*classScore = 560.0;
return;
}
}
else {
*classIdx = 2;
*classScore = 511.0;
return;
}
}
else {
*classIdx = 0;
*classScore = 448.0;
return;
}
}
else {
if (x[103] <= 0.10040346160531044) {
if (x[122] <= 0.02093493938446045) {
if (x[67] <= 0.5244172215461731) {
if (x[23] <= 0.3314560502767563) {
*classIdx = 3;
*classScore = 459.0;
return;
}
else {
if (x[45] <= 0.210725799202919) {
*classIdx = 2;
*classScore = 511.0;
return;
}
else {
*classIdx = 0;
*classScore = 448.0;
return;
}
}
}
else {
if (x[116] <= 0.09688782319426537) {
if (x[99] <= 0.15070531517267227) {
*classIdx = 1;
*classScore = 560.0;
return;
}
else {
if (x[104] <= 0.004858243744820356) {
*classIdx = 1;
*classScore = 560.0;
return;
}
else {
*classIdx = 2;
*classScore = 511.0;
return;
}
}
}
else {
if (x[107] <= 0.043371833860874176) {
*classIdx = 2;
*classScore = 511.0;
return;
}
else {
*classIdx = 1;
*classScore = 560.0;
return;
}
}
}
}
else {
if (x[90] <= 0.02459509950131178) {
if (x[133] <= 0.8430708050727844) {
if (x[35] <= 0.0420481413602829) {
*classIdx = 1;
*classScore = 560.0;
return;
}
else {
*classIdx = 2;
*classScore = 511.0;
return;
}
}
else {
*classIdx = 2;
*classScore = 511.0;
return;
}
}
else {
*classIdx = 2;
*classScore = 511.0;
return;
}
}
}
else {
if (x[109] <= 0.18476517498493195) {
if (x[56] <= 0.2247144728899002) {
if (x[116] <= 0.0034325255546718836) {
if (x[79] <= 0.15541844815015793) {
*classIdx = 2;
*classScore = 511.0;
return;
}
else {
*classIdx = 1;
*classScore = 560.0;
return;
}
}
else {
if (x[98] <= 0.000795243657194078) {
if (x[33] <= 0.5699660181999207) {
*classIdx = 1;
*classScore = 560.0;
return;
}
else {
if (x[88] <= 0.20550961047410965) {
*classIdx = 2;
*classScore = 511.0;
return;
}
else {
*classIdx = 1;
*classScore = 560.0;
return;
}
}
}
else {
*classIdx = 2;
*classScore = 511.0;
return;
}
}
}
else {
if (x[74] <= 0.0708680022507906) {
if (x[116] <= 0.11245472729206085) {
*classIdx = 1;
*classScore = 560.0;
return;
}
else {
*classIdx = 2;
*classScore = 511.0;
return;
}
}
else {
*classIdx = 2;
*classScore = 511.0;
return;
}
}
}
else {
if (x[55] <= 0.056950220838189125) {
*classIdx = 2;
*classScore = 511.0;
return;
}
else {
*classIdx = 1;
*classScore = 560.0;
return;
}
}
}
}
}
}
/**
* Random forest's tree #3
*/
void tree3(float *x, uint8_t *classIdx, float *classScore) {
if (x[80] <= 0.9138846397399902) {
if (x[102] <= 0.10483590140938759) {
*classIdx = 3;
*classScore = 487.0;
return;
}
else {
if (x[97] <= 0.01703598815947771) {
if (x[75] <= 0.023341485299170017) {
if (x[70] <= 0.1384853944182396) {
if (x[101] <= 0.2657548785209656) {
if (x[78] <= 0.00982948113232851) {
*classIdx = 2;
*classScore = 479.0;
return;
}
else {
*classIdx = 1;
*classScore = 496.0;
return;
}
}
else {
if (x[58] <= 0.9875586926937103) {
*classIdx = 1;
*classScore = 496.0;
return;
}
else {
if (x[22] <= 0.18773172795772552) {
if (x[95] <= 0.019351176917552948) {
if (x[11] <= 0.01873837038874626) {
*classIdx = 1;
*classScore = 496.0;
return;
}
else {
*classIdx = 2;
*classScore = 479.0;
return;
}
}
else {
if (x[110] <= 0.0485067144036293) {
*classIdx = 2;
*classScore = 479.0;
return;
}
else {
*classIdx = 1;
*classScore = 496.0;
return;
}
}
}
else {
if (x[54] <= 0.033164238557219505) {
if (x[80] <= 0.3718045800924301) {
*classIdx = 2;
*classScore = 479.0;
return;
}
else {
*classIdx = 1;
*classScore = 496.0;
return;
}
}
else {
*classIdx = 1;
*classScore = 496.0;
return;
}
}
}
}
}
else {
*classIdx = 2;
*classScore = 479.0;
return;
}
}
else {
if (x[124] <= 0.9936124086380005) {
if (x[73] <= 0.0703774020075798) {
*classIdx = 1;
*classScore = 496.0;
return;
}
else {
*classIdx = 2;
*classScore = 479.0;
return;
}
}
else {
*classIdx = 1;
*classScore = 496.0;
return;
}
}
}
else {
if (x[47] <= 0.12305829674005508) {
if (x[90] <= 0.008263786789029837) {
if (x[98] <= 0.009134478168562055) {
if (x[96] <= 0.03772225510329008) {
*classIdx = 1;
*classScore = 496.0;
return;
}
else {
*classIdx = 2;
*classScore = 479.0;
return;
}
}
else {
*classIdx = 2;
*classScore = 479.0;
return;
}
}
else {
*classIdx = 2;
*classScore = 479.0;
return;
}
}
else {
if (x[64] <= 0.18797582015395164) {
*classIdx = 2;
*classScore = 479.0;
return;
}
else {
*classIdx = 1;
*classScore = 496.0;
return;
}
}
}
}
}
else {
*classIdx = 0;
*classScore = 516.0;
return;
}
}
/**
* Random forest's tree #4
*/
void tree4(float *x, uint8_t *classIdx, float *classScore) {
if (x[65] <= 0.4568137377500534) {
if (x[111] <= 0.04640892706811428) {
*classIdx = 3;
*classScore = 483.0;
return;
}
else {
if (x[92] <= 0.5991251170635223) {
if (x[116] <= 0.08080089464783669) {
if (x[46] <= 0.1407422199845314) {
if (x[107] <= 0.10579070821404457) {
if (x[79] <= 0.19204548746347427) {
if (x[97] <= 0.03240184811875224) {
*classIdx = 1;
*classScore = 478.0;
return;
}
else {
*classIdx = 2;
*classScore = 528.0;
return;
}
}
else {
if (x[54] <= 0.015389987733215094) {
if (x[90] <= 0.02292781602591276) {
*classIdx = 1;
*classScore = 478.0;
return;
}
else {
*classIdx = 2;
*classScore = 528.0;
return;
}
}
else {
*classIdx = 1;
*classScore = 478.0;
return;
}
}
}
else {
if (x[55] <= 0.10951834544539452) {
*classIdx = 2;
*classScore = 528.0;
return;
}
else {
*classIdx = 1;
*classScore = 478.0;
return;
}
}
}
else {
if (x[90] <= 0.007291872752830386) {
if (x[114] <= 0.05278712324798107) {
if (x[5] <= 0.019473688676953316) {
*classIdx = 2;
*classScore = 528.0;
return;
}
else {
*classIdx = 1;
*classScore = 478.0;
return;
}
}
else {
*classIdx = 1;
*classScore = 478.0;
return;
}
}
else {
if (x[61] <= 0.06436269357800484) {
if (x[91] <= 0.004494044464081526) {
*classIdx = 1;
*classScore = 478.0;
return;
}
else {
*classIdx = 2;
*classScore = 528.0;
return;
}
}
else {
*classIdx = 1;
*classScore = 478.0;
return;
}
}
}
}
else {
if (x[55] <= 0.08292442187666893) {
*classIdx = 2;
*classScore = 528.0;
return;
}
else {
if (x[67] <= 0.795905202627182) {
*classIdx = 2;
*classScore = 528.0;
return;
}
else {
*classIdx = 1;
*classScore = 478.0;
return;
}
}
}
}
else {
if (x[80] <= 0.5234813690185547) {
if (x[21] <= 0.049780791625380516) {
if (x[46] <= 0.15785471722483635) {
*classIdx = 2;
*classScore = 528.0;
return;
}
else {
*classIdx = 1;
*classScore = 478.0;
return;
}
}
else {
if (x[116] <= 0.06707945093512535) {
*classIdx = 1;
*classScore = 478.0;
return;
}
else {
*classIdx = 2;
*classScore = 528.0;
return;
}
}
}
else {
if (x[117] <= 0.07842132449150085) {
*classIdx = 1;
*classScore = 478.0;
return;
}
else {
*classIdx = 2;
*classScore = 528.0;
return;
}
}
}
}
}
else {
*classIdx = 0;
*classScore = 489.0;
return;
}
}
/**
* Random forest's tree #5
*/
void tree5(float *x, uint8_t *classIdx, float *classScore) {
if (x[101] <= 0.052058856934309006) {
if (x[108] <= 0.5930112600326538) {
if (x[80] <= 0.48694971203804016) {
*classIdx = 2;
*classScore = 508.0;
return;
}
else {
*classIdx = 1;
*classScore = 506.0;
return;
}
}
else {
*classIdx = 3;
*classScore = 478.0;
return;
}
}
else {
if (x[78] <= 0.12165448069572449) {
if (x[64] <= 0.13614977896213531) {
if (x[116] <= 0.0720963291823864) {
if (x[125] <= 0.006470485590398312) {
if (x[102] <= 0.5091452896595001) {
*classIdx = 1;
*classScore = 506.0;
return;
}
else {
*classIdx = 2;
*classScore = 508.0;
return;
}
}
else {
if (x[133] <= 0.8621841073036194) {
if (x[107] <= 0.10208133608102798) {
*classIdx = 1;
*classScore = 506.0;
return;
}
else {
if (x[65] <= 0.16045310348272324) {
*classIdx = 2;
*classScore = 508.0;
return;
}
else {
*classIdx = 1;
*classScore = 506.0;
return;
}
}
}
else {
*classIdx = 2;
*classScore = 508.0;
return;
}
}
}
else {
if (x[108] <= 0.20820708572864532) {
if (x[10] <= 0.01630954770371318) {
if (x[47] <= 0.1604420617222786) {
*classIdx = 2;
*classScore = 508.0;
return;
}
else {
*classIdx = 1;
*classScore = 506.0;
return;
}
}
else {
*classIdx = 1;
*classScore = 506.0;
return;
}
}
else {
if (x[98] <= 0.01953808404505253) {
*classIdx = 1;
*classScore = 506.0;
return;
}
else {
*classIdx = 2;
*classScore = 508.0;
return;
}
}
}
}
else {
if (x[55] <= 0.06958340853452682) {
if (x[111] <= 0.8284404277801514) {
if (x[95] <= 0.3986862450838089) {
if (x[94] <= 0.01923585683107376) {
if (x[102] <= 0.967304915189743) {
*classIdx = 2;
*classScore = 508.0;
return;
}
else {
*classIdx = 1;
*classScore = 506.0;
return;
}
}
else {
*classIdx = 2;
*classScore = 508.0;
return;
}
}
else {
*classIdx = 1;
*classScore = 506.0;
return;
}
}
else {
*classIdx = 1;
*classScore = 506.0;
return;
}
}
else {
if (x[54] <= 0.4388955533504486) {
if (x[75] <= 0.01729480642825365) {
if (x[116] <= 0.13019520416855812) {
*classIdx = 1;
*classScore = 506.0;
return;
}
else {
*classIdx = 2;
*classScore = 508.0;
return;
}
}
else {
if (x[67] <= 0.38635003566741943) {
*classIdx = 2;
*classScore = 508.0;
return;
}
else {
if (x[68] <= 0.3347695767879486) {
*classIdx = 1;
*classScore = 506.0;
return;
}
else {
*classIdx = 2;
*classScore = 508.0;
return;
}
}
}
}
else {
*classIdx = 2;
*classScore = 508.0;
return;
}
}
}
}
else {
if (x[44] <= 0.9923345446586609) {
if (x[103] <= 0.1337764412164688) {
*classIdx = 1;
*classScore = 506.0;
return;
}
else {
*classIdx = 2;
*classScore = 508.0;
return;
}
}
else {
if (x[96] <= 0.0030480041168630123) {
*classIdx = 0;
*classScore = 486.0;
return;
}
else {
if (x[103] <= 0.19916509091854095) {
*classIdx = 1;
*classScore = 506.0;
return;
}
else {
*classIdx = 2;
*classScore = 508.0;
return;
}
}
}
}
}
}
/**
* Random forest's tree #6
*/
void tree6(float *x, uint8_t *classIdx, float *classScore) {
if (x[102] <= 0.11687179654836655) {
if (x[64] <= 0.17842888087034225) {
*classIdx = 3;
*classScore = 471.0;
return;
}
else {
if (x[61] <= 0.037651170045137405) {
*classIdx = 0;
*classScore = 456.0;
return;
}
else {
*classIdx = 1;
*classScore = 555.0;
return;
}
}
}
else {
if (x[70] <= 0.06084801256656647) {
if (x[116] <= 0.07822248339653015) {
if (x[49] <= 0.38092613220214844) {
if (x[120] <= 0.013017720077186823) {
if (x[46] <= 0.15880535542964935) {
if (x[103] <= 0.6758613288402557) {
if (x[97] <= 0.028888202272355556) {
*classIdx = 1;
*classScore = 555.0;
return;
}
else {
*classIdx = 2;
*classScore = 496.0;
return;
}
}
else {
*classIdx = 2;
*classScore = 496.0;
return;
}
}
else {
*classIdx = 2;
*classScore = 496.0;
return;
}
}
else {
if (x[59] <= 0.06674952432513237) {
*classIdx = 1;
*classScore = 555.0;
return;
}
else {
*classIdx = 2;
*classScore = 496.0;
return;
}
}
}
else {
if (x[101] <= 0.16203821450471878) {
*classIdx = 2;
*classScore = 496.0;
return;
}
else {
if (x[117] <= 0.29609745740890503) {
*classIdx = 1;
*classScore = 555.0;
return;
}
else {
if (x[63] <= 0.011694431537762284) {
*classIdx = 2;
*classScore = 496.0;
return;
}
else {
*classIdx = 1;
*classScore = 555.0;
return;
}
}
}
}
}
else {
if (x[98] <= 0.008444164413958788) {
if (x[55] <= 0.08139839395880699) {
if (x[46] <= 0.06833056174218655) {
*classIdx = 1;
*classScore = 555.0;
return;
}
else {
*classIdx = 2;
*classScore = 496.0;
return;
}
}
else {
*classIdx = 1;
*classScore = 555.0;
return;
}
}
else {
*classIdx = 2;
*classScore = 496.0;
return;
}
}
}
else {
if (x[71] <= 0.01715219486504793) {
if (x[71] <= 0.007186424918472767) {
*classIdx = 1;
*classScore = 555.0;
return;
}
else {
if (x[54] <= 0.023847054690122604) {
*classIdx = 1;
*classScore = 555.0;
return;
}
else {
*classIdx = 2;
*classScore = 496.0;
return;
}
}
}
else {
if (x[102] <= 0.18921969085931778) {
*classIdx = 1;
*classScore = 555.0;
return;
}
else {
*classIdx = 2;
*classScore = 496.0;
return;
}
}
}
}
}
/**
* Random forest's tree #7
*/
void tree7(float *x, uint8_t *classIdx, float *classScore) {
if (x[114] <= 0.03222952038049698) {
if (x[64] <= 0.17848213016986847) {
if (x[103] <= 0.20130645111203194) {
*classIdx = 3;
*classScore = 479.0;
return;
}
else {
*classIdx = 2;
*classScore = 514.0;
return;
}
}
else {
*classIdx = 0;
*classScore = 504.0;
return;
}
}
else {
if (x[98] <= 0.011821059044450521) {
if (x[80] <= 0.35860520601272583) {
*classIdx = 2;
*classScore = 514.0;
return;
}
else {
if (x[67] <= 0.3444618433713913) {
*classIdx = 2;
*classScore = 514.0;
return;
}
else {
if (x[101] <= 0.4114457815885544) {
if (x[43] <= 0.07745068892836571) {
*classIdx = 2;
*classScore = 514.0;
return;
}
else {
if (x[59] <= 0.19998691976070404) {
if (x[42] <= 0.09131728485226631) {
if (x[7] <= 0.07340359315276146) {
if (x[104] <= 0.05308664217591286) {
*classIdx = 1;
*classScore = 481.0;
return;
}
else {
*classIdx = 2;
*classScore = 514.0;
return;
}
}
else {
*classIdx = 1;
*classScore = 481.0;
return;
}
}
else {
*classIdx = 2;
*classScore = 514.0;
return;
}
}
else {
*classIdx = 2;
*classScore = 514.0;
return;
}
}
}
else {
*classIdx = 1;
*classScore = 481.0;
return;
}
}
}
}
else {
if (x[56] <= 0.41088466346263885) {
if (x[47] <= 0.14968156814575195) {
if (x[7] <= 0.2603675201535225) {
if (x[99] <= 0.004318844527006149) {
if (x[41] <= 0.019454671069979668) {
*classIdx = 2;
*classScore = 514.0;
return;
}
else {
*classIdx = 1;
*classScore = 481.0;
return;
}
}
else {
if (x[21] <= 0.1030389778316021) {
*classIdx = 2;
*classScore = 514.0;
return;
}
else {
if (x[111] <= 0.551390528678894) {
*classIdx = 2;
*classScore = 514.0;
return;
}
else {
*classIdx = 1;
*classScore = 481.0;
return;
}
}
}
}
else {
*classIdx = 3;
*classScore = 479.0;
return;
}
}
else {
*classIdx = 1;
*classScore = 481.0;
return;
}
}
else {
if (x[125] <= 0.11612779647111893) {
*classIdx = 1;
*classScore = 481.0;
return;
}
else {
*classIdx = 2;
*classScore = 514.0;
return;
}
}
}
}
}
/**
* Random forest's tree #8
*/
void tree8(float *x, uint8_t *classIdx, float *classScore) {
if (x[101] <= 0.05232098326086998) {
if (x[108] <= 0.5930112600326538) {
if (x[42] <= 0.05685785599052906) {
*classIdx = 1;
*classScore = 505.0;
return;
}
else {
*classIdx = 2;
*classScore = 496.0;
return;
}
}
else {
*classIdx = 3;
*classScore = 493.0;
return;
}
}
else {
if (x[49] <= 0.008799195755273104) {
if (x[67] <= 0.7265111804008484) {
*classIdx = 0;
*classScore = 484.0;
return;
}
else {
if (x[78] <= 0.018843566067516804) {
*classIdx = 2;
*classScore = 496.0;
return;
}
else {
*classIdx = 1;
*classScore = 505.0;
return;
}
}
}
else {
if (x[92] <= 0.5997764766216278) {
if (x[80] <= 0.37235601246356964) {
if (x[57] <= 0.014879327500239015) {
*classIdx = 3;
*classScore = 493.0;
return;
}
else {
if (x[107] <= 0.004320872016251087) {
if (x[114] <= 0.0745684988796711) {
*classIdx = 1;
*classScore = 505.0;
return;
}
else {
*classIdx = 2;
*classScore = 496.0;
return;
}
}
else {
*classIdx = 2;
*classScore = 496.0;
return;
}
}
}
else {
if (x[98] <= 0.022634425200521946) {
if (x[68] <= 0.10072548314929008) {
*classIdx = 1;
*classScore = 505.0;
return;
}
else {
if (x[49] <= 0.24995308369398117) {
*classIdx = 2;
*classScore = 496.0;
return;
}
else {
if (x[43] <= 0.25109250098466873) {
*classIdx = 1;
*classScore = 505.0;
return;
}
else {
if (x[111] <= 0.30603039264678955) {
*classIdx = 2;
*classScore = 496.0;
return;
}
else {
*classIdx = 1;
*classScore = 505.0;
return;
}
}
}
}
}
else {
if (x[94] <= 0.30125169456005096) {
*classIdx = 2;
*classScore = 496.0;
return;
}
else {
*classIdx = 1;
*classScore = 505.0;
return;
}
}
}
}
else {
if (x[90] <= 0.011206488590687513) {
if (x[88] <= 0.07520439848303795) {
*classIdx = 2;
*classScore = 496.0;
return;
}
else {
*classIdx = 1;
*classScore = 505.0;
return;
}
}
else {
if (x[45] <= 0.09221789240837097) {
if (x[60] <= 0.40736718475818634) {
if (x[61] <= 0.2641521543264389) {
if (x[80] <= 0.5720258057117462) {
if (x[47] <= 0.21448105573654175) {
*classIdx = 2;
*classScore = 496.0;
return;
}
else {
*classIdx = 1;
*classScore = 505.0;
return;
}
}
else {
*classIdx = 1;
*classScore = 505.0;
return;
}
}
else {
*classIdx = 1;
*classScore = 505.0;
return;
}
}
else {
if (x[65] <= 0.2080097794532776) {
*classIdx = 2;
*classScore = 496.0;
return;
}
else {
*classIdx = 1;
*classScore = 505.0;
return;
}
}
}
else {
*classIdx = 1;
*classScore = 505.0;
return;
}
}
}
}
}
}
/**
* Random forest's tree #9
*/
void tree9(float *x, uint8_t *classIdx, float *classScore) {
if (x[112] <= 0.0743429847061634) {
*classIdx = 3;
*classScore = 467.0;
return;
}
else {
if (x[110] <= 0.28466828167438507) {
if (x[116] <= 0.08032038062810898) {
if (x[93] <= 0.11881325766444206) {
if (x[92] <= 0.9340429902076721) {
if (x[110] <= 0.00503910006955266) {
if (x[15] <= 0.025954012759029865) {
*classIdx = 2;
*classScore = 513.0;
return;
}
else {
*classIdx = 1;
*classScore = 505.0;
return;
}
}
else {
*classIdx = 1;
*classScore = 505.0;
return;
}
}
else {
*classIdx = 2;
*classScore = 513.0;
return;
}
}
else {
if (x[98] <= 0.017721661366522312) {
if (x[56] <= 0.1771697998046875) {
if (x[72] <= 0.01185616571456194) {
*classIdx = 2;
*classScore = 513.0;
return;
}
else {
*classIdx = 1;
*classScore = 505.0;
return;
}
}
else {
*classIdx = 1;
*classScore = 505.0;
return;
}
}
else {
if (x[58] <= 0.15649032592773438) {
*classIdx = 1;
*classScore = 505.0;
return;
}
else {
*classIdx = 2;
*classScore = 513.0;
return;
}
}
}
}
else {
if (x[58] <= 0.34245556592941284) {
*classIdx = 1;
*classScore = 505.0;
return;
}
else {
if (x[56] <= 0.2746366709470749) {
if (x[114] <= 0.2599753737449646) {
if (x[23] <= 0.7012089490890503) {
if (x[94] <= 0.012615592684596777) {
if (x[59] <= 0.19462940841913223) {
if (x[43] <= 0.1349761039018631) {
*classIdx = 1;
*classScore = 505.0;
return;
}
else {
*classIdx = 2;
*classScore = 513.0;
return;
}
}
else {
*classIdx = 2;
*classScore = 513.0;
return;
}
}
else {
*classIdx = 2;
*classScore = 513.0;
return;
}
}
else {
if (x[64] <= 0.36634698510169983) {
*classIdx = 2;
*classScore = 513.0;
return;
}
else {
*classIdx = 1;
*classScore = 505.0;
return;
}
}
}
else {
if (x[103] <= 0.06138048693537712) {
*classIdx = 1;
*classScore = 505.0;
return;
}
else {
*classIdx = 2;
*classScore = 513.0;
return;
}
}
}
else {
if (x[124] <= 0.9182375073432922) {
*classIdx = 2;
*classScore = 513.0;
return;
}
else {
*classIdx = 1;
*classScore = 505.0;
return;
}
}
}
}
}
else {
if (x[21] <= 0.03671480901539326) {
*classIdx = 1;
*classScore = 505.0;
return;
}
else {
*classIdx = 0;
*classScore = 493.0;
return;
}
}
}
}
};
static RandomForestClassifier classifier;
#endif