Ансамбль деревьев
Автор
function build_forest(y, X, n_subfeatures, n_trees, partial_sampling, max_depth, min_samples_leaf, min_samples_split)
n_samples = size(X, 1)
trees = []
oob_predictions = zeros(n_samples)
oob_counts = zeros(Int, n_samples)
for _ in 1:n_trees
sample_idx = rand(1:n_samples, Int(floor(n_samples * partial_sampling)))
oob_idx = setdiff(1:n_samples, sample_idx)
X_sample = X[sample_idx, :]
y_sample = y[sample_idx]
tree = DecisionTree.build_tree(y_sample, X_sample,
n_subfeatures, max_depth,
min_samples_leaf, min_samples_split)
for i in oob_idx
if i <= n_samples
pred = DecisionTree.apply_tree(tree, X[i, :])
if !isnan(pred) && !isinf(pred)
oob_predictions[i] += pred
oob_counts[i] += 1
end
end
end
push!(trees, tree)
end
for i in 1:n_samples
if oob_counts[i] > 0
oob_predictions[i] /= oob_counts[i]
else
oob_predictions[i] = NaN
end
end
return trees, oob_predictions
end