Skip to content

[ML] Classic Regressor (Summary)

DeepLearning 계열을 제외한 Regressor 모델들을 간단하게 정리함. ​


분류

  • Instance Based Algorithm
    • K Neighbors Regression
  • Model Based Algorithm
    • Linear Model
      • Linear Regression
      • Regularization
        • Ridge Regression
        • Lasso Regression
        • ElasticNet
    • Non-Linear Model
      • Polynomial Regression
      • Support Vector Regression
      • Decision Tree Regression
      • Ensemble Model
        • Random Forest Regression
        • AdaBoost Regression
        • Gradient Booting Regression
        • XGBoost, LightGBM, CatBoost

설명

0. K-Nearest Neighbors Regressor (KNN 회귀)

  • 설명:
    • 가장 가까운 K개의 데이터 포인트를 기반으로 예측하는 instance based model (1951)
  • 사용 함수:
    • sklearn.neighbors.KNeighborsRegressor
  • 특징:
    • 비선형 데이터에 강하지만, K 값에 따라 성능 차이.

# KNN Regressor 모델 (기본값으로 k=5 사용)
from sklearn.neighbors import KNeighborsRegressor

# KNeighborsRegressor 모델 생성
knn_regressor = KNeighborsRegressor(
    n_neighbors=5,             # 이웃 수 (k 값)
    weights='distance',        # 거리 가중치 ('uniform' 또는 'distance')
    algorithm='auto',          # 가까운 이웃을 찾는 알고리즘 ('auto', 'ball_tree', 'kd_tree', 'brute')
    leaf_size=30,              # 트리 기반 알고리즘에서의 leaf 사이즈
    p=2,                       # 거리 측정 방법 (1: 맨해튼 거리, 2: 유클리드 거리)
    metric='minkowski',        # 거리 계산에 사용할 메트릭 ('minkowski', 'euclidean', 'manhattan' 등)
    n_jobs=-1                  # 병렬처리할 CPU 코어 수 (-1은 모든 코어 사용)
)
knn_regressor = knn_regressor.fit(X_train_scaled, y_train)


1. Linear Regression (선형 회귀)

  • 설명: 데이터의 features과 target 간의 linear relation를 가정. (1800s)
  • 사용 함수: sklearn.linear_model.LinearRegression
  • 특징: 가장 간단한 회귀 모델, under-fitting 우려.

from sklearn.linear_model import LinearRegression

# LinearRegression 모델 생성
linear_regressor = LinearRegression(
    fit_intercept=True,     # 절편을 계산할지 여부 (True: 절편을 계산, False: 절편 없이 원점을 지남)
    copy_X=True,            # 입력 데이터 X의 복사본을 만들지 여부 (True: 원본을 유지)
    n_jobs=None,            # 사용할 CPU 코어 수 (-1: 모든 코어 사용, None: 자동)
    positive=False          # 계수가 양수로 제약되는지 여부 (True: 모든 계수가 양수여야 함)
)
linear_regressor = linear_regressor.fit(X_train_scaled, y_train)


2. Ridge Regression (릿지 회귀)

  • 설명: 선형 회귀에 L2 Regularization 를 추가하여 over-fitting 방지. (1970s)
  • 사용 함수: sklearn.linear_model.Ridge
  • 특징: 큰 Parameters를 같이 작은 수를 취하도록 regularization → 모델의 자유도를 떨어뜨려 generalization

from sklearn.linear_model import Ridge

# Ridge 회귀 모델 생성
ridge_regressor = Ridge(
    alpha=1.0,          # 정규화 강도 (alpha 값이 클수록 정규화가 강해짐)
    fit_intercept=True, # 절편을 계산할지 여부
    copy_X=True,        # 원본 데이터를 복사할지 여부
    max_iter=None,      # 최대 반복 횟수 (default는 무제한)
    tol=0.001,          # 수렴 기준 허용 오차
    solver='auto'       # 계산 방법 선택 ('auto', 'svd', 'cholesky', 'lsqr', 'sparse_cg' 등)
)
ridge_regressor = ridge_regressor.fit(X_train_scaled, y_train)


3. Lasso Regression (라쏘 회귀)

  • 설명: 선형 회귀에 L1 Regularization를 추가하여 over-fitting 방지. (1996)
  • 사용 함수: sklearn.linear_model.Lasso
  • 특징: 불필요한 features와 관련된 parameters를 0으로 만들어서 sparse weight matrix가 되도록 함.

from sklearn.linear_model import Lasso

