DASK #4 | ML


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):計算値
  • 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モデルは、Daskとともに必要なクラスを使用します.残差値ベースのスコア情報を含む増分オブジェクトを使用してモデルを作成
  • 2-2) Fitting

  • .fit()lazyではなくcompute()値
  • .fit()を使用することをお勧めします.これは、サイクル中に複数回実行すると障害が発生するためです.
  • .partial_fit()を実行すると、モデルは再調整されていないようにリセットされ、データに再調整されるため、最初から開始されます.
  • fit()方法は、ブレークポイントで継ぎ手を選択し、前のリングの継ぎ手を微調整することを可能にする.
  • .partial_fit()を実行すると、Daskは、データを格納モデルにコピーするメインプロセスではなく、データを含むprocess|threadにモデルをコピーすることによって計算を最適化する

  • 情報のコピーに時間がかかる可能性があり、データセットよりもモデルの方がはるかに小さいため、より効率的です.
  • 2-3) Predict

  • .fit()lazy値.predict()必須
  • を返します.
  • .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


    funcLazyの有無.fit()X.fit()X.partial_fit()O.transform()O.predict()X