2016-10-22 2 views
0

Ich bin eine Definition einer Funktion gegeben und gebeten, es zu implementieren, wie folgt:Implementierung Mittelwert Null und Varianz in numpy

# Problem 1 - Apply zero mean and zero variance scale to the image features 
def normalize(data): 
    pass 

dann mit einem Unit-Test unter Verwendung von numpy versehen, die den Erfolg meiner Implementierung behaupten würde

EDIT

Dieser nicht mein Unit-Test, sondern durch den Lehrer des Kurses zugewiesen.

np.testing.assert_array_almost_equal(
    normalize(np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])), 
    np.array([-0.4, -0.3, -0.2, -0.099, 0.0, 0.099, 0.199, 0.3, 0.4, 0.5]), 
    decimal=3) 

Meine Lösung ist

def normalize(data): 
    return ((data - data.mean())/data.max() - data.min()) 

Aber es muss eine Lücke in meinem Verständnis, weil ich

immer bin
AssertionError: 
Arrays are not almost equal to 3 decimals 

(mismatch 100.0%) 
x: array([-1.45, -1.35, -1.25, -1.15, -1.05, -0.95, -0.85, -0.75, -0.65, -0.55]) 
y: array([-0.4 , -0.3 , -0.2 , -0.099, 0. , 0.099, 0.199, 0.3 , 
     0.4 , 0.5 ]) 

Mit googeln ich auch

finden
(data - data.mean())/data.std() 

Nach mehr Suche versuchte ich

(data - data.mean())/data.var() 

Aber keine Lösung behauptet korrekt.

Also, was ist die korrekte Implementierung hier?

+0

Warum die down vote? –

Antwort

4

Zuerst Sie wahrscheinlich, dies zu tun beabsichtigt:

(data - data.mean())/(data.max() - data.min()) 

statt dessen:

((data - data.mean())/data.max() - data.min()) 

Dann ist es einfach nicht die richtige Definition für Normalisieren. Stattdessen kann, wie Sie durch die Suche um gefunden, die richtige Definition ist:

(data - data.mean())/data.std() 

Und schließlich Ihr Unit-Test ist einfach falsch, so scheitert es, wenn sie mit der richtigen Definition bezeichnet.

+0

Wie die Frage stats, das ist nicht mein Unit Test! Es wurde vom Lehrer vergeben! –

+0

Dann ändern Sie Ihren Lehrer;) 'np.array ([- 0.4, -0.3, -0.2, -0.099, 0.0, 0.099, 0.199, 0.3, 0.4, 0.5]) .std() = 0.28710675714792921' Ich sehe nicht wie das ist normalisiert ... – Julien

+0

Auch: "Null Varianz" bedeutet, dass alle Werte gleich sein sollten, was ich bezweifle, ist das, was Ihr Lehrer will. Vielleicht bitten Sie Ihren Lehrer, seine Fragen zu überprüfen;) – Julien

1

Ich denke, es ist wahrscheinlich ein Tippfehler in Ihrer Frage. Beachten Sie, dass das Gerät Test bestanden wird, wenn Sie die Formel verwenden

(data - data.mean())/data.var() 

Aber nur, wenn Sie eine 0 zu Beginn des Testeingangs Array anzuhängen, und fügen Sie ein -0,5 bis Anfang des Ausgangs-Array. Wenn es kein Tippfehler ist, dann ist das ein merkwürdiger Zufall.

+1

Auch wenn dies der Fall ist, macht eine Normalisierung durch die Varianz keinen Sinn, da sie nicht maßhaltig ist: Wenn Ihre Daten Längen in Metern sind, ist das Ergebnis dieser "Normalisierung" wäre in Metern^-1. Ich denke, die Frage des Lehrers ist einfach falsch. – Julien

+0

Das ist ein guter Punkt. –

Verwandte Themen