728x90
반응형

1. DescisionTree() 활용 최적의 하이퍼파라미터 찾고 학습하기

%%time

from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeClassifier

dt_model = DecisionTreeClassifier()

# 그리드 서치를 위한 하이퍼파라미터 그리드 준비
param_grid = {
    'max_depth': [2, 3, 5, 10],                        # 의사결정트리의 최대 깊이
    'min_samples_split': [1, 2, 3, 5, 7, 10],            # 노드를 분할하기 위한 최소 샘플 수
    'min_samples_leaf': [0, 1, 2, 3, 4, 5, 6],           # 리프 노드에 필요한 최소 샘플 수
    'ccp_alpha': [0.0, 0.1, 0.2],                     # Cost-Complexity Pruning (CCP) 알고리즘에 대한 복잡성 매개변수
    # 'class_weight': [None, 'balanced'],               # 클래스별 가중치 (None: 균등한 가중치, 'balanced': 불균등한 가중치)
    'criterion': ['gini', 'entropy'],                  # 불순도(impurity) 계산에 사용할 기준 ('gini': Gini 불순도, 'entropy': 엔트로피)
    # 'max_features': ['auto', 'sqrt', 'log2', None],    # 각 분할에서 고려할 최대 특성 개수 ('auto': sqrt(features), 'sqrt': sqrt(features), 'log2': log2(features), None: 모든 특성)
    'max_leaf_nodes': [1, 5, 10, 15],               # 리프 노드의 최대 개수 (None: 제한 없음, 정수 값: 리프 노드의 최대 개수)
    # 'min_impurity_decrease': [0.0, 0.1, 0.2],          # 분할 기준으로서 필요한 최소 불순도 감소량
    # 'min_weight_fraction_leaf': [0.0, 0.1, 0.2],       # 리프 노드의 최소 가중치 비율
    'random_state': [42],                              # 난수 발생 시드 값
    'splitter': ['best', 'random']                     # 분할 기준을 선택하는 전략 ('best': 최적의 분할, 'random': 무작위 분할)
}

# 그리드 서치 객체 생성
grid_search = GridSearchCV(dt_model, param_grid, cv=10, n_jobs=-1)

# 그리드 서치 수행
grid_search.fit(X_train, y_train)

# 최적의 모델 및 파라미터 출력
best_model_grid_search_dc = grid_search.best_estimator_
best_params_grid_search_dc = grid_search.best_params_
print("Best Model:", best_model_grid_search_dc)
print("Best Parameters:", best_params_grid_search_dc)

1. max_depth

max_depth는 의사결정나무(Decision Tree) 모델의 하이퍼파라미터 중 하나입니다. 이 매개변수는 의사결정나무의 최대 깊이를 제어하는 데 사용됩니다.

의사결정나무는 트리 구조로 이루어져 있으며, 각 노드는 데이터의 특성에 따라 분할되어 더 작은 하위 노드로 나뉩니다. max_depth 매개변수는 이 트리의 깊이를 제한하고, 최대로 허용되는 분할 수를 나타냅니다.

max_depth를 지정하는 방식에 따라 다음과 같은 동작이 결정됩니다:

  • max_depth=None (기본값): 의사결정나무의 최대 깊이에 제한이 없습니다. 훈련 데이터에 완벽하게 적합할 때까지 계속해서 분할합니다. 이는 모델이 훈련 데이터에 과적합(Overfitting)될 수 있는 가능성이 있습니다.
  • max_depth=int (정수 값): 의사결정나무의 최대 깊이를 지정합니다. 트리의 깊이가 지정된 값에 도달하면 분할을 중단하고 해당 깊이까지만 트리를 생성합니다. 이를 통해 모델의 복잡도를 제어하고 과적합을 방지할 수 있습니다.

max_depth는 모델의 복잡도와 일반화 능력에 직접적인 영향을 미치는 중요한 매개변수입니다. 작은 max_depth 값은 모델을 단순화하여 과적합을 줄일 수 있지만, 모델이 너무 단순해져서 데이터의 복잡한 패턴을 학습하지 못할 수도 있습니다. 큰 max_depth 값은 모델의 복잡도를 증가시켜 데이터의 세부적인 특성을 잘 학습할 수 있지만, 훈련 데이터에 과적합되거나 너무 복잡한 모델이 될 수 있습니다.

그러므로 max_depth는 의사결정나무 모델의 학습에 있어 중요한 하이퍼파라미터 중 하나이며, 데이터의 특성과 복잡성에 따라 조정하여 적절한 값을 선택하는 것이 중요합니다. 하이퍼파라미터 튜닝을 위해 max_depth를 그리드 서치(Grid Search)를 활용하여 탐색하면서 최적의 값이나 범위를 찾을 수 있습니다.

 

