Ансамбль деревьев
Автор
function mse_alt(trees, X, y)
n_features = size(X, 2)
n_samples = size(X, 1)
importance = zeros(n_features)
for tree in trees
try
if isdefined(DecisionTree, :importance)
tree_imp = DecisionTree.importance(tree)
if length(tree_imp) == n_features
importance += tree_imp
end
else
tree_imp = zeros(n_features)
function traverse(node, weight=1.0)
if !node.isleaf
feat_id = node.feat_id
if !isnothing(feat_id) && feat_id > 0 && feat_id <= n_features
n_node = node.n
impurity_reduction = node.score -
(node.left.n / n_node) * node.left.score -
(node.right.n / n_node) * node.right.score
tree_imp[feat_id] += impurity_reduction * (n_node / n_samples)
traverse(node.left)
traverse(node.right)
end
end
end
traverse(tree)
importance += tree_imp
end
catch e
continue
end
end
if sum(importance) > 0
importance = importance / sum(importance)
end
return importance
end