Question:
Augmentation du gradient - prédictions extrêmes vs prédictions proches de 0,5
rinspy
2017-05-09 13:15:16 UTC
view on stackexchange narkive permalink

Supposons que vous entraîniez deux modèles différents de classificateur d'amplification de gradient sur deux ensembles de données différents. Vous utilisez la validation croisée sans réponse et vous tracez les histogrammes des prédictions générées par les deux modèles. Les histogrammes ressemblent à ceci: enter image description here

et ceci:

enter image description here

Donc, dans un cas, les prédictions (sur des ensembles hors échantillon / validation) sont pour la plupart extrêmes (proches de 0 et 1), et dans l'autre cas, les prédictions sont proches de 0,5.

Que peut-on déduire, le cas échéant, de chaque graphique? Comment expliquer la différence? Peut-on dire quelque chose à propos de l'ensemble de données / caractéristiques / modèle?

Mon instinct est que dans le premier cas, les fonctionnalités expliquent mieux les données afin que le modèle s'adapte mieux aux données (et peut-être surajustement, mais pas nécessairement - les performances sur les ensembles de validation / de test pourraient encore être bien si les fonctionnalités expliquent bien les données). Dans le second cas, les caractéristiques n'expliquent pas bien les données et le modèle ne correspond donc pas trop étroitement aux données. Les performances des deux modèles pourraient cependant être les mêmes en termes de précision et de rappel. Serait-ce exact?

Quatre réponses:
IcannotFixThis
2017-05-11 19:36:50 UTC
view on stackexchange narkive permalink

J'ai préparé un court script pour montrer ce que je pense devrait être la bonne intuition.

  importer des pandas en tant que pd
importer numpy comme np
importer matplotlib.pyplot comme plt
de sklearn import ensemble
depuis sklearn.model_selection import train_test_split


def create_dataset (emplacement, échelle, N):
    class_zero = pd.DataFrame ({
        'x': np.random.normal (emplacement, échelle, taille = N),
        'y': np.random.normal (emplacement, échelle, taille = N),
        «C»: [0,0] * N
    })

    class_one = pd.DataFrame ({
        'x': np.random.normal (-location, échelle, taille = N),
        'y': np.random.normal (-location, échelle, taille = N),
        «C»: [1,0] * N
    })
    retourne class_one.append (class_zero, ignore_index = True)

Def préditions (valeurs):
    X_train, X_test, tgt_train, tgt_test = train_test_split (valeurs [["x", "y"]], valeurs ["C"], test_size = 0,5, random_state = 9)
    clf = ensemble.GradientBoostingRegressor ()
    clf.fit (X_train, tgt_train)
    y_hat = clf.predict (X_test)
    retourner y_hat

N = 10 000
échelle = 1,0
emplacements = [0,0, 1,0, 1,5, 2,0]

f, axarr = plt.subplots (2, len (emplacements))
pour i dans la plage (0, len (emplacements)):
    imprimer (i)
    values ​​= create_dataset (emplacements [i], échelle, N)

    axarr [0, i] .set_title ("emplacement:" + str (emplacements [i]))

    d = valeurs [valeurs C == 0]
    axarr [0, i] .scatter (d.x, d.y, c = "# 0000FF", alpha = 0.7, edgecolor = "aucun")
    d = valeurs [valeurs C == 1]
    axarr [0, i] .scatter (d.x, d.y, c = "# 00FF00", alpha = 0.7, edgecolor = "aucun")

    y_hats = préditions (valeurs)
    axarr [1, i] .hist (y_hats, bins = 50)
    axarr [1, i] .set_xlim ((0, 1))
 

Ce que fait le script:

  • cela crée différents scénarios où les deux classes sont progressivement de plus en plus séparables - je pourrais fournir ici une définition plus formelle de cela mais je suppose que vous devriez avoir l'intuition
  • il ajuste un régresseur GBM sur les données de test et génère les valeurs prédites fournissant les valeurs X de test au modèle entraîné

Le graphique produit montre à quoi ressemblent les données générées dans chacun des scénarios et il montre la distribution des valeurs prédites. L'interprétation: le manque de séparabilité se traduit par le fait que $ y $ prédit est égal ou juste autour de 0,5.

Tout cela montre l'intuition, je suppose qu'il ne devrait pas être difficile de le prouver de manière plus formelle, même si je partirais d'une régression logistique - cela rendrait le calcul nettement plus facile.

figure 1


EDIT 1

Je suppose que dans l'exemple le plus à gauche, où les deux classes ne sont pas séparable, si vous définissez les paramètres du modèle pour surajuster les données (par exemple, des arbres profonds, un grand nombre d'arbres et de caractéristiques, relativement taux d'apprentissage), vous obtiendrez toujours le modèle pour prédire l'extrême résultats, non? En d'autres termes, la distribution des prédictions est Indique à quel point le modèle a fini par correspondre aux données?

