Dask 및 Scikit-learn을 사용하여 대규모 데이터 세트 처리

Dask 및 Scikit-learn을 사용하여 대규모 데이터 세트 처리

Dask 및 Scikit-learn을 사용하여 대규모 데이터 세트 처리Dask 및 Scikit-learn을 사용하여 대규모 데이터 세트 처리
편집자 이미지

# 소개

어둠 병렬 컴퓨팅 기능을 활용하는 패키지 세트입니다. 대규모 데이터 세트를 처리하거나 고급 분석 및 기계 학습 시스템과 같은 효율적이고 데이터 집약적인 애플리케이션을 구축할 때 매우 유용합니다. 가장 눈에 띄는 장점 중 하나는 Dask가 기존 Python 프레임워크와 원활하게 통합된다는 점입니다. 여기에는 대규모 데이터 세트 처리 지원도 포함됩니다. scikit-learn 병렬화된 워크플로우를 통한 모듈. 이 기사에서는 제한된 하드웨어 제약 조건에서도 확장 가능한 데이터 처리를 위해 Dask를 활용하는 방법을 설명합니다.

# 단계별 연습

특별히 대규모는 아니지만 캘리포니아 주택 데이터 세트는 상당히 크기 때문에 대규모 데이터 처리를 위해 Dask와 scikit-learn을 공동으로 활용하는 방법을 보여주는 부드럽고 예시적인 코딩 예제를 위한 훌륭한 선택입니다.

Dask는 dataframe Pandas의 여러 측면을 모방하는 모듈 DataFrame 메모리에 완전히 맞지 않을 수 있는 대규모 데이터 세트를 처리하기 위한 개체입니다. 우리는 이 Dask를 사용할 것입니다 DataFrame 다음과 같이 GitHub 저장소의 CSV에서 데이터를 로드하는 구조입니다.

import dask.dataframe as dd

url = "
df = dd.read_csv(url)

df.head()

캘리포니아 주택 데이터세트 살펴보기캘리포니아 주택 데이터세트 살펴보기

여기에 중요한 참고 사항이 있습니다. 데이터 세트의 “모양”(행과 열의 수)을 보려면 이 방법은 다음을 사용하는 것보다 약간 더 까다롭습니다. df.shape. 대신 다음과 같이 해야 합니다.

num_rows = df.shape[0].compute()
num_cols = df.shape[1]
print(f"Number of rows: {num_rows}")
print(f"Number of columns: {num_cols}")

산출:

Number of rows: 20640
Number of columns: 10

우리는 Dask를 사용했습니다. compute() 행 수는 천천히 계산하지만 열 수는 계산하지 않습니다. 데이터세트의 메타데이터를 사용하면 열 수(특성)를 즉시 얻을 수 있는 반면, (가설적으로) 메모리보다 클 수 있어 분할될 수 있는 데이터세트의 행 수를 결정하려면 분산 계산이 필요합니다. compute() 우리를 위해 투명하게 처리합니다.

데이터 전처리 기계 학습 모델이나 추정기를 구축하기 위한 이전 단계인 경우가 가장 많습니다. 해당 부분으로 넘어가기 전에, 이 실습 기사의 주요 초점은 Dask를 사용하여 데이터를 처리하는 방법을 보여주는 것이므로 정리하고 준비하겠습니다.

데이터 준비의 일반적인 단계 중 하나는 다음과 같습니다. 누락된 값 처리. Dask를 사용하면 마치 Pandas를 사용하는 것처럼 프로세스가 원활하게 진행됩니다. 예를 들어 아래 코드는 속성에 누락된 값이 포함된 인스턴스의 행을 제거합니다.

df = df.dropna()

num_rows = df.shape[0].compute()
num_cols = df.shape[1]
print(f"Number of rows: {num_rows}")
print(f"Number of columns: {num_cols}")

이제 데이터 세트는 200개가 넘는 인스턴스로 줄어들어 총 20,433개의 행을 갖습니다.

다음으로 scikit-learn의 기능을 통합하여 데이터 세트의 일부 수치 기능을 확장할 수 있습니다. StandardScaler 또는 기타 적절한 확장 방법:

from sklearn.preprocessing import StandardScaler

numeric_df = df.select_dtypes(include=["number"])
X_pd = numeric_df.drop("median_house_value", axis=1).compute()

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_pd)

중요한 것은 누락된 값이 포함된 행을 삭제한 후 대상 열을 삭제하는 것과 같이 Dask에서 수행하는 일련의 데이터 세트 집약적 작업에 대해 알아두세요. "median_house_value"우리는 추가해야 compute() 일련의 연결된 작업이 끝나면. 이는 다음과 같습니다. Dask의 데이터 세트 변환이 느리게 수행됩니다.. 한 번 compute() 호출되면 데이터세트의 연쇄 변환 결과가 Pandas로 구체화됩니다. DataFrame (Dask는 Pandas에 의존하므로 Pandas 전용 함수를 직접 호출하지 않는 한 코드에서 Pandas 라이브러리를 명시적으로 가져올 필요가 없습니다).

우리가 원한다면 어떻게 될까요? 머신러닝 모델 학습? 그런 다음 목표 변수를 추출해야 합니다. "median_house_value" 동일한 원칙을 적용하여 Pandas 객체로 변환합니다.

y = df["median_house_value"]
y_pd = y.compute()

이제부터 데이터 세트를 훈련 세트와 테스트 세트로 분할하는 프로세스는 다음과 같은 회귀 모델을 훈련시킵니다. RandomForestRegressor테스트 데이터에 대한 오류를 평가하는 것은 Pandas 및 scikit-learn을 조정된 방식으로 사용하는 기존 접근 방식과 완전히 유사합니다. 트리 기반 모델은 특성 크기 조정에 민감하지 않으므로 크기가 조정되지 않은 특성(X_pd) 또는 크기가 조정된 것(X_scaled). 아래에서는 위에서 계산된 확장된 기능을 진행합니다.

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
import numpy as np

# Use the scaled feature matrix produced earlier
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y_pd, test_size=0.2, random_state=42)

model = RandomForestRegressor(n_estimators=100, random_state=42, n_jobs=-1)
model.fit(X_train, y_train)

y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
print(f"RMSE: {rmse:.2f}")

산출:

# 마무리

Dask와 scikit-learn 예를 들어 기계 학습 모델 구축을 위해 대규모 데이터 세트를 효율적으로 전처리하기 위해 확장 가능하고 병렬화된 데이터 처리 워크플로를 활용하기 위해 함께 사용할 수 있습니다. 이 기사에서는 Dask를 사용하여 데이터를 로드, 정리, 준비 및 변환한 후 기계 학습 모델링을 위한 표준 scikit-learn 도구를 적용하는 방법을 시연했습니다. 동시에 대규모 데이터 세트를 처리할 때 메모리 사용을 최적화하고 파이프라인 속도를 높이는 방법도 설명했습니다.

이반 팔로마레스 카라스코사 AI, 기계 학습, 딥 러닝 및 LLM 분야의 리더, 작가, 연설자 및 고문입니다. 그는 현실 세계에서 AI를 활용할 수 있도록 다른 사람들을 훈련하고 안내합니다.

출처 참조

Post Comment

당신은 놓쳤을 수도 있습니다