본문 바로가기
AI/머신러닝

[AI 부트캠프] DAY 52 - 머신러닝 7

by HOHHOH 2023. 9. 28.

[오늘의 일지]

머신러닝 실시간 강의 - 데이터 분석 문제 정의 (회귀 실습 마무리, 분류(Classification))

[상세 내용]

데이터 분석 문제 정의

회귀 실습 마무리 (test 데이터 가공해서 lreg.predict로 출력하기)

 

## test 데이터를 x_test로 가공해서 lreg.predict(X_test)가 에러가 나지 않고 출력이 되게끔 만들기
# 1. is_Cabin
# 2. FamilySize
# 3. column drop
# 4. age column 채우기
# 5. dropna ?!
# 6. Sex -> Ordinal, Embarked -> One-Hot
# test.info()
x_test = test.copy() # deep copy
x_test['is_Cabin'] = x_test.Cabin.notnull()*1 # 1. is_Cabin
x_test['Familysize'] = x_test["SibSp"] + x_test["Parch"] # 2. FamilySize
x_test = x_test.drop(columns=drop_cols) # 3. column drop
x_test['Age'] = x_test['Age'].fillna(x_train.Age.median()) # 4. age column 채우기
x_test['Fare'] = x_test['Fare'].fillna(x_train.Fare.median()) # fare column 채우기
x_test['Sex'] = pd.factorize(x_test["Sex"], sort=True)[0] 
x_test = pd.get_dummies(data=x_test, columns = ["Embarked"]) # 6. Sex -> Ordinal, Embarked -> One-Hot

# lreg.predict로 출력 후 csv 파일로 생성 
output = lreg.predict(x_test)
submission['Survived'] = output
submission.to_csv('submission.csv', index=False)

 

- Train-test contamination(= data leakage) : 머신 러닝에서 모델을 훈련하고 평가할 때 발생할 수 있는 문제 중 하나입니다. 이 문제는 훈련 데이터셋(train dataset)을 구축하거나 모델을 평가할 때 테스트 데이터셋(test dataset)의 정보가 훈련 데이터에 노출되는 상황을 나타냅니다. 즉 쉽게 말하자면 훈련 데이터셋에 테스트 데이터셋을 포함시켜서 훈련을 진행하는 상황을 말합니다. 이로 인해 모델의 성능 평가가 과장되거나 왜곡되어 정확한 모델 평가가 어렵게 됩니다.

 

분류(Classification)

- 분류(Classification)는 데이터를 여러 범주 또는 클래스 중 하나로 분류하는 작업을 나타냅니다. 이 작업은 주어진 데이터를 그룹화하고 정리하여 각 데이터 포인트가 어떤 범주 또는 클래스에 속하는지 결정하는 것입니다.

 

분류의 직관적인 의미

- 주어진 데이터(X)를 원하는 분류 기준(y)대로 나누는 방법

- 주어진 데이터(X)를 원하는 분류 기준(y = label)을 붙이는 방법

- 비슷한 특징을 가지는 데이터들을 같은 분류로 나누는 방법

 

Linear Classifier

- 가장 직관적이고 간단한 선형 분류 모델입니다. 

  • 선형 분류기는 입력 특성들의 가중치(weights)와 편향(bias)을 조합한 선형 결합을 사용하여 클래스를 예측합니다. 선형 분류기는 입력 특성들의 가중치(weights)와 편향(bias)을 조합한 선형 결합을 사용하여 클래스를 예측합니다. 일반적으로 선형 결합은 다음과 같이 표현됩니다. f: 여기서 f는 선형 결합의 결과이며, w1, w2,... , wn은 각 특성의 가중치, x1, x2,... , xn은 입력 특성, b는 편향을 나타냅니다.
  • 선형 분류기는 선형 결합의 결과를 기반으로 클래스를 결정합니다. 일반적으로 $z$ 값이 양수인 경우 하나의 클래스로 분류하고, 음수인 경우 다른 클래스로 분류합니다. 이렇게 결정 경계를 사용하여 데이터를 분류하는 것을 이진 분류의 경우 "이진 결정"이라고 합니다.
  • 선형 분류기의 가중치($w$)와 편향($b$)은 학습 데이터를 사용하여 최적화됩니다. 학습 데이터에 대한 손실 함수를 최소화하도록 가중치와 편향이 조정되며, 주로 그라디언트 디센트와 같은 최적화 알고리즘을 사용합니다.
  • 선형 분류기의 학습에는 손실 함수가 사용됩니다. 이 손실 함수는 모델의 예측과 실제 레이블 간의 차이를 측정하며, 주로 로지스틱 손실(Logistic Loss) 또는 힌지 손실(Hinge Loss)과 같은 손실 함수가 사용됩니다.