# Lasso 회귀 모델 생성
lasso_regressor = Lasso(
    alpha=1.0,          # 정규화 강도 (alpha 값이 클수록 정규화가 강해짐)
    fit_intercept=True, # 절편을 계산할지 여부
    precompute=False,   # 계산 속도 향상을 위한 미리 계산된 행렬 사용 여부
    max_iter=1000,      # 최대 반복 횟수
    tol=0.0001,         # 수렴 기준 허용 오차
    positive=False,     # 계수를 양수로 제한할지 여부
    selection='cyclic'  # 계수 업데이트 순서 ('cyclic' 또는 'random')
)

lasso_regressor = lasso_regressor.fit(X_train_scaled, y_train)


4. ElasticNet

  • 설명: Lasso와 Ridge를 혼합한 모델. (2005)
  • 사용 함수: sklearn.linear_model.ElasticNet
  • 특징: L1과 L2 Regularization 의 장점을 동시에 사용. ​
    from sklearn.linear_model import ElasticNet
    
    # ElasticNet 회귀 모델 생성
    elasticnet_regressor = ElasticNet(
        alpha=1.0,          # 전체 정규화 강도 (alpha 값이 클수록 정규화가 강해짐)
        l1_ratio=0.5,       # L1 비율 (0.5는 L1과 L2를 동일하게 사용)
        fit_intercept=True, # 절편을 계산할지 여부
        precompute=False,   # 계산 속도 향상을 위한 미리 계산된 행렬 사용 여부
        max_iter=1000,      # 최대 반복 횟수
        tol=0.0001,         # 수렴 기준 허용 오차
        positive=False,     # 계수를 양수로 제한할지 여부
        selection='cyclic'  # 계수 업데이트 순서 ('cyclic' 또는 'random')
    )
    
    elasticnet_regressor = elasticnet_regressor.fit(X_train_scaled, y_train)
    

5. Polynomial Regression (다항 회귀)

  • 설명: 입력 features를 polynomial equation으로 변경하여 non-linear relation을 modeling.
  • 사용 함수: sklearn.preprocessing.PolynomialFeatures + LinearRegression
  • 특징: 다항식 degree(차수)에 따라 복잡도가 증가.

from sklearn.preprocessing import PolynomialFeatures

# PolynomialFeatures로 다항식 특성 생성
poly_features = PolynomialFeatures(degree=2, include_bias=True)
X_train_poly = poly_features.fit_transform(X_train_scaled)
X_test_poly = poly_features.transform(X_test_scaled)

from sklearn.linear_model import ElasticNet

# ElasticNet 회귀 모델 생성
elasticnet_regressor_nl = ElasticNet(
    alpha=1.0,          # 전체 정규화 강도 (alpha 값이 클수록 정규화가 강해짐)
    l1_ratio=0.5,       # L1 비율 (0.5는 L1과 L2를 동일하게 사용)
    fit_intercept=True, # 절편을 계산할지 여부
    precompute=False,   # 계산 속도 향상을 위한 미리 계산된 행렬 사용 여부
    max_iter=1000,      # 최대 반복 횟수
    tol=0.0001,         # 수렴 기준 허용 오차
    positive=False,     # 계수를 양수로 제한할지 여부
    selection='cyclic'  # 계수 업데이트 순서 ('cyclic' 또는 'random')
)

elasticnet_regressor_nl = elasticnet_regressor_nl.fit(X_train_poly, y_train)


6. Support Vector Regression (SVR)

  • 설명: 데이터의 margine 을 최대화하며 회귀를 수행. (1996)
  • 사용 함수: sklearn.svm.SVR
  • 특징: 비선형 경계를 modeling 할 수 있음. data samples의 수가 너무 많을 시 성능이 감소하기 쉬임. ​
    from sklearn.svm import SVR
    
    # SVR 모델 생성
    svr_regressor = SVR(
        kernel='rbf',        # 커널 유형: 'linear', 'poly', 'rbf', 'sigmoid'
        degree=3,            # 다항식 커널을 사용할 때, 다항식의 차수 (기본값 3)
        gamma='scale',       # 커널 계수: 'scale', 'auto' 또는 float 값 (RBF, poly, sigmoid에서 사용)
        coef0=0.0,           # 다항식 및 시그모이드 커널에서 상수 항
        tol=1e-3,            # 반복 과정에서 수렴 기준 허용 오차
        C=3.0,               # 규제 강도: 값이 클수록 오차를 줄이려 함 (과적합 위험): 1.0
        epsilon=0.01,        # 예측 정확도에 허용할 오차의 마진
        shrinking=True,      # 축소 방식 사용 여부 (True: 최적화 시 더 빠를 수 있음)
        cache_size=200,      # SVM에서 커널 계산을 위한 캐시 크기 (MB 단위)
        verbose=False,       # 학습 과정에서 출력 여부
        max_iter=-1          # 최대 반복 횟수 (-1이면 무제한)
    )
    
    svr_regressor = svr_regressor.fit(X_train_scaled, y_train)
    

