2017-02-08 4 views
2

Die Seite hat die Linie https://pypi.python.org/pypi/fancyimputeBenötigt fimtimputes SoftImpute normalisierte Daten?

# Instead of solving the nuclear norm objective directly, instead 
# induce sparsity using singular value thresholding 
X_filled_softimpute = SoftImpute().complete(X_incomplete_normalized) 

die Art legt nahe, dass ich die von Eingangsdaten zu normalisieren benötigen. Im Internet habe ich jedoch keine Details gefunden, was genau damit gemeint ist. Muss ich meine Daten vorher normalisieren und was genau wird erwartet?

Antwort

1

Ja, Sie sollten die Daten auf jeden Fall normalisieren. Betrachten Sie das folgende Beispiel:

from fancyimpute import SoftImpute 
import numpy as np 
v=np.random.normal(100,0.5,(5,3)) 
v[2,1:3]=np.nan 
v[0,0]=np.nan 
v[3,0]=np.nan 
SoftImpute().complete(v) 

Das Ergebnis

array([[ 81.78428587, 99.69638878, 100.67626769], 
     [ 99.82026281, 100.09077899, 99.50273223], 
     [ 99.70946085, 70.98619873, 69.57668189], 
     [ 81.82898539, 99.66269922, 100.95263318], 
     [ 99.14285815, 100.10809651, 99.73870089]]) 

Hinweis ist, dass die Orte, an denen ich nan vollständig aufschieben sind. wenn stattdessen laufen Sie jedoch

from fancyimpute import SoftImpute 
import numpy as np 
v=np.random.normal(0,1,(5,3)) 
v[2,1:3]=np.nan 
v[0,0]=np.nan 
v[3,0]=np.nan 
SoftImpute().complete(v) 

(gleichen Code wie zuvor, der einzige Unterschied besteht darin, dass v normiert ist) Sie folgende vernünftiges Ergebnis erhalten:

array([[ 0.07705556, -0.53449412, -0.20081351], 
     [ 0.9709198 , -1.19890962, -0.25176222], 
     [ 0.41839224, -0.11786451, 0.03231515], 
     [ 0.21374759, -0.66986997, 0.78565414], 
     [ 0.30004524, 1.28055845, 0.58625942]]) 

Wenn Sie also SoftImpute verwenden, Vergessen Sie nicht, Ihre Daten zu normalisieren (Sie können das tun, indem Sie den Mittelwert jeder Spalte auf 0 setzen, und die STD auf 1 setzen).

Verwandte Themen