1-1) 과적합이란?

과적합(Overfitting)은 머신러닝 모델이 훈련 데이터에 너무 맞춰져서, 새로운 데이터나 테스트 데이터에서 성능이 저하되는 현상을 말합니다.

과적합은 모델이 훈련 데이터에 대해 지나치게 복잡한 패턴이나 잡음까지 학습하여, 훈련 데이터에 대한 예측은 정확하지만 실제 데이터에 대한 일반화(generalization) 능력이 떨어지는 문제를 일으킵니다. 즉, 모델은 훈련 데이터에 대해서는 너무 많은 세부사항까지 학습하여 훈련 데이터에 대한 예측은 거의 완벽하지만, 새로운 데이터에 대해서는 제대로 일반화하지 못하고 오차가 증가하는 현상이 나타납니다.

과적합이 발생할 수 있는 상황은 다음과 같습니다:

  1. 모델이 너무 복잡한 경우: 모델이 너무 많은 학습 파라미터를 가지고 있거나, 깊은 의사결정나무나 복잡한 신경망 등과 같이 복잡한 모델 구조를 사용하는 경우 과적합이 발생할 수 있습니다.
  2. 훈련 데이터가 적은 경우: 훈련 데이터가 적은 상황에서는 모델이 훈련 데이터에 과도하게 적합되기 쉽습니다. 모델은 훈련 데이터에 대한 잡음까지 학습할 수 있으며, 이는 새로운 데이터에 대한 일반화 능력을 저하시킵니다.
  3. 특성이 과도하게 많은 경우: 특성(변수)의 수가 많은 경우, 모델은 각 특성과 목표 변수 간의 잡음까지 학습할 수 있으며, 이로 인해 모델이 새로운 데이터에 대해 제대로 예측하지 못하는 경우가 발생할 수 있습니다.

과적합을 해결하기 위해서는 다음과 같은 방법들이 사용될 수 있습니다:

  • 더 많은 훈련 데이터 수집: 훈련 데이터를 더 많이 수집하면 모델이 일반화하는 데 도움이 될 수 있습니다.
  • 모델의 복잡도 제어: 모델의 복잡도를 낮추는 방법으로 모델의 매개변수 수를 줄이거나, 규제(regularization) 기법을 사용하여 모델을 단순화할 수 있습니다.
  • 특성 선택 또는 차원 축소: 중요한 특성들을 선택하거나, 차원 축소 기법을 사용하여 특성 공간을 축소하여 모델의 복잡도를 줄일 수 있습니다.
  • 교차 검증: 교차 검증을 통해 모델의 성능을 평가하고, 훈련 데이터와 검증 데이터를 적절히 나누어 과적합을 평가하고 제어할 수 있습니다.

과적합을 방지하고 일반화 성능을 향상시키기 위해서는 데이터의 특성, 모델의 구조, 하이퍼파라미터 등을 신중하게 선택하고 조정해야 합니다.

 

2. min_samples_split

min_samples_split은 의사결정나무(Decision Tree) 모델의 하이퍼파라미터 중 하나입니다. 이 매개변수는 노드를 분할하기 위해 필요한 최소한의 샘플 수를 지정하는 역할을 합니다.

의사결정나무는 트리 구조로 이루어져 있으며, 각 노드에서 데이터를 분할하여 하위 노드로 나누는 과정을 거칩니다. min_samples_split 매개변수는 이 분할 과정에서 고려해야 할 최소한의 샘플 수를 지정합니다. 즉, 노드를 분할하기 위해서는 해당 노드에 있는 샘플 수가 min_samples_split 값보다 크거나 같아야 합니다. 그렇지 않으면 분할이 중지되고 해당 노드는 종료됩니다.

min_samples_split를 지정하는 방식에 따라 다음과 같은 동작이 결정됩니다:

  • min_samples_split=int (정수 값): 노드를 분할하기 위해 필요한 최소한의 샘플 수를 지정합니다. 해당 노드의 샘플 수가 지정된 값보다 작을 경우 분할이 중지됩니다. 이를 통해 모델의 복잡도를 제어하고, 작은 노드의 생성을 방지하여 과적합을 줄일 수 있습니다.
  • min_samples_split=float (실수 값): 노드를 분할하기 위해 필요한 최소한의 샘플 수를 지정합니다. float 값은 전체 훈련 데이터에 대한 비율로 해석되며, 해당 노드의 샘플 수가 전체 훈련 데이터 개수의 비율보다 작을 경우 분할이 중지됩니다.

min_samples_split 매개변수는 의사결정나무 모델의 학습에 있어 중요한 역할을 합니다. 작은 min_samples_split 값은 모델을 단순화하여 과적합을 줄일 수 있지만, 너무 작게 설정하면 모델이 데이터의 작은 변동에도 민감해져서 모델의 안정성이 저하될 수 있습니다. 적절한 min_samples_split 값을 선택하여 모델의 성능과 일반화 능력을 균형있게 조절해야 합니다.

