web-dev-qa-db-fra.com

Pourquoi la formation d'une régresseur forestière aléatoire avec MAE est-elle si lente que MSE?

Lors de l'entraînement sur des applications, même de petites applications (<50k lignes <50 colonnes) à l'aide du critère d'erreur absolu moyen pour Sklearn's RandomforestreGress est de près de 10 fois plus lentement que d'utiliser une erreur carrée moyenne. Illustrer même sur un petit ensemble de données:

import time
from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import load_boston

X, y = load_boston(return_X_y=True)

def fit_rf_criteria(criterion, X=X, y=y):
    reg = RandomForestRegressor(n_estimators=100,
                                criterion=criterion,
                                n_jobs=-1,
                                random_state=1)
    start = time.time()
    reg.fit(X, y)
    end = time.time()
    print(end - start)

fit_rf_criteria('mse')  # 0.13266682624816895
fit_rf_criteria('mae')  # 1.26043701171875

Pourquoi utiliser le critère 'Mae' prend-il si longtemps pour former un forestructeur aléatoire? Je veux optimiser MAE pour des applications plus importantes, mais trouver la vitesse du RandomforestreGressor réglé sur ce critère de manière prohitive lente.

14
kevins_1

Merci @ Hellpanderrr pour partager ne référence au problème du projet . Pour résumer - lorsque le régresseur forestier aléatoire optimise pour MSE, il optimise pour la norme L2 et une métrique d'impureté à base moyenne. Mais lorsque le régresseur utilise le MAE, il optimise pour la norme L1 qui revient à calculer la médiane. Malheureusement, la mise en œuvre du régresseur de Sklearn pour MAE apparaît prendre o (n ^ 2) actuellement.

1
kevins_1