Background/ML Pipeline

머신러닝의 기초와 분류 문제 해결의 첫걸음 (3) 기초 사용법과 실무적 통찰

ELEC-Dong 2024. 12. 9. 18:00

들어가며

머신러닝을 시작하면 가장 먼저 접하게 되는 것은 다양한 알고리즘입니다. 하지만 실무에서는 모델의 수학적 원리구현 방법보다, 어떤 모델을 선택해야 하는지, 그리고 선택한 모델이 어떤 상황에서 강점을 발휘하는지가 더 중요합니다.

이번 장에서는 머신러닝에서 자주 사용되는 대표적인 분류 모델인 Logistic Regression(로지스틱 회귀), Decision Tree(결정 트리), SVM(서포트 벡터 머신), KNN(최근접 이웃), 그리고 앙상블 기법을 활용한 강력한 모델인 Random ForestXGBoost를 살펴보겠습니다. 각 모델의 현실적인 장단점과 실무에서 고려할 만한 상황에 대해 논의하며, 어떤 문제에서 어떤 모델을 선택해야 할지에 대한 직관을 제공합니다. 또한 모델의 간단한 코드 구현과 기본적인 사용법을 살펴봅니다. 이를 통해 모델 선언, 학습, 평가까지의 과정을 이해하고, 각 모델을 실제 문제에 적용할 준비를 갖출 수 있습니다. 복잡한 수학적 이론이 아닌 실용적인 접근으로, 다양한 분류 모델의 활용 방법을 익혀보세요! 

 

이번 ML pipline 시리즈의 학습코드는 아래링크에서 무료로 사용 가능합니다

https://github.com/Elec-Dong/ML-pipline

 

GitHub - Elec-Dong/ML-pipline: ML pipline

ML pipline. Contribute to Elec-Dong/ML-pipline development by creating an account on GitHub.

github.com

 

 

1. 다양한 머신러닝 분류 모델의 특징

머신러닝에서 자주 사용되는 분류 모델은 각각의 특성과 강점을 가지고 있습니다. Logistic Regression(로지스틱 회귀), Decision Tree(결정 트리), SVM(서포트 벡터 머신), KNN(최근접 이웃)은 실무에서 널리 활용되며, 상황에 따라 선택의 기준이 달라집니다. 여기에 더해 Random ForestXGBoost는 앙상블 기법을 활용해 복잡한 문제를 해결하는 데 자주 사용됩니다. 아래는 각 모델의 특징과 장단점을 간단히 정리하였습니다.

 

  • Logistic Regression
    Logistic Regression은 데이터를 선형적으로 구분하며, 예측 결과를 확률 값으로 제공합니다.
    단순하고 계산 비용이 적으며, 결과를 해석하고 설명하기에 용이합니다.
    하지만 데이터가 선형적으로 구분되지 않을 때는 성능이 저하될 수 있습니다.
  • Decision Tree
    데이터를 "예/아니오"와 같은 조건으로 반복적으로 나누는 규칙 기반 모델입니다.
    비선형 데이터를 잘 처리하며, 결과를 시각적으로 이해하기 쉽습니다.
    그러나 과적합이 발생하기 쉽고, 데이터 변화에 민감합니다.
  • SVM (Support Vector Machine)
    데이터를 구분하는 데 최적의 초평면(또는 경계)을 찾는 모델입니다.
    복잡한 데이터 구조와 고차원 데이터에서도 뛰어난 성능을 발휘하지만, 설정 값 조정(커널 함수 선택 등)이 필요하며 계산이 느릴 수 있습니다.
  • KNN (K-Nearest Neighbors)
    가까운 이웃들의 분류를 참고하여 결과를 예측하는 모델입니다.
    단순하고 직관적이며, 데이터 분포에 따라 유연하게 작동하지만, 데이터가 많아지면 속도가 느려질 수 있습니다.
  • Random Forest
    여러 개의 Decision Tree를 결합한 앙상블 모델로, 안정적이고 강력한 성능을 제공합니다.
    과적합을 방지하며 다양한 데이터에서 신뢰할 수 있는 성능을 발휘하지만, 많은 나무를 생성하면 시간이 오래 걸릴 수 있습니다.
  • XGBoost
    Random Forest의 성능을 한층 개선한 모델로, 반복적으로 잘못된 예측을 보완하여 학습을 진행합니다.
    높은 정확도와 빠른 학습 속도를 제공하지만, 설정이 까다롭고 리소스 사용량이 많습니다.

 

모델별 특징 요약