하이퍼파라미터 튜닝을 위해 min_samples_split를 그리드 서치(Grid Search)를 활용하여 탐색하면서 최적의 값이나 범위를 찾을 수 있습니다.

 

3. min_samples_leaf

min_samples_leaf는 의사결정나무(Decision Tree) 모델의 하이퍼파라미터 중 하나입니다. 이 매개변수는 각 리프(leaf) 노드에 필요한 최소한의 샘플 수를 지정하는 역할을 합니다.

의사결정나무는 트리 구조로 이루어져 있으며, 각 노드에서 데이터를 분할하여 하위 노드로 나누는 과정을 거칩니다. min_samples_leaf 매개변수는 리프 노드를 생성하기 위해 필요한 최소한의 샘플 수를 지정합니다. 즉, 리프 노드에 있는 샘플 수가 min_samples_leaf 값보다 크거나 같아야 합니다. 그렇지 않으면 분할이 중지되고 해당 노드는 종료됩니다.

min_samples_leaf를 지정하는 방식에 따라 다음과 같은 동작이 결정됩니다:

  • min_samples_leaf=int (정수 값): 리프 노드를 생성하기 위해 필요한 최소한의 샘플 수를 지정합니다. 해당 리프 노드의 샘플 수가 지정된 값보다 작을 경우 분할이 중지되고 해당 노드는 종료됩니다. 이를 통해 모델의 복잡도를 제어하고, 작은 리프 노드의 생성을 방지하여 과적합을 줄일 수 있습니다.
  • min_samples_leaf=float (실수 값): 리프 노드를 생성하기 위해 필요한 최소한의 샘플 수를 지정합니다. float 값은 전체 훈련 데이터에 대한 비율로 해석되며, 해당 리프 노드의 샘플 수가 전체 훈련 데이터 개수의 비율보다 작을 경우 분할이 중지되고 해당 노드는 종료됩니다.

min_samples_leaf 매개변수는 의사결정나무 모델의 학습에 있어 중요한 역할을 합니다. 작은 min_samples_leaf 값은 모델을 단순화하여 과적합을 줄일 수 있지만, 너무 작게 설정하면 모델이 데이터의 작은 변동에도 민감해져서 모델의 안정성이 저하될 수 있습니다. 적절한 min_samples_leaf 값을 선택하여 모델의 성능과 일반화 능력을 균형있게 조절해야 합니다.

하이퍼파라미터 튜닝을 위해 min_samples_leaf를 그리드 서치(Grid Search)를 활용하여 탐색하면서 최적의 값이나 범위를 찾을 수 있습니다.

 

4. ccp_alpha

ccp_alpha는 의사결정나무(Decision Tree) 모델의 Cost Complexity Pruning(CCP) 매개변수입니다. 이 매개변수는 의사결정나무의 가지치기(pruning)를 제어하는 데 사용됩니다.

의사결정나무는 트리 구조로 이루어져 있으며, 훈련 데이터에 과적합(overfitting)되는 경향이 있습니다. 과적합을 방지하고 모델의 일반화(generalization) 능력을 향상시키기 위해 가지치기(pruning) 기법을 사용합니다. 가지치기는 트리의 가지(branch)를 제거하여 모델의 복잡도를 낮추는 것을 의미합니다.

ccp_alpha는 가지치기에 사용되는 매개변수로, Cost Complexity Pruning에서의 비용 복잡도(cost complexity)를 조절합니다. Cost Complexity Pruning은 트리의 가지를 제거할 때 가지치기에 대한 비용과 모델의 복잡성에 대한 페널티를 고려하여 최적의 모델을 선택하는 방법입니다.

ccp_alpha를 지정하는 방식에 따라 다음과 같은 동작이 결정됩니다:

  • ccp_alpha=float (실수 값): 비용 복잡도의 페널티를 조절하는 매개변수입니다. 작은 ccp_alpha 값은 가지치기를 더 많이 수행하고 모델을 더 단순화시킵니다. 큰 ccp_alpha 값은 가지치기를 덜 수행하고 모델의 복잡성을 더 유지합니다. ccp_alpha 값이 0보다 크면 트리의 크기가 작아지고 모델이 단순화됩니다.

ccp_alpha 매개변수를 조정하여 모델의 복잡도와 일반화 능력 사이의 균형을 조절할 수 있습니다. 적절한 ccp_alpha 값을 선택하여 과적합을 줄이고 모델의 성능을 향상시킬 수 있습니다.

