본문으로 건너뛰기

사이킷런을 통한 머신러닝 1

머신러닝 프로젝트의 표준 처리 절차와 파이썬 라이브러리인 사이킷런(Scikit-learn)을 활용한 핵심 알고리즘 구현 방법을 종합적으로 학습한다.
머신러닝의 전체 파이프라인은 데이터 수집, 데이터 전처리, 데이터 학습, 모델 평가의 4단계로 구성되며,
각 단계는 모델의 성능을 결정하는 데 중요한 역할을 한다.

데이터 수집 단계에서는 학습, 검증, 평가 데이터셋을 정의하고, 일반적으로 7:3 또는 8:2 비율로 데이터를 분할하여 모델의 신뢰도를 확보한다.

데이터 전처리 단계는 누락 데이터 처리, 텍스트 데이터의 수치화, 특성 스케일링(Feature Scaling) 등
머신러닝 알고리즘이 효과적으로 학습할 수 있도록 데이터를 정제하고 변환하는 핵심 과정이다.

데이터 학습 단계에서는 지도 학습, 비지도 학습, 강화 학습 등 문제의 성격에 맞는 학습 방법과 알고리즘을 선택한다.
사이킷런은 선형 회귀, 로지스틱 회귀, 의사결정 트리, 서포트 벡터 머신(SVM), 랜덤 포레스트 등 다양한 지도 및 비지도 학습 알고리즘을 표준화된 API로 제공하여 효율적인 모델 개발을 지원한다.

마지막으로, 모델 평가 단계에서는 정확도(Accuracy), 정밀도(Precision), 재현율(Recall) 과 같은 지표를 사용하여 학습된 모델의 성능을 객관적으로 측정하고 검증한다.
이러한 전 과정에 대한 상세한 설명과 사이킷런을 통한 구체적인 구현 방법을 제시하여 머신러닝 프로젝트 수행에 대한 깊이 있는 이해를 제공한다.


1. 머신러닝의 표준 처리 절차​

머신러닝 프로젝트는 일반적으로 데이터 수집부터 모델 평가에 이르는 체계적인 4단계 절차를 따른다.

1.1. 데이터 수집 (Data Collection)​

데이터 수집은 머신러닝 모델의 기반을 마련하는 첫 단계로, 양질의 데이터를 확보하고 목적에 맞게 분할하는 과정이 포함된다.

  • 데이터셋의 종류:
    • 학습 데이터셋 (Training Set): 머신러닝 알고리즘을 학습시키는 데 사용되는 데이터.
    • 검증 데이터셋 (Validation Set): 학습된 모델의 예측 정확도를 계산하고 하이퍼파라미터 튜닝에 사용되는 데이터.
    • 평가 데이터셋 (Test Set): 모델 구축 및 튜닝 과정에 사용되지 않은, 실제 데이터와 유사한 데이터로 최종 성능을 평가하는 데 사용.
  • 데이터셋 분할:
    • 학습 데이터가 너무 적으면 알고리즘이 효율적으로 학습하기 어렵다.
    • 검증 데이터가 너무 적으면 정확도, 정밀도, 재현율의 신뢰도가 낮아진다.
    • 효과적인 분할 비율은 학습 데이터 : 검증 데이터 = 80%:20% 또는 70%:30% 이다.
  • 대표적인 데이터셋 수집 사이트:
    사이트명URL주요 특징
    네이버 데이터랩http://datalab.naver.com/국내 검색 트렌드 및 쇼핑 데이터 제공
    공공데이터 포털https://www.data.go.kr/대한민국 정부가 제공하는 공공 데이터
    K-ICT 빅데이터 센터https://kbig.kr/#none빅데이터 분석 동향 및 실습 데이터 제공
    건강보험심사평가원https://www.hira.or.kr/의료 관련 통계 데이터
    Kagglehttps://www.kaggle.com/전 세계 최대 데이터 과학 경진대회 및 데이터셋 플랫폼
    Google Datasetshttps://datasetsearch.research.google.com/구글에서 제공하는 데이터셋 검색 엔진

1.2. 데이터 전처리 (Data Preprocessing)​

데이터 전처리는 수집된 원시 데이터를 머신러닝 알고리즘에 적합한 형태로 변환하는 과정이다.

  • 주요 전처리 기법:
    • Data Cleaning: 누락되거나 불필요한 데이터를 제거(drop(), dropna())하거나 특정 값으로 채운다(fillna()).
    • Handling Text and Categorical Attributes: 대부분의 알고리즘은 수치 데이터를 기반으로 하므로, 텍스트 데이터를 수치로 인코딩한다 (factorize(), OrdinalEncoder(), OneHotEncoder()).
    • Custom Transformers: 사이킷런의 데이터 변환기(fit(), transform(), fit_transform())를 활용하여 데이터를 변환한다.
    • Feature Scaling: 데이터의 범위를 조정하여 모델이 안정적으로 학습하도록 돕는다.
      • 정규화 (Normalization): 데이터 범위를 0과 1 사이로 조정 (Min-Max Scaling).
      • 표준화 (Standardization): 데이터의 평균을 0, 표준편차를 1로 조정.
    • Transformation Pipelines: 반복적인 전처리 과정을 파이프라인으로 구성하여 작업의 효율성을 높인다.
  • 결측치 처리:
    • 데이터가 충분할 경우: 결측치가 포함된 행 또는 열을 제거한다.
    • 데이터가 부족할 경우: 평균, 중앙값, 최빈값 등 통계적 방법으로 결측치를 채운다.