7. Decision Tree Regressor (결정 트리 회귀)

  • 설명: 데이터 공간을 Tree 형태로 분할하여 예측. (1980s)
  • 사용 함수: sklearn.tree.DecisionTreeRegressor
  • 특징: 비선형 관계를 잘 모델링하고 feature scaling이 필요없음. over-fitting 가능성이 매우 높아서 Random Forest Regressor가 사용됨(Random Forest Regressor를 이해하기 위한 stepping stone).

from sklearn.tree import DecisionTreeRegressor

# DecisionTreeRegressor 모델 생성
tree_regressor = DecisionTreeRegressor(
    criterion='squared_error',   # 분할 품질 기준 ('squared_error', 'friedman_mse', 'absolute_error', 'poisson')
    splitter='best',             # 분할 방법 ('best': 가장 좋은 분할 선택, 'random': 랜덤 분할)
    max_depth=None,              # 트리의 최대 깊이 (None이면 깊이에 제한이 없음)
    min_samples_split=2,         # 내부 노드를 분할하기 위한 최소 샘플 수
    min_samples_leaf=1,          # 리프 노드에 있어야 할 최소 샘플 수
    min_weight_fraction_leaf=0.0,# 리프 노드에 필요한 가중치 합의 최소 비율
    max_features=None,           # 분할에 사용할 최대 특성 수 (None이면 모든 특성 사용)
    max_leaf_nodes=None,         # 리프 노드의 최대 개수 (None이면 제한 없음)
    min_impurity_decrease=0.0,   # 노드를 분할하는 데 필요한 최소 불순도 감소
    ccp_alpha=0.0,               # 가지치기 비용-복잡도 매개변수 (0.0이면 가지치기 없음)
    random_state=7,           # 트리의 무작위성을 제어하는 시드 값
)

tree_regressor = tree_regressor.fit(X_train_scaled, y_train)


8. Random Forest Regressor (랜덤 포레스트 회귀)

  • 설명: 여러 개의 Decision Tree (=weak learner)를 ensemble하여 예측 (aggregation: averaging)하는 Bagging 기법. (2001)
  • 사용 함수: sklearn.ensemble.RandomForestRegressor
  • 특징: over-fitting 방지 및 generalization 성능 향상.

from sklearn.ensemble import RandomForestRegressor

# RandomForestRegressor 모델 생성
forest_regressor = RandomForestRegressor(
    n_estimators=100,            # 생성할 트리의 개수 (기본값: 100)
    criterion='squared_error',   # 분할 기준 ('squared_error': MSE, 'absolute_error': MAE) *
    max_depth=None,              # 트리의 최대 깊이 (None이면 제한 없음) *
    min_samples_split=2,         # 노드를 분할하기 위한 최소 샘플 수 *
    min_samples_leaf=1,          # 리프 노드에 있어야 하는 최소 샘플 수 *
    min_weight_fraction_leaf=0.0,# 리프 노드에서 최소 가중치 비율 *
    max_features='sqrt',         # 각 분할에 사용할 최대 특성 수 ('sqrt', 'log2' 또는 정수) * 
    max_leaf_nodes=None,         # 최대 리프 노드 수 (None이면 제한 없음) *
    min_impurity_decrease=0.0,   # 분할을 위한 최소 불순도 감소 * 
    random_state=7,           # 무작위성 제어 (재현 가능성을 위한 시드)
    bootstrap=True,              # 부트스트랩 샘플링 사용 여부
    oob_score=False,             # OOB (Out of Bag) 샘플로 성능 평가 여부
    n_jobs=None,                 # 병렬 처리에 사용할 CPU 코어 수 (-1이면 모든 코어 사용)
    verbose=0,                   # 학습 과정 중 출력 여부
    warm_start=False,            # 이전 학습 결과를 이용해 추가 학습을 할지 여부
    ccp_alpha=0.0,               # 비용-복잡도 가지치기의 매개변수 (0이면 가지치기 없음)
    max_samples=None             # 부트스트랩 샘플링 시 사용할 최대 샘플 비율
)

forest_regressor = forest_regressor.fit(X_train_scaled, y_train)


