Ансамбль деревьев
Автор
function permutation_importance(trees, X, y, n_repeats=5)
n_features = size(X, 2)
n_samples = size(X, 1)
n_trees = length(trees)
importance = zeros(n_features)
baseline_pred = predict_ensemble(trees, X)
valid_idx = .!isnan.(baseline_pred)
if sum(valid_idx) == 0
#error("Нет валидных базовых предсказаний")
end
baseline_mse = mean((y[valid_idx] - baseline_pred[valid_idx]).^2)
for f in 1:n_features
f_importance = 0.0
for _ in 1:n_repeats
X_perm = copy(X)
perm_idx = randperm(n_samples)
X_perm[:, f] = X[perm_idx, f]
perm_pred = predict_ensemble(trees, X_perm)
valid_perm_idx = valid_idx .& .!isnan.(perm_pred)
if sum(valid_perm_idx) > 0
perm_mse = mean((y[valid_perm_idx] - perm_pred[valid_perm_idx]).^2)
f_importance += (perm_mse - baseline_mse)
end
end
importance[f] = f_importance / n_repeats
end
return importance
end