zondag 25 september 2016

13 - EEGs - 'Onevenwichtige resultaten'.

Ook deze keuze lijkt nog niet echt tot veelbelovende resultaten te leiden. Ik besluit mij eens wat verder te verdiepen in het werken met onevenwichtige uitkomsten. Tenslotte is maar ~ 7% van de resultaten 'positief'. Dat maakt dat een NN hoog blijft scoren door gewoon alles op 'nul' te laten uitkomen.
Ik vindt een goed artikel die hier wat duidelijkheid in geeft:

Learning from Imbalanced Classes



In het kort staan daar de volgende opties:

  • Do nothing. Sometimes you get lucky and nothing needs to be done. You can train on the so-called natural (or stratified) distribution and sometimes it works without need for modification.
  • Balance the training set in some way:
    • Oversample the minority class.
    • Undersample the majority class.
    • Synthesize new minority classes.
  • Throw away minority examples and switch to an anomaly detection framework.
  • At the algorithm level, or after it:
    • Adjust the class weight (misclassification costs).
    • Adjust the decision threshold.
    • Modify an existing algorithm to be more sensitive to rare classes.
  • Construct an entirely new algorithm to perform well on imbalanced data.
Er zijn echter weinig aanwijzingen wat wanneer te doen. Ik besluit eerst mijn loss-functie gevoeliger te maken voor de minderheids klasse. Daar heb ik nog maar weinig eerder aan gesleuteld maar een model in een vorige competitie geeft wat aanwijzingen. Ik besluit het te proberen met de 'wortel van de gemiddelde, gekwadrateerde afwijking.:

Orgineel:

def root_mean_squared_error(y_true, y_pred):
    """
    RMSE loss function
    """

    return K.sqrt(K.mean(K.square(y_pred - y_true), axis=-1))

Aangepast:

def root_mean_squared_error(y_true, y_pred):
    """
        RMSE loss function
        """

    return K.sqrt(K.mean(K.square(y_pred - y_true) + 3 * (y_true) * K.square(y_pred - y_true), axis=-1))

In dit geval maak ik de error 4x zo groot als y_true 1 is.

Ik zie helaas nog weinig verbetering. Of mijn toepassing van de formule is fout of (en?) ik moet een andere strategie bedenken om meer balans in mijn dataset te krijgen.








 




Geen opmerkingen:

Een reactie posten