하이퍼파라미터 튜닝을 위해 ccp_alpha를 그리드 서치(Grid Search)를 활용하여 탐색하면서 최적의 값이나 범위를 찾을 수 있습니다.

 

5.  class_weight

class_weight는 분류(Classification) 모델의 하이퍼파라미터 중 하나입니다. 이 매개변수는 각 클래스의 상대적인 중요성을 조정하기 위해 사용됩니다.

분류 모델은 데이터셋에서 다양한 클래스를 분류하는 데 사용됩니다. 그러나 실제 데이터는 종종 클래스 간의 불균형(imbalanced)한 분포를 가질 수 있습니다. 예를 들어, 이상 거래 감지 모델에서 정상 거래는 많이 발생하지만 이상 거래는 드물게 발생할 수 있습니다. 이 경우, 모델이 정상 거래에 더 집중하여 이상 거래를 감지하지 못하는 문제가 발생할 수 있습니다.

class_weight 매개변수는 이러한 클래스 불균형을 처리하기 위해 사용됩니다. 각 클래스의 중요성을 조절하는 가중치를 할당하여 모델이 불균형한 클래스에 대해 더 잘 학습하도록 도와줍니다.

일반적으로 클래스 불균형이 있는 데이터셋에서는 더 작은 클래스에 더 큰 가중치를 부여하여 모델이 소수 클래스에 더 집중하도록 할 수 있습니다. 이렇게 함으로써 모델은 소수 클래스를 더 잘 학습하고, 분류 성능이 향상될 수 있습니다.

class_weight를 지정하는 방식은 모델에 따라 다를 수 있지만, 일반적으로 다음과 같이 사용됩니다:

  • class_weight=None (기본값): 클래스 간의 가중치를 동일하게 설정합니다. 클래스의 상대적인 중요성을 고려하지 않고, 모든 클래스를 동등하게 취급합니다.
  • class_weight='balanced': 클래스 빈도에 반비례하는 가중치를 자동으로 계산합니다. 클래스의 불균형을 고려하여 각 클래스의 샘플에 대한 가중치를 자동으로 조정합니다.
  • 사용자 정의 가중치: 개발자가 직접 클래스별 가중치를 지정할 수 있습니다. 이 경우, 클래스마다 원하는 가중치 값을 명시적으로 지정합니다.

class_weight를 적절하게 설정하면 클래스 불균형 문제를 해결하고 모델의 성능을 향상시킬 수 있습니다. 하지만 class_weight 매개변수는 데이터와 모델에 따라 적절한 값이 다를 수 있으므로, 최적의 가중치 설정을 찾기 위해 실험과 검증이 필요합니다.

==> LogisticRegression()에도 존재

 

6.  criterion

criterion은 의사결정나무(Decision Tree) 모델의 하이퍼파라미터 중 하나입니다. 이 매개변수는 노드를 분할할 때 사용할 분할 기준을 지정하는 역할을 합니다.

의사결정나무는 트리 구조로 이루어져 있으며, 각 노드에서 데이터를 분할하여 하위 노드로 나누는 과정을 거칩니다. criterion 매개변수는 이 분할 과정에서 사용되는 기준을 선택합니다.

criterion을 지정하는 방식에 따라 다음과 같은 분할 기준이 결정됩니다:

  • criterion='gini': 지니 불순도(Gini impurity)를 사용하여 분할 기준을 선택합니다. 지니 불순도는 각 노드에서의 클래스 분포의 불순도를 측정하는 지표로, 값이 작을수록 해당 노드의 순수도가 높아지는 방향으로 분할을 수행합니다. 기본값으로 많이 사용됩니다.
  • criterion='entropy': 엔트로피(Entropy)를 사용하여 분할 기준을 선택합니다. 엔트로피는 각 노드에서의 클래스 분포의 혼잡도를 측정하는 지표로, 값이 작을수록 해당 노드의 순수도가 높아지는 방향으로 분할을 수행합니다. 엔트로피 기준은 지니 불순도와 유사한 결과를 보이며, 두 가지 기준 중 하나를 선택하는 것은 주로 개인의 선호나 특정 문제에 따라 달라집니다.

criterion 매개변수는 모델의 분할 기준을 결정하는 중요한 역할을 합니다. 어떤 기준을 선택하느냐에 따라 생성되는 트리의 형태와 분류 결과가 달라질 수 있습니다. 일반적으로 기준을 선택하는 것은 문제의 성격과 데이터에 따라 달라집니다. 두 기준 모두 많이 사용되며, 어떤 기준이 더 우수한지는 특정 문제에 따라 다를 수 있습니다.

하이퍼파라미터 튜닝을 위해 criterion을 그리드 서치(Grid Search)를 활용하여 탐색하면서 최적의 기준을 선택할 수 있습니다.

 