Supposons que nous ayons un arbre de décision très profond. Dans ce scénario, nous verrions la distribution des valeurs de prédiction culminer à 0 et 1. Nous verrions également une faible erreur d'apprentissage. Nous pouvons rendre l'erreur d'entraînement arbitraire petite, nous pourrions avoir ce surajustement d'arbre profond au point où chaque feuille de l'arbre correspond à un point de données dans l'ensemble de train, et chaque point de données dans l'ensemble de train correspond à une feuille dans l'arbre. Ce serait la mauvaise performance sur l'ensemble de test d'un modèle très précis sur l'ensemble d'entraînement un signe clair de surajustement. Notez que dans mon graphique, je présente les prédictions sur l'ensemble de test, elles sont beaucoup plus informatives.

Une remarque supplémentaire: travaillons avec l'exemple le plus à gauche. Entraînons le modèle sur tous les points de données de classe A dans la moitié supérieure du cercle et sur tous les points de données de classe B dans la moitié inférieure du cercle. Nous aurions un modèle très précis, avec une distribution des valeurs de prédiction culminant à 0 et 1. Les prédictions sur l'ensemble de test (tous les points de classe A dans le demi-cercle inférieur et les points de classe B dans le demi-cercle supérieur) culmineraient également à 0 et 1 - mais elles seraient entièrement incorrectes.C'est une mauvaise stratégie de formation «antagoniste».Néanmoins, en résumé: la distribution jette comme sur le degré de séparabilité, mais ce n'est pas vraiment ce qui compte.

Je suppose que dans l'exemple le plus à gauche, où les deux classes ne sont pas séparables, si vous définissez les paramètres du modèle pour suradapter les données (par exemple, des arbres profonds, un grand nombre d'arbres et de fonctionnalités, un taux d'apprentissage relativement élevé), vous obtiendrez toujoursle modèle pour prédire les résultats extrêmes, non?En d'autres termes, la distribution des prédictions est indicative de la mesure dans laquelle le modèle a fini par ajuster les données?
Haitao Du
2017-05-11 20:22:39 UTC
view on stackexchange narkive permalink

Tout d'abord, je suggérerais d'utiliser l'ensemble de données one au lieu de deux pour explorer les prévisions de probabilité de sortie.La raison est simple: si nous modifions les données, personne ne sait ce qui va se passer.Comme démontré dans la réponse de @ IcannotFixThis, exactement le même modèle aura une sortie de probabilité différente, si les données changent de se chevaucher à plus séparables.


Si nous insistons pour parler de deux ensembles de données différents, à partir des informations limitées, nous pouvons seulement dire qu'il est possible que des "prédictions extrêmes" signifient que le modèle est surajusté / les données sont trop "simples" pour le modèle

Mayou36
2017-05-13 14:58:04 UTC
view on stackexchange narkive permalink

Les prédictions dépendent généralement de votre modèle. Les arbres de décision en général donnent des résultats assez «calibrés» qui peuvent presque être interprétés comme une probabilité. Certains comme SVM par exemple, ne le font pas. Mais cela dépend aussi fortement du sur-ajustement / sous-ajustement. Ou sur le nombre de fonctionnalités (non, il ne faut pas forcément "mieux"). En fait, s'il s'agit d'une classe, la première est probablement suréquipée.

Mais tout d'abord: où est votre autre classe? Lors de vos prédictions, vous devez toujours tracer les deux classes (avec des couleurs différentes). À partir des prédictions d'une classe, vous ne pouvez pas en dire trop.

Si vous souhaitez mesurer les performances et tirer des conclusions sur les enseignements tirés des fonctionnalités, utilisez un score tel que ROC AUC où le order des événements compte et non la distribution. Si vous avez l'intention de travailler avec des distributions, vous pouvez jeter un œil aux probability calibration methods (ou lire quels classificateurs donnent de toute façon de bons calibrages). Ils ne sont pas parfaits mais visent à transformer les prédictions en probabilités (et donc à donner un sens à la sortie).

Siddharth Raina
2017-05-12 02:28:34 UTC
view on stackexchange narkive permalink

Le premier scénario peut être dû à un ajustement excessif des données d'entraînement.Les performances dans et hors de l'échantillon dépendent également de la métrique d'évaluation que vous utilisez (ou est applicable au problème). En plus de comparer les métriques, essayez également de vérifier les matrices de confusion pour vérifier les erreurs de classification.

Utiliser des métriques comme logloss et introduire des paramètres de régularisation pourrait être une autre option. (Découvrez XGBoost - Il permet d'ajouter des paramètres de régularisation alpha et bêta.)



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...