1.3. 데이터 학습 (Data Training)​

전처리된 데이터를 사용하여 모델을 학습시키는 단계로, 문제의 종류에 따라 적절한 학습 방법과 알고리즘을 선택해야 한다.

  • 학습 방법의 종류:

    • 지도 학습 (Supervised Learning): 정답(레이블)이 있는 데이터를 사용하여 모델을 학습.
      • 분류 (Classification): 데이터를 정해진 카테고리로 구분 (예: SVM, 의사결정 트리, 나이브 베이즈).
      • 회귀 (Regression): 연속적인 값을 예측 (예: 선형 회귀).
    • 비지도 학습 (Unsupervised Learning): 정답 없이 데이터 자체의 패턴이나 구조를 학습.
      • 군집화 (Clustering): 유사한 데이터끼리 그룹화 (예: 가우시안 믹스쳐 모델).
    • 강화 학습 (Reinforcement Learning): 보상을 최대화하는 방향으로 행동을 학습.

1.4. 모델 평가 (Model Evaluation)​

학습된 모델의 성능을 객관적인 지표로 측정하는 단계이다.

  • 혼동 행렬 (Confusion Matrix): 모델의 예측 성능을 시각적으로 나타내는 표.

    예측: Positive예측: Negative
    실제: PositiveTP (True Positive)FN (False Negative)
    실제: NegativeFP (False Positive)TN (True Negative)
  • 주요 평가 지표:

    • 정확도 (Accuracy): 전체 예측 중 올바르게 예측한 비율.
      • (TP + TN) / (TP + TN + FP + FN)
    • 재현율 (Recall): 실제 Positive인 것들 중 모델이 Positive라고 올바르게 예측한 비율.
      • TP / (FN + TP)
    • 정밀도 (Precision): 모델이 Positive라고 예측한 것들 중 실제로 Positive인 것의 비율.
      • TP / (TP + FP)

2. 사이킷런(Scikit-learn)을 활용한 머신러닝 구현​

사이킷런은 파이썬에서 가장 널리 사용되는 머신러닝 라이브러리로, 다양한 알고리즘과 데이터 처리 도구를 제공한다.

2.1. 사이킷런 개요 및 핵심 프로세스​

  • 개요: 지도/비지도 학습 알고리즘을 포함한 다양한 머신러닝 기능을 제공하는 파이썬 라이브러리.

  • 설치: pip install scikit-learn (구글 코랩에서는 기본 제공)

  • 처리 과정:

    1. 라이브러리 Import
    2. 데이터 로드 (Load)
    3. 학습/테스트 데이터 분할 (Split)
    4. 알고리즘에 따른 모델 생성
    5. 모델 학습 (fit)
    6. 예측 (predict)
    7. 성능 평가 (score)

2.2. 주요 라이브러리 및 내장 데이터​

  • 대표적인 라이브러리 Import:
    • 내장 데이터셋: from sklearn.datasets import load_iris
    • 데이터 분할: from sklearn.model_selection import train_test_split
    • 알고리즘: from sklearn.tree import DecisionTreeClassifier
    • 성능 평가: from sklearn.metrics import accuracy_score
  • 내장 데이터셋:
    • 사이킷런은 sklearn.utils.Bunch라는 Key-Value 형태의 자료구조로 데이터를 제공한다.
    • 주요 Key: data(샘플 데이터), target(레이블), feature_names, target_names, DESCR(설명).
함수명용도설명
load_boston()회귀보스턴 집값 데이터
load_iris()분류붓꽃 품종 데이터
load_diabetes()회귀당뇨병 데이터
load_digits()분류숫자 이미지 픽셀 데이터
load_wine()분류와인 등급 데이터
load_breast_cancer()분류위스콘신 유방암 데이터

2.3. 가상 데이터 생성 도구​

사이킷런은 알고리즘 테스트를 위해 다양한 가상 분류용 데이터를 생성하는 함수를 제공한다.

함수명라이브러리주요 역할
make_classificationsklearn.datasets일반적인 가상 분류 모형 데이터 생성
make_blobssklearn.datasets등방성 가우시안 정규분포를 이용한 클러스터 생성
make_moonssklearn.datasets초승달 모양의 비선형 클러스터 2개 생성
make_gaussian_quantilessklearn.datasets다차원 가우시안 분포를 이용해 클래스 분류