6-1.  불순도와 순수도

  1. 불순도(Impurity): 불순도는 주어진 노드에서의 클래스 분포가 얼마나 혼잡한지를 측정하는 지표입니다. 불순도가 높을수록 클래스가 여러 개 섞여있어 분류하기 어렵고, 불확실성이 높다는 의미입니다.
  2. 순수도(Purity): 순수도는 주어진 노드에서의 클래스 분포가 얼마나 순수한지를 나타냅니다. 순수도가 높을수록 클래스가 하나로 구분되어 분류하기 쉬우며, 불확실성이 낮다는 의미입니다.

불순도와 순수도는 주로 분할 기준을 결정하는 데 사용됩니다. 의사결정나무는 데이터를 분할하여 불순도를 최소화하고 순수도를 최대화하는 방향으로 트리를 구성합니다. 분할 기준을 선택하는 방법은 criterion 매개변수에 의해 결정됩니다. 일반적으로 지니 불순도(Gini impurity)와 엔트로피(Entropy)가 주로 사용되며, 이 두 지표는 노드의 클래스 분포에 대한 불순도를 측정하는 방식으로 동작합니다.

불순도와 순수도는 모델이 데이터를 분할하고 결정을 내릴 때 중요한 개념이며, 모델이 불순도를 최소화하고 순수도를 최대화하는 방향으로 학습하게 됩니다. 따라서 불순도와 순수도는 모델의 성능과 트리의 구조에 영향을 미치는 중요한 요소입니다.

 

6-2.  클래스란?

클래스(Class)는 분류(Classification) 문제에서 예측하려는 대상 또는 목표 변수를 나타내는 범주(Category)입니다. 분류 모델은 입력 데이터를 기반으로 각각의 클래스로 샘플을 분류하거나, 주어진 입력에 대해 각 클래스에 속할 확률을 예측하는 작업을 수행합니다.

예를 들어, 이메일 스팸 분류 문제를 생각해보면, "스팸"과 "정상"의 두 가지 클래스가 있을 수 있습니다. 여기서 각 이메일은 "스팸" 클래스 또는 "정상" 클래스 중 하나에 속하게 됩니다. 분류 모델은 이메일의 특징이나 속성을 기반으로 이메일을 "스팸" 또는 "정상"으로 분류하거나, 각 클래스에 속할 확률을 예측하는 작업을 수행합니다.

또 다른 예로, 손글씨 숫자 인식 문제를 생각해보면, 클래스는 0부터 9까지의 숫자로 구성됩니다. 입력 데이터는 손으로 쓴 숫자 이미지이며, 분류 모델은 주어진 이미지가 어떤 숫자에 해당하는지 분류하는 작업을 수행합니다. 예를 들어, 주어진 이미지가 숫자 7에 해당한다고 분류할 수 있습니다.

분류 문제에서 클래스는 모델이 예측하려는 범주 또는 결과를 나타내며, 입력 데이터와 연관되어 있습니다. 모델은 입력 데이터의 특징을 기반으로 각 클래스에 대한 예측을 수행하고, 최적의 결정 경계를 찾아내어 새로운 입력 데이터에 대한 분류를 수행합니다.

 

7.  max_features

max_features는 의사결정나무(Decision Tree) 모델의 하이퍼파라미터 중 하나입니다. 이 매개변수는 분할할 때 사용할 특성(변수)의 최대 개수를 제한하는 역할을 합니다.

의사결정나무는 각 노드에서 데이터를 분할할 때, 최적의 분할을 위해 특성을 검사합니다. max_features 매개변수는 각 노드에서 고려할 수 있는 최대 특성의 개수를 지정합니다. 이를 통해 노드 분할 시 고려할 특성의 개수를 제한하여 모델의 복잡성을 조절할 수 있습니다.

max_features를 지정하는 방식에 따라 다음과 같은 동작이 결정됩니다:

  • max_features=None (기본값): 노드 분할 시 모든 특성을 고려합니다. 즉, 모든 특성을 사용하여 분할의 후보로 고려합니다.
  • max_features=int (정수 값): 분할 시 고려할 최대 특성의 개수를 정수로 지정합니다. 이 값을 설정하면 모델은 각 노드에서 해당 정수 값에 해당하는 개수만큼의 특성을 무작위로 선택하여 분할 후보로 고려합니다.
  • max_features=float (실수 값): 분할 시 고려할 최대 특성의 비율을 실수로 지정합니다. 이 값을 설정하면 모델은 각 노드에서 전체 특성 개수에 대한 비율에 해당하는 개수만큼의 특성을 무작위로 선택하여 분할 후보로 고려합니다.