출처:https://linguisticmaz.medium.com/support-vector-machines-explained-8804cac06883

 

Multi Class Classification(one-vs-all)

출처:https://towardsdatascience.com/multi-class-classification-one-vs-all-one-vs-one-94daed32a87b

 

Support Vector Machine(SVM)

Support Vector Machine(SVM)은 머신 러닝에서 사용되는 강력한 분류 및 회귀 모델 중 하나로, 주로 분류 작업에 사용됩니다. SVM은 데이터를 분류하는 데 특히 효과적이며, 특징적으로 마진(margin) 최대화와 서포트 벡터(support vector)를 활용합니다.

  •  SVM은 클래스 간의 결정 경계를 정의할 때, 가능한 한 넓은 마진(데이터 포인트와 결정 경계 사이의 거리)을 가지도록 합니다. 이러한 마진 최대화는 모델의 일반화(generalization) 능력을 향상시키는 데 도움이 됩니다.
  • SVM의 이름에서 나오는 "서포트 벡터"는 결정 경계와 가장 가까운 데이터 포인트들을 가리킵니다. 이들은 마진을 결정하는 데 중요한 역할을 하며, SVM 모델을 학습할 때 주요한 데이터 포인트로 사용됩니다.
  • SVM은 비선형 문제도 다룰 수 있도록 커널 함수(kernel function)를 활용합니다. 커널 함수는 데이터를 고차원 특징 공간으로 매핑하여 비선형 데이터 분포를 선형 분류로 해결하는 데 도움을 줍니다. 일반적으로 사용되는 커널 함수로는 다항식 커널, 가우시안 라디언스 베이스 함수(RBF) 커널 등이 있습니다.
  • SVM은 학습 단계에서 학습 데이터를 이용하여 서포트 벡터와 결정 경계를 찾습니다. 그리고 이를 사용하여 새로운 데이터 포인트를 분류합니다. 새로운 데이터가 결정 경계를 기준으로 어느 클래스에 속하는지를 결정하는 데 사용됩니다.
  • SVM에서는 손실 함수에 대한 규제를 조절하기 위한 매개변수 C가 존재합니다. C가 큰 경우 모델은 학습 데이터에 더 맞추려 하며, C가 작은 경우 모델은 마진을 최대화하려고 노력합니다. 이 C 매개변수를 조정하여 모델의 편향(bias)과 분산(variance) 사이의 균형을 조절할 수 있습니다.

출처:https://www.javatpoint.com/machine-learning-support-vector-machine-algorithm

 

Linear vs Non-Linear 

출처:https://linguisticmaz.medium.com/support-vector-machines-explained-8804cac06883

 

Decision Tree

- 결정 트리(Decision Tree)는 데이터를 분류(Classification) 또는 회귀(Regression) 하기 위한 머신 러닝 알고리즘 중 하나입니다. 결정 트리는 데이터로부터 질문을 반복적으로 던져 나가면서, 데이터를 분류하거나 값을 예측하는 모델을 구축합니다. 이러한 질문과 분기점을 나타내는 트리 구조를 사용하여 데이터를 분류하며, 각 분기점마다 어떤 특성(feature)을 기준으로 분기를 결정하는지에 따라 트리가 형성됩니다.

 