2.4. 데이터 분할 (train_test_split)​

from sklearn.model_selection import train_test_split를 사용하여 데이터를 학습용과 테스트용으로 분할한다.

  • 주요 파라미터:
    • test_size: 테스트 데이터셋의 비율 (예: 0.2)
    • train_size: 학습 데이터셋의 비율 (지정하지 않으면 1 - test_size)
    • random_state: 재현 가능한 결과를 위해 사용하는 난수 시드

3. 주요 머신러닝 알고리즘 상세 분석​

사이킷런으로 구현 가능한 주요 지도 학습 알고리즘은 다음과 같다.

3.1. 선형 회귀 (Linear Regression)​

  • 목적: 종속 변수(y)와 하나 이상의 독립 변수(x) 간의 선형 상관 관계를 모델링하여 값을 예측.
  • 라이브러리: from sklearn.linear_model import LinearRegression

3.2. 로지스틱 회귀 (Logistic Regression)​

  • 목적: 특정 사건이 발생할 확률을 예측하는 모델로, 데이터가 어떤 범주에 속할 확률을 0과 1 사이의 값으로 예측.
  • 라이브러리: from sklearn.linear_model import LogisticRegression

3.3. K-최근접 이웃 (KNN)​

  • 목적: 새로운 데이터 포인트에 대해 기존 훈련 데이터셋에서 가장 가까운 K개의 이웃을 찾아 분류 또는 회귀를 수행하는 간단한 알고리즘.
  • 라이브러리: from sklearn.neighbors import KNeighborsClassifier

3.4. 나이브 베이즈 (Naive Bayes)​

  • 목적: 각 특성이 독립적이라고 가정하고 베이즈 정리를 적용하여 데이터를 간단하게 분류.
  • 종류 및 라이브러리:
    • 가우시안 (GaussianNB): 연속적인 데이터에 사용 (from sklearn.naive_bayes import GaussianNB).
    • 다항분포 (MultinomialNB): 카운트 기반 데이터에 사용 (from sklearn.naive_bayes import MultinomialNB).
    • 베르누이 (BernoulliNB): 이진 데이터에 사용 (from sklearn.naive_bayes import BernoulliNB).

3.5. 의사결정 트리 (Decision Tree)​

  • 목적: 데이터의 속성을 분석하여 패턴을 찾고, 이를 기반으로 분류나 회귀를 수행하는 트리 구조의 알고리즘.
  • 특징:
    • Greedy 방식: 각 분기점에서 최적의 선택만을 고려하므로 전역 최적해를 보장하지 못할 수 있음.
    • 오버피팅(과적합) 경향이 있어 가지치기(Pruning)가 필요함.
  • 핵심 개념:
    • 지니 불순도 (Gini Impurity): 한 노드에 여러 클래스의 데이터가 얼마나 섞여 있는지를 나타내는 지표. 낮을수록 순수함.
    • 정보 획득량 (Information Gain): 특정 질문(분기)을 통해 불순도가 얼마나 감소했는지를 측정. 정보 획득량이 큰 순서대로 트리를 구성.
  • 라이브러리:
    • 분류: from sklearn.tree import DecisionTreeClassifier
    • 회귀: from sklearn.tree import DecisionTreeRegressor

3.6. 서포트 벡터 머신 (SVM)​

  • 목적: 데이터를 분류하기 위한 강력한 지도 학습 모델로, 클래스 간의 경계(Decision Boundary)를 정의.
  • 핵심 개념:
    • 서포트 벡터 (Support Vector): 결정 경계와 가장 가까운 데이터 포인트.
    • 마진 (Margin): 결정 경계와 서포트 벡터 사이의 거리. SVM은 이 마진을 최대화하는 것을 목표로 함.
    • 하드 마진 vs. 소프트 마진: 이상치(Outlier)를 허용하지 않는 하드 마진은 오버피팅을, 어느 정도 허용하는 소프트 마진은 언더피팅의 위험이 있음.
  • 라이브러리: from sklearn import svm (예: svm.SVC())

3.7. 랜덤 포레스트 (Random Forest)​

  • 목적: 여러 개의 의사결정 트리를 생성하고 그 결과를 종합(앙상블)하여 단일 트리의 오버피팅 문제를 해결하는 모델.
  • 핵심 개념:
    • 배깅 (Bagging): 원본 훈련 데이터에서 중복을 허용하여 여러 개의 서브 데이터셋을 만들고, 각 서브셋으로 개별 트리를 학습시키는 기법.
    • 속성 제한: 각 트리를 만들 때 전체 특성 중 일부만 무작위로 선택하여 사용함으로써 트리의 다양성을 확보.
  • 라이브러리: from sklearn.ensemble import RandomForestClassifier