--- a
+++ b/Ensemble Learning/AdaBoost/buildOneDStump.m
@@ -0,0 +1,40 @@
+function stump = buildOneDStump(x, y, d, w)
+[err_1, t_1] = searchThreshold(x, y, w, '>'); % > t_1 -> +1
+[err_2, t_2] = searchThreshold(x, y, w, '<'); % < t_2 -> +1
+stump = initStump(d);
+if err_1 <= err_2
+    stump.threshold = t_1;
+    stump.error = err_1;
+    stump.less = -1;
+    stump.more = 1;
+else
+    stump.threshold = t_2;
+    stump.error = err_2;
+    stump.less = 1;
+    stump.more = -1;
+end
+end
+
+function [error, thresh] = searchThreshold(x, y, w, sign)
+N = length(x);
+err_n = zeros(N, 1);
+y_predict = zeros(N, 1);
+for n=1:N
+    switch sign
+        case '>'
+            idx = logical(x >= x(n));
+            y_predict(idx) = 1;
+            y_predict(~idx) = -1;
+        case '<'
+            idx = logical(x < x(n));
+            y_predict(idx) = 1;
+            y_predict(~idx) = -1;
+    end
+    err_label = logical(y ~= y_predict);
+    %sum(err_label)
+    err_n(n) = sum(err_label.*w)/sum(w);
+end
+[v, idx] = min(err_n);
+error = v;
+thresh = x(idx);
+end