모델 특징 장점 단점 추천 상황
Logistic Regression 선형 모델. 예측 결과를 확률로 제공. 해석이 쉬움. 효율적이고 빠름. 비선형 데이터에 약함. 선형 데이터, 해석이 중요한 문제
Decision Tree 규칙 기반 분할로 학습. 비선형 관계 처리 가능. 직관적이고 시각화 가능. 복잡한 데이터 처리. 과적합 가능성. 데이터 변화에 민감. 설명이 중요한 문제, 비선형 데이터
SVM 초평면으로 데이터 구분. 커널 함수로 비선형 처리. 고차원 데이터 처리에 강함. 결정 경계 명확. 계산 복잡성. 파라미터 튜닝 필요. 고차원 데이터, 복잡한 결정 경계
KNN 가까운 이웃들의 클래스를 참고해 결과 예측. 단순하고 직관적. 데이터 분포에 유연. 데이터 양 많을수록 속도 느림. 노이즈 민감. 간단한 문제, 빠른 평가 필요 시
Random Forest 다수의 결정 트리를 결합한 앙상블 모델. 과적합 방지. 안정적이고 강력한 성능. 트리가 많아질수록 학습 및 예측 시간 증가. 복잡한 데이터, 안정적인 성능 필요
XGBoost 부스팅 기법으로 성능을 극대화한 앙상블 모델. 높은 정확도. 학습 속도 빠름. 유연성. 파라미터 설정 복잡. 계산 비용 큼. 대규모 데이터, 높은 정확도 필요

 

 

2. 머신러닝 모델 구현과 코드 설명

이번 섹션에서는 Logistic Regression, Decision Tree, SVM, KNN,Ransom Forest, XGboost 모델을 구현하고, 분류 문제를 해결하는 방법을 코드로 간단히 설명합니다. 

1) Logistic Regression

# Logistic Regression 모델 학습 및 평가
LogReg = LogisticRegression()
LogReg.fit(X_train, y_train)  # 모델 학습
y_pred_LogReg = LogReg.predict(X_test)  # 예측

LogReg_accuracy = accuracy_score(y_test, y_pred_LogReg)  # 정확도 계산
print("LogReg accuracy_score: ", LogReg_accuracy)

2) Decision Tree

# Decision Tree 모델 학습 및 평가
DecTre = DecisionTreeClassifier()
DecTre.fit(X_train, y_train)
y_pred_DecTre = DecTre.predict(X_test)

DecTre_accuracy = accuracy_score(y_test, y_pred_DecTre)
print("DecTre accuracy_score: ", DecTre_accuracy)

3) SVM

# SVM 모델 학습 및 평가
SVM = SVC()
SVM.fit(X_train, y_train)
y_pred_SVM = SVM.predict(X_test)

SVM_accuracy = accuracy_score(y_test, y_pred_SVM)
print("SVM accuracy : ", SVM_accuracy)

4) KNN

# KNN 모델 학습 및 평가
KNC = KNeighborsClassifier()
KNC.fit(X_train, y_train)
y_pred_KNC = KNC.predict(X_test)

KNC_accuracy = accuracy_score(y_test, y_pred_KNC)
print("KNC accuracy : ", KNC_accuracy)

5) Random Forest

RanFor = RandomForestClassifier()
RanFor.fit(X_train, y_train)
y_pred_RanFor = RanFor.predict(X_test)

RanFor_accuracy = accuracy_score(y_test,y_pred_RanFor)
print("RanFor accuracy : ", RanFor_accuracy)

6) XGboost

XGB = XGBClassifier()
XGB.fit(X_train, y_train)
y_pred_XGB = XGB.predict(X_test)

XGB_accuracy = accuracy_score(y_test,y_pred_XGB)
print("XGB accuracy : ", XGB_accuracy)

 

모든 모델 코드에서 확인할 수 있듯 모델 선언 -> 모델 학습 -> 모델 평가 -> 정확도 검사 순의 구조는 모두 동일합니다. 따라서 아래와 같이. 반복문을 통해 간단하게 모든 결과를 확인할 수 있습니다.

model_list = [LogisticRegression(), DecisionTreeClassifier(), SVC(), KNeighborsClassifier(), RandomForestClassifier(), XGBClassifier()] # model 선언
accuracy_list=[]
model_name=[]
for model in model_list:
    model.fit(X_train, y_train)                 # model 학습
    y_pred = model.predict(X_test)              # model 평가
    accuracy = accuracy_score(y_test, y_pred)   # model 정확도 계산
    
    accuracy_list.append(accuracy)              # model 결과 저장
    model_name.append(model.__class__.__name__) # model 이름 저장

#결과 출력
result_df = pd.DataFrame({'Model': model_name, 'Accuracy': accuracy_list})
print(result_df)

 

마무리: 실무 중심의 머신러닝 모델 선택과 활용

이번 장에서는 Logistic Regression, Decision Tree, SVM, KNN, Random Forest, XGBoost와 같은 대표적인 머신러닝 분류 모델을 간단히 소개하며, 각 모델의 직관적인 설명과 실무 관점에서의 장단점을 살펴보았습니다. 이를 통해 다양한 문제 상황에서 어떤 모델을 선택할지에 대한 기본적인 방향성을 제공하고자 했습니다.

다음 장에서는 이번에 소개한 모델들을 유방암 진단, 스팸 메일 분류, 와인 품질 평가 데이터를 대상으로 적용한 결과를 분석합니다. 각 모델의 실제 성능을 비교하며, 결과를 해석하고 분석하는 과정을 통해 모델 선택과 활용의 실무적 통찰을 얻는 시간을 갖겠습니다. 🚀