DASK #4 | ML

이지수·2022년 3월 24일
0

DASK

목록 보기
4/4

ML on Big DataSets

  • import dask_ml : speeds up machine learning tasks

1. Preprocessing on Big DataSets

1-1) Loading & Preprocessing

  • from dask_ml.preprocessing import StandardScaler
X = dask_df[['X', 'Y', 'Z']]
Y = dask_df['target']

scaler_= StandardScaler()
scaler_.fit(X) # lazy 값 아님 

standardized_X = scaler_.transform(X) # lazy값
print(standardized_X)

1-2) Train Test Split

  • from dask_ml.model_selection import train_test_split
from dask_ml.model_selection import train_test_split

X_train, X_test, y_train, y_test = 
		train_test_split(X, y, shuffle = True, test_size = 0.2)

1-3) Scoring

  • .score(X, y) : compute 값
train_score = dask_model.score(X_train, y_train)

test_score = dask_model.score(X_test, y_test)

2. Learning on Big DataSets

2-1) Modeling

  • from dask_ml.wrappers import Incremental : scikit-learn model과 Dask를 함께 사용하기 위해 필요한 Class. 잔차값 기준인 scoring 정보를 포함한 Incremental 객체로 Model 생성

2-2) Fitting

  • .fit()은 lazy가 아닌 compute()값

  • .fit()loop로 여러번 진행하면 작동하지 않는 경우가 존재하기 때문에 .partial_fit()을 사용 권장

  • fit()이 실행되면 모델이 다시 맞춤되지 않은 상태로 재설정되고 데이터에 다시 맞춤되므로 매번 처음부터 시작

  • .partial_fit() 메서드를 사용하면 중단한 부분에서 피팅을 선택하고 이전 루프의 피팅을 미세 조정할 수 있음

  • Dask는 .fit()을 실행할 때 모델을 저장하고 있는 메인 프로세스에 데이터를 복사하는 대신 데이터가 있는 process | thread 에 모델을 복사하여 계산을 최적화함

  • 정보를 복사하는 데 시간이 오래 걸릴 수 있고, 모델이 데이터 세트보다 훨씬 작기 때문에 훨씬 더 효율적임

2-3) Predict

  • .predict()은 lazy값 반환, .compute() 필요
  • .fit()은 compute 값
from sklearn.linear_model import SGDRegressor
from dask_ml.wrappers import Incremental

model = SGDRegressor()

# Wrap the model for working with Dask
dask_model = Incremental(model, scoring = 'neg_mean_squared_error')

dask_model.fit(dask_X, dask_y) # compute값
# Loop -> using partial_fit
for i in range(5):
	dask_model.partial_fit(dask_X, dask_y)

y_pred_delayed = dask_model.predict(dask_X)
y_pred_computed = y_pred_delayed.compute()
print(y_pred_computed)

WrapUp

func
Lazy 여부
.fit()X
.partial_fit()X
.transform()O
.predict()O
.score()X

0개의 댓글