max_features 매개변수를 사용하여 특성의 개수를 제한함으로써, 모델의 복잡성을 줄이고 계산 효율성을 향상시킬 수 있습니다. 특히 고차원 데이터의 경우, 모든 특성을 고려하는 것이 모델의 성능을 향상시키지 않을 수 있으므로 적절한 max_features 값을 선택하는 것이 중요합니다.

하이퍼파라미터 튜닝을 위해 max_features를 그리드 서치(Grid Search)를 활용하여 탐색하면서 최적의 값이나 범위를 찾을 수 있습니다.

 

7-1) 

max_features의 값으로 "auto", "sqrt", "log2"를 선택할 수 있습니다. 이들은 특정 방식으로 최대 특성의 개수를 결정하는 옵션입니다. 각각의 의미는 다음과 같습니다:

  1. "auto":
    • "auto" 옵션은 모델에 사용되는 특성의 개수를 자동으로 결정합니다.
    • 분류 문제의 경우, max_features 값은 입력 특성의 개수의 제곱근에 해당하는 값으로 설정됩니다.
    • 회귀 문제의 경우, max_features 값은 입력 특성의 1/3에 해당하는 값으로 설정됩니다.
  2. "sqrt":
    • "sqrt" 옵션은 max_features 값을 입력 특성의 개수의 제곱근으로 설정합니다.
    • 즉, 분류 문제와 회귀 문제 모두에서 max_features 값은 입력 특성의 개수의 제곱근에 해당하는 값으로 설정됩니다.
  3. "log2":
    • "log2" 옵션은 max_features 값을 입력 특성의 개수의 로그(밑이 2)로 설정합니다.
    • 분류 문제와 회귀 문제 모두에서 max_features 값은 입력 특성의 개수의 로그(밑이 2)에 해당하는 값으로 설정됩니다.

이러한 옵션들은 모델의 복잡성을 제어하는 데 도움을 줄 수 있습니다. 특히 고차원 데이터셋이나 특성의 개수가 매우 많은 경우에는 일부 특성만 고려하는 것이 모델의 성능을 향상시킬 수 있습니다.

일반적으로 "auto" 옵션이 기본값으로 사용되며, 데이터셋과 문제의 특성에 따라 다른 옵션들을 고려하여 최적의 값을 선택할 수 있습니다.

 

 

 

8. max_leaf_nodes

max_leaf_nodes는 의사결정나무(Decision Tree) 모델의 하이퍼파라미터 중 하나입니다. 이 매개변수는 생성될 수 있는 리프(leaf) 노드의 최대 개수를 제한하는 역할을 합니다.

의사결정나무는 트리 구조로 이루어져 있으며, 각 노드에서 데이터를 분할하여 하위 노드로 나누는 과정을 거칩니다. max_leaf_nodes 매개변수는 생성될 수 있는 리프 노드의 최대 개수를 지정합니다. 이를 통해 모델의 복잡성을 조절하고, 생성되는 트리의 크기를 제한할 수 있습니다.

max_leaf_nodes를 지정하는 방식에 따라 다음과 같은 동작이 결정됩니다:

  • max_leaf_nodes=None (기본값): 리프 노드의 최대 개수를 제한하지 않습니다. 모든 가능한 리프 노드를 생성합니다.
  • max_leaf_nodes=int (정수 값): 생성될 수 있는 최대 리프 노드의 개수를 정수로 지정합니다. 이 값보다 많은 리프 노드가 생성될 수 없습니다.

max_leaf_nodes 매개변수를 사용하여 리프 노드의 개수를 제한함으로써, 모델의 복잡성을 조절하고 일반화 능력을 향상시킬 수 있습니다. 적절한 max_leaf_nodes 값을 선택하여 모델의 성능과 일반화 능력을 균형있게 조절해야 합니다.

하이퍼파라미터 튜닝을 위해 max_leaf_nodes를 그리드 서치(Grid Search)를 활용하여 탐색하면서 최적의 값이나 범위를 찾을 수 있습니다.

 

8-1). min_samples_leaf 와  max_leaf_nodes의 차이

min_samples_leaf와 max_leaf_nodes는 의사결정나무 모델의 하이퍼파라미터로, 모델의 복잡도를 제어하고 과적합을 방지하기 위해 사용되는 비슷한 개념입니다. 그러나 두 매개변수는 약간 다른 관점에서 모델의 제한을 조절합니다.

  1. min_samples_leaf:
    • min_samples_leaf는 리프 노드에 필요한 최소한의 샘플 수를 지정합니다. 즉, 리프 노드에 있는 샘플 수가 min_samples_leaf 값보다 작을 경우 분할이 중지되고 해당 노드는 종료됩니다. 이를 통해 모델의 복잡도를 제어하고 작은 리프 노드의 생성을 방지하여 과적합을 줄일 수 있습니다.
  2. max_leaf_nodes:
    • max_leaf_nodes는 생성될 수 있는 리프 노드의 최대 개수를 제한합니다. 모델은 가능한 리프 노드 개수를 제한하여 트리의 크기를 조절하고 모델의 복잡성을 제어할 수 있습니다. 이를 통해 모델이 데이터에 과도하게 맞추어지는 것을 방지하고 일반화 능력을 향상시킬 수 있습니다.

