2017-12-09 21 views
0

나는 MinMaxScaler()로 개별적으로 스케일 된 3 개의 데이터 프레임을 가지고 있습니다.일관되게 데이터 프레임을 스케일하는 방법 MinMaxScaler() sklearn

def scale_dataframe(values_to_be_scaled) 
    values = values_to_be_scaled.astype('float64') 
    scaler = MinMaxScaler(feature_range=(0, 1)) 
    scaled = scaler.fit_transform(values) 

    return scaled 

scaled_values = [] 
for i in range(0,num_df): 
    scaled_values.append(scale_dataframe(df[i].values)) 

내가 겪고있는 문제는 각각의 데이터 프레임이 개별 최소 열 및 최대 값 집합에 따라 조정된다는 점입니다. 데이터 전체에 대해 동일한 열 분 및 최대 값 집합을 공유하는 것처럼 모든 데이터 프레임을 동일한 값으로 확장해야합니다. MinMaxScaler()로이를 수행 할 수있는 방법이 있습니까? 하나의 옵션은 하나의 큰 데이터 프레임을 만든 다음 파티셔닝하기 전에 데이터 프레임의 크기를 조정하는 것이지만 이상적이지는 않습니다.

+0

당신이 그것을하지만 현실에서, 각 기능 (열) 할 수있는 데이터 세트의 최소 기반으로 최대 및 최소 값을 기준으로하지 조정됩니다 최대 나는 모든 경우에 그것의 최소값과 최대 값에 따라 컬럼의 크기를 조정해야한다고 생각한다. 그래서 MinMaxScaler를 사용해야합니다. – sera

+0

@serafeim 나는 당신이 말하는 것을 반영하기 위해 글을 편집했는데 그것이 분명 해지기를 바랍니다. – xjtc55

답변

2

sklearn의 우수 docs을 확인하십시오.

알다시피, partial_fit()에 대한 지원이 있습니다! 이렇게하면 온라인 배율/미니 배율 조정을 사용할 수 있으며 미니 바를 제어 할 수 있습니다!

예 :

import numpy as np 
from sklearn.preprocessing import MinMaxScaler 

a = np.array([[1,2,3]]) 
b = np.array([[10,20,30]]) 
c = np.array([[5, 10, 15]]) 

""" Scale on all datasets together in one batch """ 
offline_scaler = MinMaxScaler() 
offline_scaler.fit(np.vstack((a, b, c)))    # fit on whole data at once 
a_offline_scaled = offline_scaler.transform(a) 
b_offline_scaled = offline_scaler.transform(b) 
c_offline_scaled = offline_scaler.transform(c) 
print('Offline scaled') 
print(a_offline_scaled) 
print(b_offline_scaled) 
print(c_offline_scaled) 

""" Scale on all datasets together in minibatches """ 
online_scaler = MinMaxScaler() 
online_scaler.partial_fit(a)       # partial fit 1 
online_scaler.partial_fit(b)       # partial fit 2 
online_scaler.partial_fit(c)       # partial fit 3 
a_online_scaled = online_scaler.transform(a) 
b_online_scaled = online_scaler.transform(b) 
c_online_scaled = online_scaler.transform(c) 
print('Online scaled') 
print(a_online_scaled) 
print(b_online_scaled) 
print(c_online_scaled) 

출력 :

Offline scaled 
[[ 0. 0. 0.]] 
[[ 1. 1. 1.]] 
[[ 0.44444444 0.44444444 0.44444444]] 
Online scaled 
[[ 0. 0. 0.]] 
[[ 1. 1. 1.]] 
[[ 0.44444444 0.44444444 0.44444444]] 
+0

감사합니다. 이것은 내가 성취해야 할 필요가있는 것입니다. – xjtc55