Decision Tree 주요 용어

  • 루트 노드 (Root Node) : 결정 트리의 시작점인 노드입니다. 모든 결정 트리는 루트 노드에서 시작합니다.
  • 내부 노드 (Internal Node) : 루트 노드를 제외한 모든 노드 중에서, 다른 노드로의 분기점 역할을 하는 노드를 내부 노드라고 합니다.
  • 리프 노드 (Leaf Node 또는 Terminal Node) : 더 이상의 분기를 하지 않는 노드로, 최종적인 예측 또는 분류 결과가 출력됩니다.
  • 분기 (Split) : 노드에서 데이터를 분류하거나 분리하는 과정을 의미합니다. 특정 조건을 기준으로 데이터를 왼쪽 또는 오른쪽 하위 노드로 나눕니다.
  • 규칙 또는 조건 (Rule or Condition) : 노드에서 데이터를 분류하기 위한 질문 또는 조건입니다. 예를 들어, "키가 160cm 이상인가?"와 같은 질문이 규칙이 될 수 있습니다.
  • 가지치기 (Pruning) : 결정 트리는 학습 데이터에 과적합되기 쉽기 때문에, 가지치기라는 과정을 통해 불필요한 분기를 제거하거나 트리의 깊이를 제한하여 모델을 일반화시킵니다.
  • 엔트로피 (Entropy) : 노드의 불순도를 측정하는 또 다른 지표로, 엔트로피가 낮을수록 노드가 순수합니다.

 

지니 불순도 (Gini Impurity)

- 분류 문제에서 사용되는 지니 불순도는 노드의 불순도(impurity)를 측정하는 지표로, 낮을수록 노드가 순수하다는 것을 나타냅니다.

 

Numeric Features

  • Simple approach (Naive) : 가능한 모든 경계에 대해서 데이터를 나누고 지니 인덱스를 계산한다. 그때 가장 작은 지니 인덱스를 가진 경계를 best spit point로 한다.
  • Heuristic approach : Heuristic은 문제가 너무 복잡하여 최적해를 계산하기 어려운 경우 또는 계산 비용이 높을 때 유용합니다. target value의 class가 바뀌는 부분만 계산한다.
  • Quartile approach : Quartile(사분위수) 접근 방식은 데이터의 분포를 나타내는 사분위수를 기반으로 분석을 수행하는 방법입니다. 데이터를 정렬하고, 주로 데이터의 중간값(median)을 중심으로 1 사분위수(25th percentile)와 3 사분위수(75th percentile)를 계산하여 데이터의 분포를 이해하거나 이상치(outlier)를 탐지하는 데 사용됩니다.

 

SSR(Sum of Squared Residual)

- SSR은 회귀 모델의 오차(잔차)를 제곱한 값들을 모두 합산한 것으로, 모델이 데이터 포인트와 얼마나 멀리 떨어져 있는지를 측정합니다. 회귀 모델을 학습할 때 목표는 SSR을 최소화하는 회귀 계수를 찾는 것이며, 이를 통해 주어진 데이터에 가장 잘 적합된 모델을 찾을 수 있습니다. SSR은 회귀 분석에서 중요한 지표 중 하나로, 다른 지표와 함께 모델의 성능을 평가하고 비교하는 데 사용됩니다. 회귀 모델이 데이터에 얼마나 적합한지를 측정하는데 도움을 주며, 최소 제곱법(Least Squares) 회귀 분석에서 사용되는 주요 지표 중 하나입니다.

 

CART (Classification and Regression Trees)

- 분류 및 회귀 트리를 구축하는 알고리즘입니다. CART는 지니 불순도를 기반으로 트리를 분할하는 방식을 사용합니다.

- 과적합 문제 : CART는 기본적으로 훈련 데이터에 완벽하게 적합하도록 트리를 성장시키는 경향이 있습니다. 이것은 트리가 훈련 데이터의 작은 노이즈까지도 모두 학습하려고 하기 때문에 복잡한 트리가 생성될 수 있습니다.

출처:https://www.datacamp.com/tutorial/decision-trees-R

 

Random Forest

- Bagging + Random subspace method

 

