import dask_ml
: speeds up machine learning tasksfrom 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)
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)
.score(X, y)
: compute 값train_score = dask_model.score(X_train, y_train)
test_score = dask_model.score(X_test, y_test)
from dask_ml.wrappers import Incremental
: scikit-learn model과 Dask를 함께 사용하기 위해 필요한 Class. 잔차값 기준인 scoring 정보를 포함한 Incremental 객체로 Model 생성.fit()
은 lazy가 아닌 compute()값
.fit()
을 loop로 여러번 진행하면 작동하지 않는 경우가 존재하기 때문에 .partial_fit()
을 사용 권장
fit()
이 실행되면 모델이 다시 맞춤되지 않은 상태로 재설정되고 데이터에 다시 맞춤되므로 매번 처음부터 시작
.partial_fit()
메서드를 사용하면 중단한 부분에서 피팅을 선택하고 이전 루프의 피팅을 미세 조정할 수 있음
Dask는 .fit()
을 실행할 때 모델을 저장하고 있는 메인 프로세스에 데이터를 복사하는 대신 데이터가 있는 process | thread 에 모델을 복사하여 계산을 최적화함
정보를 복사하는 데 시간이 오래 걸릴 수 있고, 모델이 데이터 세트보다 훨씬 작기 때문에 훨씬 더 효율적임
.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)
func | Lazy 여부 |
---|---|
.fit() | X |
.partial_fit() | X |
.transform() | O |
.predict() | O |
.score() | X |