두 매개변수는 모델의 복잡도를 제한하여 과적합을 방지하고 일반화 능력을 향상시키는 목적을 가지고 있습니다. 그러나 제한되는 관점이 다릅니다. min_samples_leaf는 리프 노드의 샘플 수를 제한함으로써 작은 리프 노드의 생성을 방지합니다. 반면에, max_leaf_nodes는 생성되는 리프 노드의 최대 개수를 제한하여 트리의 크기를 제어합니다.

일반적으로 두 매개변수를 함께 사용하여 모델을 조정하는 것이 일반화 성능을 향상시키는 데 도움이 될 수 있습니다. 적절한 값을 선택하거나 그리드 서치(Grid Search)를 사용하여 최적의 매개변수 조합을 찾는 것이 중요합니다.

==> min_samples_leaf : 샘플수(인스턴스) 들에 대한 최소값 지정

==> max_leaf_nodes : 노드 자체의 갯수 지정

 

9. max_inpurity_decrease

max_impurity_decrease는 의사결정나무(Decision Tree) 모델의 하이퍼파라미터 중 하나입니다. 이 매개변수는 분할할 때의 불순도 감소의 최소값을 지정하는 역할을 합니다.

의사결정나무는 트리 구조로 이루어져 있으며, 각 노드에서 데이터를 분할하여 하위 노드로 나누는 과정을 거칩니다. max_impurity_decrease 매개변수는 불순도 감소의 최소값을 지정하여 분할의 유의성을 조절합니다.

분할 시 불순도 감소는 현재 노드와 하위 노드 간의 불순도 차이로 측정됩니다. max_impurity_decrease 값이 지정되면, 해당 값보다 작은 불순도 감소를 가지는 분할은 수행되지 않고 중지됩니다. 이를 통해 모델의 복잡도를 조절하고, 작은 불순도 감소를 가지는 무의미한 분할을 방지할 수 있습니다.

max_impurity_decrease를 지정하는 방식에 따라 다음과 같은 동작이 결정됩니다:

  • max_impurity_decrease=0.0 (기본값): 불순도 감소를 고려하지 않고, 모든 가능한 분할을 수행합니다.
  • max_impurity_decrease=float (실수 값): 분할할 때의 불순도 감소 값의 최소 임계값을 지정합니다. 이 값보다 작은 불순도 감소를 가지는 분할은 수행되지 않습니다.

max_impurity_decrease 매개변수를 사용하여 불순도 감소의 최소값을 지정함으로써, 모델의 복잡성을 조절하고 무의미한 분할을 방지할 수 있습니다. 적절한 max_impurity_decrease 값을 선택하여 모델의 성능과 일반화 능력을 균형있게 조절해야 합니다.

하이퍼파라미터 튜닝을 위해 max_impurity_decrease를 그리드 서치(Grid Search)를 활용하여 탐색하면서 최적의 값이나 범위를 찾을 수 있습니다.

==> 불순도 ==> 6번 참고

 

10. min_weight_fraction_leaf

min_weight_fraction_leaf는 의사결정나무(Decision Tree) 모델의 하이퍼파라미터 중 하나입니다. 이 매개변수는 리프 노드가 될 수 있는 최소 가중치 비율을 지정하는 역할을 합니다.

각 데이터 포인트에는 가중치(weight)가 할당될 수 있습니다. min_weight_fraction_leaf 매개변수는 리프 노드의 가중치 합이 전체 가중치 합에 대한 최소 비율을 지정합니다. 이 비율보다 작은 리프 노드의 가중치 합을 가지는 분할은 중지되고, 해당 노드는 종료됩니다. 이를 통해 모델의 복잡성을 조절하고 작은 가중치를 가지는 리프 노드의 생성을 방지할 수 있습니다.

min_weight_fraction_leaf를 지정하는 방식에 따라 다음과 같은 동작이 결정됩니다:

  • min_weight_fraction_leaf=0.0 (기본값): 가중치를 고려하지 않고, 모든 가능한 분할을 수행합니다.
  • min_weight_fraction_leaf=float (0.0에서 0.5 사이의 실수 값): 리프 노드의 가중치 합의 최소 비율을 지정합니다. 이 비율보다 작은 가중치 합을 가지는 리프 노드의 분할은 수행되지 않습니다.