9. AdaBoost Regressor (아다부스트 회귀)

  • 설명: 약한 학습자(보통 결정 트리)를 결합하여 성능을 향상시키는 Boosting 기법. (1995)
  • 사용 함수: sklearn.ensemble.AdaBoostRegressor
  • 특징: 점진적으로 학습하며, 이전 단계에서 잘못 예측한 데이터에 더 집중. ​
    from sklearn.ensemble import AdaBoostRegressor
    from sklearn.tree import DecisionTreeRegressor
    
    # AdaBoostRegressor 모델 생성
    
    adaboost_regressor = AdaBoostRegressor(
        estimator=DecisionTreeRegressor(max_depth=3),  # 약한 학습자로 결정 트리 회귀 사용
        n_estimators=50,             # 부스팅 과정에서 생성할 트리(약한 학습자)의 개수
        learning_rate=1.0,           # 학습률: 각 학습자가 기여하는 정도를 제어
        loss='linear',               # 손실 함수 ('linear', 'square', 'exponential')
        random_state=42              # 무작위성을 제어하는 시드 값
    )
    adaboost_regressor = adaboost_regressor.fit(X_train_scaled, y_train)
    

10. Gradient Boosting Regressor (그래디언트 부스팅 회귀)

  • 설명: weak learner를 직렬로 결합하여 점진적으로 오류를 줄이는 ensemble 기법: Boosting 에 속함. (1999)
  • 사용 함수: sklearn.ensemble.GradientBoostingRegressor
  • 특징: 강력한 성능, 학습이 느릴 수 있으며 hyper-parameter에 의한 성능 차이가 심한 편이며 over-fitting의 위험이 존재.

from sklearn.ensemble import GradientBoostingRegressor

# GradientBoostingRegressor 모델 생성
gbr_regressor = GradientBoostingRegressor(
    loss='squared_error',        # 손실 함수 ('squared_error', 'absolute_error', 'huber', 'quantile')
    learning_rate=0.01,          # 학습률, 각 트리가 기여하는 정도를 제어: 0.1
    n_estimators=100,            # 생성할 트리의 개수
    subsample=1.0,               # 각 트리 학습에 사용할 샘플 비율 (1.0이면 모든 샘플 사용)
    criterion='friedman_mse',    # 트리 분할 기준 ('friedman_mse', 'squared_error', 'mse')
    min_samples_split=2,         # 내부 노드를 분할하기 위한 최소 샘플 수
    min_samples_leaf=1,          # 리프 노드에 있어야 하는 최소 샘플 수
    min_weight_fraction_leaf=0.0,# 리프 노드에서의 가중치 최소 비율
    max_depth=3,                 # 트리의 최대 깊이
    min_impurity_decrease=0.0,   # 노드를 분할하는 데 필요한 불순도 감소
    init=None,                   # 초기 추정기 (None이면 평균값으로 시작)
    random_state=7,             # 랜덤 시드 값
    max_features=None,           # 각 분할에서 고려할 최대 특성 수
    alpha=0.9,                   # 허브 또는 분위수 손실 함수를 사용할 때 분위수 값
    verbose=0,                   # 학습 과정 중 출력 여부
    max_leaf_nodes=None,         # 리프 노드의 최대 개수
    warm_start=False,            # True로 설정하면 이전 학습 결과에서 추가 학습 가능
    validation_fraction=0.1,     # 조기 종료를 위해 검증용으로 사용할 훈련 데이터 비율
    n_iter_no_change=None,       # 조기 종료를 위해 반복할 동안 성능 향상이 없는 경우의 허용치
    tol=1e-4,                    # 성능 향상이 없을 때 종료하기 위한 허용 오차
    ccp_alpha=0.0                # 비용-복잡도 가지치기의 매개변수 (0.0이면 가지치기 없음)
)

gbr_regressor = gbr_regressor.fit(X_train_scaled, y_train)


11. XGBoost / LightGBM / CatBoost (외부 라이브러리 사용)

  • 설명: Gradient Boosting을 더 최적화한 고성능 모델들.
  • 사용 함수:
    • xgboost.XGBRegressor: GB를 최적화 (2014)
    • lightgbm.LGBMRegressor: 빠른 learning 과 낮은 메모리 사용을 목표로 개발 (2017)
    • catboost.CatBoostRegressor: Categorical data를 효율적으로 처리하는 GB (2017)
  • 특징: 복잡한 데이터셋에서도 우수한 성능을 보이나 third-party library가 필요.

​ XGBRegressor

import xgboost as xgb

