---
# System prepended metadata

title: All Features (29/11/2021) Iterative

---

# All Features (29/11/2021) Iterative

## Iteration 1 - Original keypoints

### Overall score
Training accuracy 0.8929524765107294 +/- 0.013995257489632991
Cross-validation accuracy: 0.6831016694808427 +/- 0.026483745356732525
Best estimator:
Pipeline(steps=[('preprocessing',
                 Pipeline(steps=[('scaler', StandardScaler())])),
                ('feature_selection',
                 Pipeline(steps=[('kbest', SelectKBest(k=360))])),
                ('classifier',
                 RidgeClassifier(alpha=0.02030917620904739,
                                 class_weight='balanced', max_iter=10000))])

### Fold scores
Fold 0: Training accuracy 0.8742382271468144 +/- 0.8742382271468144
Fold 0: Cross-validation accuracy: 0.7098445595854922 +/- 0.7098445595854922

Fold 1: Training accuracy 0.909778812572759 +/- 0.909778812572759
Fold 1: Cross-validation accuracy: 0.6680761099365751 +/- 0.6680761099365751

Fold 2: Training accuracy 0.8868335146898803 +/- 0.8868335146898803
Fold 2: Cross-validation accuracy: 0.7195467422096318 +/- 0.7195467422096318

Fold 3: Training accuracy 0.9087136929460581 +/- 0.9087136929460581
Fold 3: Cross-validation accuracy: 0.6527777777777778 +/- 0.6527777777777778

Fold 4: Training accuracy 0.8851981351981352 +/- 0.8851981351981352
Fold 4: Cross-validation accuracy: 0.6652631578947369 +/- 0.6652631578947369

### Fold distributions
Training folds are well distributed, test folds not so much.
Remark: folds with more easy to recognize signs perform better.

## Iteration 2 - Original keypoints without face features

### Overall score
Training accuracy 0.8366827771203214 +/- 0.006371249668605516
Cross-validation accuracy: 0.65505040849567 +/- 0.03401498477793019
Best estimator:
Pipeline(steps=[('preprocessing',
                 Pipeline(steps=[('scaler', StandardScaler())])),
                ('feature_selection',
                 Pipeline(steps=[('kbest', SelectKBest(k=360))])),
                ('classifier',
                 RidgeClassifier(alpha=0.8376776400682924,
                                 class_weight='balanced', max_iter=10000))])
                                
### Fold scores
Fold 0: Training accuracy 0.8271468144044322 +/- 0.8271468144044322
Fold 0: Cross-validation accuracy: 0.6632124352331606 +/- 0.6632124352331606

Fold 1: Training accuracy 0.8416763678696159 +/- 0.8416763678696159
Fold 1: Cross-validation accuracy: 0.6448202959830867 +/- 0.6448202959830867

Fold 2: Training accuracy 0.8454842219804135 +/- 0.8454842219804135
Fold 2: Cross-validation accuracy: 0.71671388101983 +/- 0.71671388101983

Fold 3: Training accuracy 0.8340248962655602 +/- 0.8340248962655602
Fold 3: Cross-validation accuracy: 0.621031746031746 +/- 0.621031746031746

Fold 4: Training accuracy 0.835081585081585 +/- 0.835081585081585
Fold 4: Cross-validation accuracy: 0.6294736842105263 +/- 0.6294736842105263

### Fold distributions
Worse score than using all features but scores of folds are a bit closer to each-other. One fold outperforms them all (2) but we notice that that one contains a lot of HAAS-oos (a class that is easily classified)

## Iteration 3 - Original keypoints without face features and fix-undetected and sync

### Overall score
Training accuracy 0.8430460818940008 +/- 0.008887841207751565
Cross-validation accuracy: 0.6643151309647638 +/- 0.011563874678297214
Best estimator:
Pipeline(steps=[('preprocessing',
                 Pipeline(steps=[('scaler', StandardScaler())])),
                ('feature_selection',
                 Pipeline(steps=[('kbest', SelectKBest(k=360))])),
                ('classifier',
                 RidgeClassifier(alpha=0.8376776400682924,
                                 class_weight='balanced', max_iter=10000))])

