使用 dask 高效扩展 scikit-learn 管道以处理大型数据集

问题描述 投票:0回答:1

我正在使用 scikit-learn 开发这个 ML 项目,并面临一个大数据集不适合内存的问题。我听说 Dask 可用于扩展大型数据集的管道。我在整合它时遇到了麻烦。

问题是我无法将该数据集装入内存。想要一种处理核外计算的方法。寻找有关 Dask 并行处理和分布式计算的指导。想要显着提高我的管道的性能。

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# Load data
X, y = load_large_dataset()  # This function loads a dataset too large for memory

# Split data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Define pipeline
pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('pca', PCA(n_components=10)),
    ('classifier', RandomForestClassifier(n_estimators=100))
])

# Train pipeline
pipeline.fit(X_train, y_train)

# Predict
y_pred = pipeline.predict(X_test)

# Evaluate
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')

我尝试了 Dask 的

delayed
功能来进行数据加载和管道步骤。

还尝试了

from_array
from_dataframe
来处理大于内存的数据集。

我想管理这些管道中的内存问题以实现高效处理,并优化集成管道的性能以获得最大效率。

scikit-learn pipeline dask large-data
1个回答
1
投票

使用 Dask 的

from_array
from_dataframe
以块的形式加载数据以适合内存。利用 Dask 的数据结构(例如
dask.array
dask.dataframe
)来管理大于内存的数据集。

用 Dask ML 替代品(例如

dask_ml.processsing.StandardScaler
dask_ml.decomposition.PCA
)替换 Transformer,并使用
dask_ml.model_selection.train_test_split
分割数据进行训练。

使用 Dask 中的

delayed
功能监控和优化 Dask 的任务图。

© www.soinside.com 2019 - 2024. All rights reserved.