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).