# XGBRegressor 모델 생성
xgb_regressor = xgb.XGBRegressor(
    objective='reg:squarederror',  # 목적 함수 (회귀: 'reg:squarederror', 'reg:squaredlogerror' 등)
    n_estimators=100,              # 부스팅 과정에서 생성할 트리의 개수
    learning_rate=0.1,             # 학습률 (각 트리의 기여도를 제어)
    max_depth=3,                   # 각 트리의 최대 깊이
    min_child_weight=1,            # 리프 노드가 가져야 할 최소 가중치 합
    gamma=0,                       # 노드를 분할하기 위한 최소 손실 감소
    subsample=1.0,                 # 각 트리 학습에 사용할 데이터 샘플의 비율
    colsample_bytree=1.0,          # 각 트리 학습에 사용할 특성의 비율
    reg_alpha=0,                   # L1 정규화 항의 가중치 (Lasso)
    reg_lambda=1,                  # L2 정규화 항의 가중치 (Ridge)
    booster='gbtree',              # 부스팅 알고리즘 ('gbtree', 'gblinear', 'dart')
    n_jobs=1,                      # 병렬 처리에 사용할 CPU 코어 수
    random_state=7,               # 무작위성을 제어하기 위한 시드 값
    verbosity=1                    # 출력 메시지 수준 (0: 출력 없음, 1: 경고, 2: 정보)
)

xgb_regressor = xgb_regressor.fit(X_train_scaled, y_train)


​ LGBMRegressor ​

import lightgbm as lgb

# LGBMRegressor 모델 생성
lgb_regressor = lgb.LGBMRegressor(
    boosting_type='gbdt',        # 부스팅 유형 ('gbdt', 'rf', 'dart', 'goss')
    num_leaves=20,               # 하나의 트리가 가질 수 있는 최대 리프 노드 수:31
    max_depth=5,                # 트리의 최대 깊이 (-1은 제한 없음): -1
    learning_rate=0.1,           # 학습률
    n_estimators=100,            # 부스팅 과정에서 생성할 트리의 개수
    subsample_for_bin=200000,    # 각 feature에 대해 데이터 포인트를 사용할 최대 bin 개수
    objective='regression',      # 목적 함수 (회귀 문제)
    class_weight=None,           # 클래스 가중치 (None이면 균등한 가중치 사용)
    min_split_gain=0.0,          # 노드를 분할할 때 필요한 최소 손실 감소
    min_child_weight=1e-3,       # 리프 노드가 가져야 할 최소 가중치 합
    min_child_samples=20,        # 리프 노드에 있어야 할 최소 샘플 수
    subsample=1.0,               # 각 트리 학습에 사용할 데이터 샘플 비율
    subsample_freq=0,            # Subsample 수행 빈도
    colsample_bytree=1.0,        # 각 트리 학습에 사용할 특성의 비율
    reg_alpha=0.0,               # L1 정규화 계수
    reg_lambda=0.0,              # L2 정규화 계수
    random_state=7,           # 무작위성 제어를 위한 시드 값
    n_jobs = -1,                    # 병렬 처리에 사용할 CPU 코어 수 (-1이면 모든 코어 사용)
    verbose = -1, # -1: 모든 로그 메시지를 끔. 0: 정보 로그를 숨기고 경고 메시지만 표시/ 1: 기본 설정으로 모든 로그 메시지를 표시. 
)

lgb_regressor = lgb_regressor.fit(X_train_scaled, y_train)


​ CatBoostRegressor ​

# !pip install catboost
from catboost import CatBoostRegressor

# CatBoostRegressor 모델 생성
catboost_regressor = CatBoostRegressor(
    iterations=1000,           # 부스팅 반복 횟수 (생성할 트리의 개수)
    learning_rate=0.1,         # 학습률
    depth=6,                   # 트리의 최대 깊이
    loss_function='RMSE',      # 손실 함수 (기본적으로 RMSE 사용)
    eval_metric='RMSE',        # 평가 메트릭 (회귀 문제에서는 RMSE 또는 MAE 사용 가능)
    random_seed=42,            # 무작위성 제어를 위한 시드 값
    l2_leaf_reg=3.0,           # L2 정규화 계수
    bootstrap_type='Bayesian', # 부트스트랩 샘플링 방식 ('Bayesian', 'Bernoulli', 'MVS' 등)
    # subsample=0.8,             # 각 트리 학습에 사용할 데이터 샘플 비율
    task_type='CPU',           # 'GPU'를 사용할 경우 GPU로 학습 (기본값은 'CPU')
    verbose=100                # 학습 과정에서 출력 메시지 빈도 (0으로 설정 시 로그 출력 비활성화)
)

catboost_regressor = catboost_regressor.fit(X_train_scaled, y_train)