### Fold scores
Fold 0: Training accuracy 0.8343490304709141 +/- 0.8343490304709141
Fold 0: Cross-validation accuracy: 0.6839378238341969 +/- 0.6839378238341969

Fold 1: Training accuracy 0.8591385331781141 +/- 0.8591385331781141
Fold 1: Cross-validation accuracy: 0.6511627906976745 +/- 0.6511627906976745

Fold 2: Training accuracy 0.8378672470076169 +/- 0.8378672470076169
Fold 2: Cross-validation accuracy: 0.6685552407932012 +/- 0.6685552407932012

Fold 3: Training accuracy 0.8458802608180201 +/- 0.8458802608180201
Fold 3: Cross-validation accuracy: 0.6547619047619048 +/- 0.6547619047619048

Fold 4: Training accuracy 0.837995337995338 +/- 0.837995337995338
Fold 4: Cross-validation accuracy: 0.6631578947368421 +/- 0.6631578947368421

### Fold distributions
Folds are closer to each other! We also have a better score although the distribution of the folds remains the same.

Why fold 2 worse? Maybe it learned that untracked hands belong to HAAS-oor. When untracking was fixed, haas-oor could be classified less accurate but lies closer to the other folds.

## Iteration 4 - Orig. kp no face, fix-undetect, sync and center

### Overall score
Training accuracy 0.8360936126616796 +/- 0.01372835908822496
Cross-validation accuracy: 0.6668011186354829 +/- 0.02922201137874495
Best estimator:
Pipeline(steps=[('preprocessing',
                 Pipeline(steps=[('scaler', StandardScaler())])),
                ('feature_selection',
                 Pipeline(steps=[('kbest', SelectKBest(k=300))])),
                ('classifier',
                 RidgeClassifier(alpha=0.49238826317067413,
                                 class_weight='balanced', max_iter=10000))])
                                 

### Fold scores
Fold 0: Training accuracy 0.821606648199446 +/- 0.821606648199446
Fold 0: Cross-validation accuracy: 0.6994818652849741 +/- 0.6994818652849741

Fold 1: Training accuracy 0.8608847497089639 +/- 0.8608847497089639
Fold 1: Cross-validation accuracy: 0.6257928118393234 +/- 0.6257928118393234

Fold 2: Training accuracy 0.8253536452665942 +/- 0.8253536452665942
Fold 2: Cross-validation accuracy: 0.6997167138810199 +/- 0.6997167138810199

Fold 3: Training accuracy 0.8352104327208062 +/- 0.8352104327208062
Fold 3: Cross-validation accuracy: 0.6626984126984127 +/- 0.6626984126984127

Fold 4: Training accuracy 0.8374125874125874 +/- 0.8374125874125874
Fold 4: Cross-validation accuracy: 0.6463157894736842 +/- 0.6463157894736842

### Fold distributions
Score is slightly better and we only use 300 features instead of 360

## Iteration 5 - Orig. kp no face, fix-undetect, sync, center and unify shoulder

### Overall score
Training accuracy 0.8531281167534821 +/- 0.014770899640708575
Cross-validation accuracy: 0.663717254019289 +/- 0.021415229930152112
Best estimator:
Pipeline(steps=[('preprocessing',
                 Pipeline(steps=[('scaler', StandardScaler())])),
                ('feature_selection',
                 Pipeline(steps=[('kbest', SelectKBest(k=380))])),
                ('classifier',
                 RidgeClassifier(alpha=0.8376776400682924,
                                 class_weight='balanced', max_iter=10000))])
                                 

### Fold scores
Fold 0: Training accuracy 0.8354570637119113 +/- 0.8354570637119113
Fold 0: Cross-validation accuracy: 0.694300518134715 +/- 0.694300518134715

Fold 1: Training accuracy 0.8783469150174622 +/- 0.8783469150174622
Fold 1: Cross-validation accuracy: 0.6342494714587738 +/- 0.6342494714587738

Fold 2: Training accuracy 0.8422198041349293 +/- 0.8422198041349293
Fold 2: Cross-validation accuracy: 0.6770538243626062 +/- 0.6770538243626062

