Ансамбль деревьев
Автор
function mse_imp(trees, X, y)
n_features = size(X, 2)
n_samples = size(X, 1)
importance = zeros(n_features)
for tree in trees
if tree isa DecisionTree.Node
function collect_importance(node)
if node isa DecisionTree.Node
if !node.left.isleaf && !node.right.isleaf
feat_id = node.feat_id
if !isnothing(feat_id) && feat_id > 0 && feat_id <= n_features
n_node = node.n
mse_current = node.score
mse_left = node.left.score
mse_right = node.right.score
mse_improvement = (n_node / n_samples) *
(mse_current -
(node.left.n / n_node) * mse_left -
(node.right.n / n_node) * mse_right)
importance[feat_id] += max(0, mse_improvement)
end
end
if !node.left.isleaf
collect_importance(node.left)
end
if !node.right.isleaf
collect_importance(node.right)
end
end
end
collect_importance(tree)
end
end
if sum(importance) > 0
importance = importance / sum(importance)
end
return importance
end