| 60 | } |
| 61 | |
| 62 | array bagging(array &train_feats, array &test_feats, array &train_labels, |
| 63 | int num_classes, int num_models, int sample_size) { |
| 64 | int num_train = train_feats.dims(0); |
| 65 | int num_test = test_feats.dims(0); |
| 66 | |
| 67 | array idx = floor(randu(sample_size, num_models) * num_train); |
| 68 | array labels_all = constant(0, num_test, num_classes); |
| 69 | array off = seq(num_test); |
| 70 | |
| 71 | for (int i = 0; i < num_models; i++) { |
| 72 | array ii = idx(span, i); |
| 73 | |
| 74 | array train_feats_ii = lookup(train_feats, ii, 0); |
| 75 | array train_labels_ii = train_labels(ii); |
| 76 | |
| 77 | // Get the predicted results |
| 78 | array labels_ii = knn(train_feats_ii, test_feats, train_labels_ii); |
| 79 | array lidx = labels_ii * num_test + off; |
| 80 | |
| 81 | labels_all(lidx) = labels_all(lidx) + 1; |
| 82 | } |
| 83 | |
| 84 | array val, labels; |
| 85 | max(val, labels, labels_all, 1); |
| 86 | |
| 87 | return labels; |
| 88 | } |
| 89 | |
| 90 | void bagging_demo(bool console, int perc) { |
| 91 | array train_images, train_labels; |