Fold 3: Training accuracy 0.8518079430942501 +/- 0.8518079430942501
Fold 3: Cross-validation accuracy: 0.6666666666666666 +/- 0.6666666666666666

Fold 4: Training accuracy 0.8578088578088578 +/- 0.8578088578088578
Fold 4: Cross-validation accuracy: 0.6463157894736842 +/- 0.6463157894736842

### Fold distributions
We have a worse (-0.003) score when adding unified shoulder (why?)


## Iteration 6 - Orig. kp no face, fix-undetect, sync, center, unify shoulder and LD mothafucking A

### Overall score
Training accuracy 0.8876427949409464 +/- 0.012702597974971514
Cross-validation accuracy: 0.671975836843225 +/- 0.03355775359978403
Best estimator:
Pipeline(steps=[('preprocessing',
                 Pipeline(steps=[('scaler', StandardScaler())])),
                ('feature_selection',
                 Pipeline(steps=[('feat_select',
                                  ColumnTransformer(transformers=[('old_feats_body',                                                                                LDA(42)
                ('classifier',
                 RidgeClassifier(alpha=100.0, class_weight='balanced',
                                 max_iter=10000))])
                                 
                                 
### Fold scores
Fold 0: Training accuracy 0.8692520775623269 +/- 0.8692520775623269
Fold 0: Cross-validation accuracy: 0.7253886010362695 +/- 0.7253886010362695

Fold 1: Training accuracy 0.9068684516880093 +/- 0.9068684516880093
Fold 1: Cross-validation accuracy: 0.6257928118393234 +/- 0.6257928118393234

Fold 2: Training accuracy 0.8813928182807399 +/- 0.8813928182807399
Fold 2: Cross-validation accuracy: 0.6855524079320113 +/- 0.6855524079320113

Fold 3: Training accuracy 0.8855957320687611 +/- 0.8855957320687611
Fold 3: Cross-validation accuracy: 0.6726190476190477 +/- 0.6726190476190477

Fold 4: Training accuracy 0.8951048951048951 +/- 0.8951048951048951
Fold 4: Cross-validation accuracy: 0.6505263157894737 +/- 0.6505263157894737

### Fold distributions
We have a pretty good score for only 42 features! BUT... test and cross-validation gap still significant(67 vs 63) and training and cross-validation gap still stagnating (might be explained by the few features)

## Iteration 7 - Orig. kp no face, fix-undetect, sync, center, unify shoulder, LDA and finger lenghts

### Overall score
Training accuracy 0.8766903000353615 +/- 0.012473732068323124
Cross-validation accuracy: 0.6854659564375706 +/- 0.026140365610837244
Best estimator:
Pipeline(steps=[('preprocessing',
                 Pipeline(steps=[('scaler', StandardScaler())])),
                ('feature_selection',
                 Pipeline(steps=[('feat_select', LDA and new features)])),
                 ('classifier',
                 RidgeClassifier(alpha=2424.462017082326,
                                 class_weight='balanced', max_iter=10000))])
                                 
                                 
### Fold scores
Fold 0: Training accuracy 0.8581717451523546 +/- 0.8581717451523546
Fold 0: Cross-validation accuracy: 0.7331606217616581 +/- 0.7331606217616581

Fold 1: Training accuracy 0.8963911525029103 +/- 0.8963911525029103
Fold 1: Cross-validation accuracy: 0.6659619450317125 +/- 0.6659619450317125

Fold 2: Training accuracy 0.8710554951033732 +/- 0.8710554951033732
Fold 2: Cross-validation accuracy: 0.6940509915014165 +/- 0.6940509915014165

Fold 3: Training accuracy 0.8772969768820391 +/- 0.8772969768820391
Fold 3: Cross-validation accuracy: 0.6646825396825397 +/- 0.6646825396825397

Fold 4: Training accuracy 0.8805361305361306 +/- 0.8805361305361306
Fold 4: Cross-validation accuracy: 0.6694736842105263 +/- 0.6694736842105263

### Fold distributions
Adding new features yielded an increase of about 1%. Fold validation scores lie a bit closer to each-other but the most extreme fold (1) has increased even more.

## Iteration 8 - Orig. kp no face, fix-undetect, sync, center, unify shoulder, LDA and finger lenghts (longer interpol)

### Overall score
Training accuracy 0.8767418496522925 +/- 0.014295838228407583
Cross-validation accuracy: 0.6848646725148474 +/- 0.028474976829306636
Best estimator:
Pipeline(steps=[('preprocessing',
                 Pipeline(steps=[('scaler', StandardScaler())])),
                ('feature_selection',
                 Pipeline(steps=[('feat_select',LDA + kbest = 30)]))
                 ('classifier',
                 RidgeClassifier(alpha=2424.462017082326,
                                 class_weight='balanced', max_iter=10000))])
                                 
                                 
### Fold scores
Fold 0: Training accuracy 0.8548476454293629 +/- 0.8548476454293629
Fold 0: Cross-validation accuracy: 0.7357512953367875 +/- 0.7357512953367875

Fold 1: Training accuracy 0.8981373690337602 +/- 0.8981373690337602
Fold 1: Cross-validation accuracy: 0.6638477801268499 +/- 0.6638477801268499

Fold 2: Training accuracy 0.8699673558215452 +/- 0.8699673558215452
Fold 2: Cross-validation accuracy: 0.6968838526912181 +/- 0.6968838526912181

Fold 3: Training accuracy 0.8778897451096621 +/- 0.8778897451096621
Fold 3: Cross-validation accuracy: 0.6646825396825397 +/- 0.6646825396825397

Fold 4: Training accuracy 0.8828671328671329 +/- 0.8828671328671329
Fold 4: Cross-validation accuracy: 0.6631578947368421 +/- 0.6631578947368421

### Fold distributions
We dont notice any great improvement. This means that adding more interpolation frames doesnt really improve overall score.

## Iteration 9 - Orig. kp no face, fix-undetect, sync, center, unify shoulder, LDA and body angles

### Overall score
Training accuracy 0.8745785410139281 +/- 0.01572602870822609
Cross-validation accuracy: 0.6852942924720761 +/- 0.03307577664995871
Best estimator:
Pipeline(steps=[('preprocessing',
                 Pipeline(steps=[('scaler', StandardScaler())])),
                ('feature_selection',
                 Pipeline(steps=[('feat_select',LDA + all body angles)]))
                 ('classifier',
                 RidgeClassifier(alpha=2424.462017082326,
                                 class_weight='balanced', max_iter=10000))])
                                               
### Fold scores
Fold 0: Training accuracy 0.8509695290858725 +/- 0.8509695290858725
Fold 0: Cross-validation accuracy: 0.7435233160621761 +/- 0.7435233160621761

Fold 1: Training accuracy 0.8993015133876601 +/- 0.8993015133876601
Fold 1: Cross-validation accuracy: 0.6448202959830867 +/- 0.6448202959830867

Fold 2: Training accuracy 0.8683351468988031 +/- 0.8683351468988031
Fold 2: Cross-validation accuracy: 0.6940509915014165 +/- 0.6940509915014165

Fold 3: Training accuracy 0.8743331357439241 +/- 0.8743331357439241
Fold 3: Cross-validation accuracy: 0.6746031746031746 +/- 0.6746031746031746

Fold 4: Training accuracy 0.87995337995338 +/- 0.87995337995338
Fold 4: Cross-validation accuracy: 0.6694736842105263 +/- 0.6694736842105263


### Fold distributions
We see an improvement compared to iteration 6 which might mean that the body angles are useful features to add.

## Iteration 10 - Orig. kp no face, fix-undetect, sync, center, unify shoulder, LDA and body angles (more interpol 4)

### Overall score
Training accuracy 0.8745752189269901 +/- 0.01514973094040969
Cross-validation accuracy: 0.6867412423567442 +/- 0.029966149309334698
Best estimator:
Pipeline(steps=[('preprocessing',
                 Pipeline(steps=[('scaler', StandardScaler())])),
                ('feature_selection',
                 Pipeline(steps=[('feat_select': LDA + kbest=32)]))
                 ('classifier',
                 RidgeClassifier(alpha=2424.462017082326,
                                 class_weight='balanced', max_iter=10000))])
                                 
                        
                                               
### Fold scores
Fold 0: Training accuracy 0.8509695290858725 +/- 0.8509695290858725
Fold 0: Cross-validation accuracy: 0.7409326424870466 +/- 0.7409326424870466

Fold 1: Training accuracy 0.8975552968568102 +/- 0.8975552968568102
Fold 1: Cross-validation accuracy: 0.6511627906976745 +/- 0.6511627906976745

Fold 2: Training accuracy 0.8688792165397171 +/- 0.8688792165397171
Fold 2: Cross-validation accuracy: 0.6912181303116147 +/- 0.6912181303116147

Fold 3: Training accuracy 0.8755186721991701 +/- 0.8755186721991701
Fold 3: Cross-validation accuracy: 0.6746031746031746 +/- 0.6746031746031746

Fold 4: Training accuracy 0.87995337995338 +/- 0.87995337995338
Fold 4: Cross-validation accuracy: 0.6757894736842105 +/- 0.6757894736842105


### Fold distributions
We have a slight improvement by adding more frames. Unlike adding frames with finger lengths, this one improved a bit. This might imply that body angles contain more temporal information than finger lengths.

## Iteration 11 - Orig. kp no face, fix-undetect, sync, center, unify shoulder, LDA and body angles (more interpol 8)

### Overall score
Training accuracy 0.8802791943125555 +/- 0.014468509930616727
Cross-validation accuracy: 0.6911229426592922 +/- 0.032164458538195606
Best estimator:
Pipeline(steps=[('preprocessing',
                 Pipeline(steps=[('scaler', StandardScaler())])),
                ('feature_selection',
                 Pipeline(steps=[('feat_select',LDA + kbest 116)]))
                ('classifier',
                 RidgeClassifier(alpha=1511.77507061566,
                                 class_weight='balanced', max_iter=10000))])
                                                            
### Fold scores
Fold 0: Training accuracy 0.8587257617728532 +/- 0.8587257617728532
Fold 0: Cross-validation accuracy: 0.7383419689119171 +/- 0.7383419689119171

Fold 1: Training accuracy 0.9027939464493597 +/- 0.9027939464493597
Fold 1: Cross-validation accuracy: 0.6448202959830867 +/- 0.6448202959830867

Fold 2: Training accuracy 0.8732317736670294 +/- 0.8732317736670294
Fold 2: Cross-validation accuracy: 0.7138810198300283 +/- 0.7138810198300283

Fold 3: Training accuracy 0.8814463544754001 +/- 0.8814463544754001
Fold 3: Cross-validation accuracy: 0.6785714285714286 +/- 0.6785714285714286

Fold 4: Training accuracy 0.8851981351981352 +/- 0.8851981351981352
Fold 4: Cross-validation accuracy: 0.68 +/- 0.68


### Fold distributions
Yay, we have an even better score now! Unfortunately, selectKbest selected 116 angle features instead of the previous 32 angle features. This is only a slight improvement for many more features added.

## Iteration 12 - Orig. kp no face, fix-undetect, sync, center, unify shoulder, LDA and body distances

### Overall score
Training accuracy 0.8648751415401035 +/- 0.015861879270712077
Cross-validation accuracy: 0.6831993575663304 +/- 0.03170117761353051
Best estimator:
Pipeline(steps=[('preprocessing',
                 Pipeline(steps=[('scaler', StandardScaler())])),
                ('feature_selection',
                 Pipeline(steps=[('feat_select',LDA + all feat)]))
                ('classifier',
                 RidgeClassifier(alpha=6235.507341273912,
                                 class_weight='balanced', max_iter=10000))])
                                                            
### Fold scores
Fold 0: Training accuracy 0.8404432132963989 +/- 0.8404432132963989
Fold 0: Cross-validation accuracy: 0.7409326424870466 +/- 0.7409326424870466

Fold 1: Training accuracy 0.889988358556461 +/- 0.889988358556461
Fold 1: Cross-validation accuracy: 0.6469344608879493 +/- 0.6469344608879493

Fold 2: Training accuracy 0.8601741022850925 +/- 0.8601741022850925
Fold 2: Cross-validation accuracy: 0.6855524079320113 +/- 0.6855524079320113

Fold 3: Training accuracy 0.8672199170124482 +/- 0.8672199170124482
Fold 3: Cross-validation accuracy: 0.6646825396825397 +/- 0.6646825396825397

Fold 4: Training accuracy 0.8665501165501166 +/- 0.8665501165501166
Fold 4: Cross-validation accuracy: 0.6778947368421052 +/- 0.6778947368421052


### Fold distributions
Better score but not as good as the angles. Folds are bit less equal.

## Iteration 13 - Orig. kp no face, fix-undetect, sync, center, unify shoulder, LDA and body distances (more interpol 8)

### Overall score
Training accuracy 0.8676540071976543 +/- 0.014847237268801883
Cross-validation accuracy: 0.685021932408308 +/- 0.03154627789688863
Best estimator:
Pipeline(steps=[('preprocessing',
                 Pipeline(steps=[('scaler', StandardScaler())])),
                ('feature_selection',
                 Pipeline(steps=[('feat_select',LDA + kbest=52)]))
                ('classifier',
                 RidgeClassifier(alpha=3888.155180308085,
                                 class_weight='balanced', max_iter=10000))])
                                                            
### Fold scores
Fold 0: Training accuracy 0.8426592797783934 +/- 0.8426592797783934
Fold 0: Cross-validation accuracy: 0.7357512953367875 +/- 0.7357512953367875

Fold 1: Training accuracy 0.889406286379511 +/- 0.889406286379511
Fold 1: Cross-validation accuracy: 0.638477801268499 +/- 0.638477801268499

Fold 2: Training accuracy 0.8683351468988031 +/- 0.8683351468988031
Fold 2: Cross-validation accuracy: 0.6940509915014165 +/- 0.6940509915014165

Fold 3: Training accuracy 0.8684054534676942 +/- 0.8684054534676942
Fold 3: Cross-validation accuracy: 0.6726190476190477 +/- 0.6726190476190477

Fold 4: Training accuracy 0.8694638694638694 +/- 0.8694638694638694
Fold 4: Cross-validation accuracy: 0.6842105263157895 +/- 0.6842105263157895


### Fold distributions
We have a slightly better score but maybe not worth it for the extra amount of features

## Iteration 14 - Orig. kp no face, fix-undetect, sync, center, unify shoulder, LDA and every above

### Overall score
Training accuracy 0.8741393729422737 +/- 0.013570018607200444
Cross-validation accuracy: 0.6951640244979987 +/- 0.02591457020895899
Best estimator:
Pipeline(steps=[('preprocessing',
                 Pipeline(steps=[('scaler', StandardScaler())])),
                ('feature_selection',
                 Pipeline(steps=[('feat_select', LDA + body_dist=1 + body_angles=81 + finger_lengths = ?)]))
                ('classifier',
                 RidgeClassifier(alpha=2335.7214690901214,
                                 class_weight='balanced', max_iter=10000))])
                                                            
### Fold scores
Fold 0: Training accuracy 0.8548476454293629 +/- 0.8548476454293629
Fold 0: Cross-validation accuracy: 0.7331606217616581 +/- 0.7331606217616581

Fold 1: Training accuracy 0.8946449359720605 +/- 0.8946449359720605
Fold 1: Cross-validation accuracy: 0.653276955602537 +/- 0.653276955602537

Fold 2: Training accuracy 0.8645266594124048 +/- 0.8645266594124048
Fold 2: Cross-validation accuracy: 0.6997167138810199 +/- 0.6997167138810199

Fold 3: Training accuracy 0.8778897451096621 +/- 0.8778897451096621
Fold 3: Cross-validation accuracy: 0.6865079365079365 +/- 0.6865079365079365

Fold 4: Training accuracy 0.8787878787878788 +/- 0.8787878787878788
Fold 4: Cross-validation accuracy: 0.7031578947368421 +/- 0.7031578947368421


### Fold distributions
