2017-02-08 5 views
2

페이지 https://pypi.python.org/pypi/fancyimpute의 종류 I는 입력 데이터를 정상화 할 필요가 있음을 시사 라인fancyimpute의 SoftImpute에는 정규화 된 데이터가 필요합니까?

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

있습니다. 그러나 나는 인터넷에서 어떤 세부 사항도 발견하지 못했다. 사전에 데이터를 정규화해야하며 정확히 예상되는 것은 무엇입니까?

답변

1

예 확실히 데이터를 표준화해야합니다. 다음 예를 살펴 보겠습니다 :

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) 

결과는 내가 nan을 넣어 장소가 완전히 꺼져 있다는 것을

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

주입니다. 그러나, 대신 당신이

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) 

실행 (이전과 동일한 코드를, 유일한 차이점은 v 정상화 점이다) 다음과 같은 합리적인 결과를 얻을 :

따라서
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]]) 

, 당신은 SoftImpute를 사용하고, 데이터를 정규화하는 것을 잊지 마십시오 (모든 열의 평균을 0으로 만들고 std를 1로 만들면됩니다).