min_weight_fraction_leaf 매개변수를 사용하여 리프 노드의 가중치 합의 최소 비율을 지정함으로써, 모델의 복잡성을 제어하고 작은 가중치를 가진 리프 노드의 생성을 방지할 수 있습니다. 적절한 min_weight_fraction_leaf 값을 선택하여 모델의 성능과 일반화 능력을 균형있게 조절해야 합니다.

하이퍼파라미터 튜닝을 위해 min_weight_fraction_leaf를 그리드 서치(Grid Search)를 활용하여 탐색하면서 최적의 값이나 범위를 찾을 수 있습니다.

 

11. random_state

random_state는 머신러닝 모델에서 난수 생성에 사용되는 시드(seed) 값입니다. 시드 값은 랜덤한 요소들을 생성하는 알고리즘에 대한 초기화 값으로, 동일한 시드 값을 사용하면 동일한 난수 시퀀스가 생성됩니다.

random_state 매개변수의 값에 따라 다음과 같은 동작이 결정됩니다:

  1. random_state=None 또는 기본값: 이 경우, 모델은 내부적으로 시스템 시간 또는 다른 무작위 요소를 기반으로 난수를 생성합니다. 따라서 동일한 모델을 여러 번 실행할 때마다 다른 결과가 생성됩니다.
  2. random_state=정수값: 이 경우, 동일한 정수값을 사용하여 난수 생성을 초기화합니다. 동일한 random_state 값을 사용하면 항상 동일한 결과를 얻을 수 있습니다. 이는 모델을 재현하고 결과를 일관성 있게 유지하는 데 유용합니다.

random_state를 고정하는 것은 모델을 재현하고 실험의 일관성을 유지하는 데 도움이 됩니다. 예를 들어, 동일한 random_state 값을 사용하면 데이터를 동일한 방식으로 분할하거나 초기화하여 모델의 학습과 예측 결과를 일관성 있게 유지할 수 있습니다. 또한, 모델을 비교하거나 튜닝할 때 다른 하이퍼파라미터만 변경하고 random_state를 동일하게 유지하여 공정한 비교를 수행할 수 있습니다.

단, 주의할 점은 random_state 값이 다른 경우에도 모델의 결과는 일반적으로 유사하고 안정적일 수 있으며, 모델의 성능에 큰 영향을 미치지 않을 수 있습니다. 따라서 random_state 값을 변경하면서 모델의 성능과 일관성을 확인하는 것이 좋습니다.

 

12. splitter

splitter는 의사결정나무(Decision Tree) 모델의 하이퍼파라미터 중 하나입니다. 이 매개변수는 데이터를 분할할 때 사용할 분할 기준을 선택하는 방법을 지정합니다.

의사결정나무에서는 노드를 분할할 때 특성(변수)과 그 값에 기반하여 분할 기준을 결정합니다. splitter 매개변수는 이러한 분할 기준을 어떻게 선택할지를 지정합니다.

splitter를 지정하는 방식에는 다음 두 가지 옵션이 있습니다:

  1. splitter="best": 이 옵션은 최적의 분할 기준을 선택합니다. 모델은 노드를 분할할 때 최적의 특성과 분할 기준 값을 선택하여 불순도를 최소화하거나 정보 이득을 최대화합니다. 이는 일반적으로 더 정교한 모델을 생성하지만, 계산 비용이 더 많이 소요될 수 있습니다.
  2. splitter="random": 이 옵션은 무작위로 분할 기준을 선택합니다. 모델은 노드를 분할할 때 특성 중에서 무작위로 하나를 선택하고, 해당 특성의 임의의 분할 기준 값을 선택하여 분할을 수행합니다. 이는 계산 비용을 줄이는 대신 모델의 정확도를 약간 희생할 수 있습니다. 이 방식은 특히 데이터가 매우 크거나 노이즈가 많을 때 유용할 수 있습니다.

splitter 매개변수를 사용하여 분할 기준을 선택하는 방법을 지정함으로써 모델의 동작을 제어할 수 있습니다. "best" 옵션은 보다 정교한 모델을 생성할 수 있지만 계산 비용이 많이 들 수 있습니다. "random" 옵션은 계산 비용을 줄이면서 모델의 훈련 속도를 높일 수 있습니다.

일반적으로 데이터가 작고 균형 잡힌 경우에는 "best" 옵션을 사용하는 것이 좋습니다. 데이터가 매우 크거나 노이즈가 많을 경우에는 "random" 옵션을 고려해 볼 수 있습니다.

하이퍼파라미터 튜닝을 위해 splitter를 그리드 서치(Grid Search)를 활용하여 탐색하면서 최적의 값이나 범위를 찾을 수 있습니다.

==> 보통 ['max_depth' , 'min_samples_split' , 'min_samples_leaf' , 'max_features' , 'criterion'] 을 주로 쓴다!

728x90
반응형

+ Recent posts