기술 노트/Apache Spark

Apache Spark 머신러닝 분류 및 회귀 모델 - 다양한 모델 학습과 활용

anothel 2024. 11. 18. 23:40

1. Spark의 분류 모델(Classification)

Spark MLlib은 다양한 분류 모델을 제공하여, 여러 가지 문제에 적합한 모델을 선택할 수 있다. 대표적으로 DecisionTreeClassifier, RandomForestClassifier, GBTClassifier 등이 있으며, 데이터 특성에 따라 모델을 결정할 수 있다.

주요 분류 모델과 하이퍼 파라미터 설정

Spark의 분류 모델은 각각 고유의 학습 방식과 하이퍼 파라미터를 가진다. 예를 들어, RandomForestClassifier는 여러 개의 결정 트리를 결합해 예측의 안정성을 높인다.

from pyspark.ml.classification import RandomForestClassifier

# 랜덤 포레스트 분류 모델 설정
rf = RandomForestClassifier(featuresCol="features", labelCol="label", numTrees=10)

numTrees는 사용되는 트리의 개수를 지정하는 파라미터로, 트리 개수가 많아질수록 모델의 안정성이 증가할 수 있다. 각 분류 모델은 데이터 특성에 맞춰 하이퍼 파라미터를 조정하며 최적의 성능을 얻도록 설정할 수 있다.

 

모델 성능 평가

Spark는 BinaryClassificationEvaluator나 MulticlassClassificationEvaluator를 통해 모델 성능을 평가한다. 일반적인 분류 모델의 성능 지표로는 정확도, F1 점수 등이 사용된다.

from pyspark.ml.evaluation import BinaryClassificationEvaluator

# 평가 지표로 ROC AUC 사용
evaluator = BinaryClassificationEvaluator(metricName="areaUnderROC")
roc_auc = evaluator.evaluate(predictions)
print("ROC AUC:", roc_auc)

모델 성능 평가를 통해 학습된 모델의 예측력을 파악하고, 하이퍼 파라미터 튜닝을 통해 성능을 개선할 수 있다.


2. HyperOpt와 Bayesian Optimization을 통한 하이퍼 파라미터 최적화

HyperOpt는 Bayesian Optimization을 통해 하이퍼 파라미터 튜닝을 수행하며, Spark와 함께 사용할 때 대규모 데이터에서도 최적화된 모델을 생성할 수 있다. Bayesian Optimization은 하이퍼 파라미터 공간을 더 효율적으로 탐색하여 최적의 조합을 찾는 방식으로, 그리드 탐색보다 시간 효율적이다.

HyperOpt 예제

HyperOpt를 사용해 Spark 모델의 하이퍼 파라미터를 최적화하는 예제 코드다.

from hyperopt import fmin, tpe, hp, Trials
from pyspark.ml.tuning import CrossValidator

# 하이퍼 파라미터 공간 정의
space = {
    'regParam': hp.uniform('regParam', 0.01, 0.1),
    'maxDepth': hp.choice('maxDepth', [5, 10, 15])
}

# 최적화 함수 정의
def objective(params):
    lr = LogisticRegression(featuresCol="features", labelCol="label", **params)
    pipeline = Pipeline(stages=[lr])
    crossval = CrossValidator(estimator=pipeline, evaluator=BinaryClassificationEvaluator(), numFolds=3)
    cv_model = crossval.fit(train_data)
    auc = evaluator.evaluate(cv_model.transform(val_data))
    return -auc

trials = Trials()
best = fmin(fn=objective, space=space, algo=tpe.suggest, max_evals=50, trials=trials)
print("Best parameters:", best)

위 코드에서는 regParam과 maxDepth의 최적값을 찾기 위해 HyperOpt와 Bayesian Optimization을 사용한다. 최적의 하이퍼 파라미터가 설정되면 모델 성능을 높이는 데 크게 기여할 수 있다.


3. Spark 회귀 모델(Regression)

Spark는 회귀 문제 해결을 위해 다양한 회귀 모델을 제공하며, 연속형 데이터 예측에 유용하다. 대표적으로 LinearRegression과 DecisionTreeRegressor, GBTRegressor 등이 있으며, 연속형 데이터를 분석하고 예측할 수 있다.

선형 회귀(Linear Regression) 모델

선형 회귀는 가장 기본적인 회귀 모델로, 데이터가 선형 관계에 있을 때 사용한다. Spark에서 LinearRegression을 사용하여 연속형 데이터에 대한 회귀 분석을 수행할 수 있다.

from pyspark.ml.regression import LinearRegression

# 선형 회귀 모델 설정
lr = LinearRegression(featuresCol="features", labelCol="label")
lr_model = lr.fit(train_data)

# 예측
predictions = lr_model.transform(test_data)
predictions.select("features", "label", "prediction").show()

위 코드는 Spark의 LinearRegression 모델을 사용해 학습과 예측을 수행하는 예제다.

 

회귀 트리 모델과 GBT 회귀

Spark는 결정 트리와 GBT 회귀 모델을 지원하여 비선형 데이터 관계에 대한 회귀 분석을 가능하게 한다. 결정 트리 회귀(DecisionTreeRegressor)와 GBT 회귀(GBTRegressor)는 트리 기반으로 학습하며, 복잡한 데이터 패턴을 학습하는 데 적합하다.

from pyspark.ml.regression import GBTRegressor

# GBT 회귀 모델 설정
gbt = GBTRegressor(featuresCol="features", labelCol="label", maxIter=10)
gbt_model = gbt.fit(train_data)

# 예측
predictions = gbt_model.transform(test_data)
predictions.select("features", "label", "prediction").show()

GBT 회귀는 여러 개의 트리를 결합하여 모델의 예측력을 높이며, 비선형 관계를 학습하는 데 유리하다.

 

회귀 모델 성능 평가

회귀 모델의 성능은 주로 RegressionEvaluator를 사용하여 평가한다. 회귀 모델 성능 지표로는 MSE(평균 제곱 오차), RMSE(제곱근 평균 제곱 오차), R²(결정 계수) 등이 있다.

from pyspark.ml.evaluation import RegressionEvaluator

# 평가 지표로 RMSE 사용
evaluator = RegressionEvaluator(metricName="rmse", labelCol="label", predictionCol="prediction")
rmse = evaluator.evaluate(predictions)
print("RMSE:", rmse)

평가 지표를 활용해 모델의 예측력을 분석하고, 성능 개선을 위한 피드백으로 삼을 수 있다.

728x90