Bagging (Bootstrap Aggregating)

  • Bagging은 데이터의 부트스트랩 샘플링(Bootstrap Sampling)을 통해 다수의 훈련 데이터셋을 생성하고, 각 데이터셋에 대해 독립적으로 모델(예: 결정 트리)을 학습합니다.
  • 각 모델은 별도의 훈련 데이터를 가지며, 병렬로 학습됩니다.
  • 최종 예측은 모든 모델의 예측을 조합한 결과로 구성됩니다. 일반적으로 분류 문제에서는 다수결 투표, 회귀 문제에서는 평균을 사용합니다.
  • Bagging은 모델의 분산을 줄이고 안정적인 예측을 제공하며, 과적합을 감소시킵니다.

 

Random Subspace Method (Feature Bagging)

  • Random Subspace Method는 Bagging의 한 변형으로, 데이터의 일부 특성(변수)만을 선택하여 각 모델을 학습합니다.
  • 각 모델은 무작위로 선택된 특성 집합을 사용하여 학습하므로 서로 다른 특성을 고려합니다.
  • 이는 모델 간의 다양성을 높이고, 모든 특성을 고려한 전체 모델보다 일반화 능력을 향상시킬 수 있습니다.

출처:https://www.tibco.com/reference-center/what-is-a-random-forest

 

Sklearn API param 정리 (N<1000)

CART 관련 파라미터

max_depth (트리의 최대 깊이)

- 결정 트리의 최대 깊이를 제한하는 파라미터입니다. (3~10)

- 더 깊은 트리는 더 복잡한 모델을 생성하지만, 과적합의 위험이 있으므로 이 값을 설정하여 트리의 깊이를 제한할 수 있습니다.

max_features (노드 분할에 사용할 최대 특성 수)

- 각 노드에서 분할에 사용할 최대 특성 수를 제한하는 파라미터입니다. (0.5~0.8)

- 작은 값으로 설정하면 무작위성이 증가하고 모델의 다양성이 높아질 수 있습니다.

criterion (분할 기준)

- 노드를 분할할 때 사용할 기준을 선택하는 파라미터입니다.

- node split의 기준으로 squared_error, absolute_error

min_samples_split (노드를 분할하기 위한 최소 샘플 수)

- 노드를 분할하기 위해 필요한 최소 샘플 수를 지정하는 파라미터입니다. (2~50)

- 이 값을 높게 설정하면 더 일반화된 트리가 생성됩니다.

min_samples_leaf 

- leaf node가 가져야 하는 최소 샘플수 (1~20)

 

Tree Ensemble 관련 파라미터

n_estimators (트리의 개수)

- Tree Ensemble 모델에서 사용할 결정 트리의 개수를 지정하는 파라미터입니다.

- 높은 값으로 설정하면 모델의 성능이 향상될 수 있지만 계산 비용이 증가합니다.

random_state (랜덤 시드)

- 알고리즘 내에서 발생하는 무작위성을 제어하는 시드(seed) 값입니다. (보통 아무의미 없는 수지만 42)

- 동일한 random_state로 모델을 학습할 경우, 같은 결과를 얻을 수 있습니다.

n_jobs (병렬 처리 수)

- 결정 트리 학습 과정을 병렬로 처리할 CPU 코어 수를 지정하는 파라미터입니다.

- 높은 값을 지정하면 학습 속도가 향상됩니다. (-1로 설정하면 가능한 모든 CPU 코어를 사용)

 

[마무리]

 오늘은 머신러닝 과정 중 분류 파트에 대해서 공부를 했습니다. 분류라는 것이 보통은 범주화를 해주는 것인데 머신러닝을 통해서 배우니까 이 또한 특정 데이터를 분류 학습을 시켜 모델을 완성해서 테스트 과정을 거치는 것은 어느 정도 비슷한 맥락을 가졌다는 것을 알게 되었습니다. 분류도 실습을 통해서 여러 가지 라이브러리를 사용해 보면 좋을 것 같다는 생각이 들었습니다. 이번에 추석 연휴에 시간이 많으니까 한번 해봐야 될 거 같습니다.

반응형

댓글