현실 세계의 데이터셋은 매우 거대하며 수조 개의 데이터 포인트로 이루어질 수 있다. 컴퓨터 한 대의 자원은 제약되어 있기 때문에 한 대의 컴퓨터로만 작업하는 것은 단점이 될 수 있다. 빅 데이터를 다룰 때 종종 병렬 컴퓨팅으 활용하려고 클라우드를 사용한다.
대용량 데이터셋은 계산의 한계를 넘어설 때가 있다. 지금까지 사용한 데이터셋은 수만 개의 행과 수 백개 이하의 열로 이루어져 있다. 실행시간이 오래걸리지 않아 오류가 발생하지 않을 것이다.
이번에는 외께 행성 데이터셋을 사용할 것이다. 이 데이터셋은 5087개의 행과 3189개의 열로 구성된다. 별의 생명 주기 동안에 빛의 밝기를 기록한 것이다. 행과 열의 개수를 곱하면 1500만 데이터 포인트가 된다. 100개의 트리를 사용한다면 모델을 구축하기 위해 15억개 데이터 포인트를 처리해야 한다.
4.1 외계 행성 데이터셋 소개
외계 행성 데이터셋은 2017년 캐글에 소개된 데이터셋이다. 이 데이터셋에는 별의 밝기에 대한 정보가 포함되어 있다. 각 행은 하나의 별에 대한 정보를 나타내며 각 열은 시간에 따라 밝기의 변화를 저장하고 있다. 밝기 외에도 LABEL 열에는 별이 외계 행성을 가지고 있으면 2 아니면 1로 레이블되어 있다.
이 데이터셋은 수천 개의 별의 밝기를 담고 있다. 별의 밝기(light flux)는 종종 광속(luminous flux)이라고도 부르며 감지된 별의 밝기이다.
별의 밝기가 주기적으로 달라질 때 외계 행성이 이 별을 공전하고 있을 가능성이 있다. 외계 행성이 별의 앞을 지나갈 때 빛의 일부분을 가리고 이로 인해 별의 밝기가 약간 감소된다고 가정한 것이다.
외계 행성 데이터셋을 로드하고 머신러닝 작업을 위해 전처리 해보자.
4.2 GB vs XGB
데이터 전처리
1
2
3
4
5
6
7
import pandas as pd
df = pd.read_csv('./exoTrain.csv')
from sklearn.model_selection import train_test_split
X = df.iloc[:, 1:]
y = df.iloc[:, 0]
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=2)
속도 비교
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import time
# 그래디언트 부스트 모델
# 시작 시간 저장
start = time.time()
gbr = GradientBoostingClassifier(n_estimators=100, max_depth=2, random_state=2)
gbr.fit(X_train, y_train)
y_pred = gbr.predict(X_test)
score = accuracy_score(y_pred, y_test)
print(f'accuracy: {score}')
# 종료 시간 저장
end = time.time()
print(f'runtime: {end-start} sec')
accuracy: 0.9874213836477987 runtime: 294.03440713882446 sec
1
2
3
4
5
6
7
8
9
10
11
12
13
# XGBoost 모델
# 시작 시간 저장
start = time.time()
xg_reg = XGBClassifier(n_estimators=100, max_depth=2)
xg_reg.fit(X_train, y_train)
y_pred = xg_reg.predict(X_test)
score = accuracy_score(y_pred, y_test)
print(f'accuracy: {score}')
# 종료 시간 저장
end = time.time()
print(f'runtime: {end-start} sec')
accuracy: 0.9913522012578616 runtime: 53.40976548194885 sec
코랩 기준 XGBoost가 대략 3배 정도 빠르다. 또한 0.5%더 정확하다.(Imbalaced data라 의미없음)