지금은마라톤중

멋사 AI스쿨 TIL - (20) 본문

멋쟁이사자처럼/Python

멋사 AI스쿨 TIL - (20)

달리는중 2023. 3. 15. 17:08

2023.03.13

 

● underfitting과 overfitting

언더피팅(underfitting) 은 모델이 학습 오류를 줄이지 못하는 상황을 의미하고,

오버피팅(overfitting)은 모델 학습 오류가 테스트 데이터의 오류보다 훨씬 작은 경우를 의미

 

질문🙋🏻‍♂️ : 가끔 학습 모델을 만들었는데 99% 의 정확도가 나오는 경우가 있습니다. 실수 때문이라면 어떤 실수 때문에 이렇게 정확도가 높게 나올까요?
정답을 학습데이터에 포함시키면 제대로 학습하기 어렵습니다. 이럴 때 정확도가 100%가깝게 나오게 됩니다

 

 

 Data Leakage(데이터 누수, 정보 누설)란?

미래에 대한 전혀 알 수 없는 대한 정보가 모델 학습에서 사용된 경우를 말합니다.

즉 test 데이터가 모델의 학습에 이용된 경우입니다. 이번 '스마트 공장 제품 품질 상태 분류 AI 온라인 해커톤'의 데이터의 경우, Train 데이터의 경우 약 22년 6월 13일 ~ 22년 9월 8일까지의 데이터로 구성되어 있고, Test 데이터는 약 22년 9월 9일 ~ 22년 11월 5일까지의 데이터로 구성되어 있습니다.

해커톤(경진대회) 특성 상, 리더보드 제출을 위해 추론에 사용될 test 데이터들이 사전에 주어지지만, 실제 모델을 서비스하는 환경에서는 test 데이터들이 어떠한 데이터들이 몇개가 입력으로 들어올 지 전혀 알 수 없습니다

 

 

 One Hot Encoding 이란?

- 사람이 이해할 수 있는 데이터를 컴퓨터도 이해시킬 수 있도록 숫자 데이터로 바꿔주는 것을 의미한다.

- 머신러닝에서 분류 모델을 다루거나, 데이터 분석에서 범주형 데이터 혹은 카테고리컬한 문제를 만난다면, 우리는 데이터를 컴퓨터가 인식할 수 있도록 변형해줘야 한다.

- 이 과정을 거치면 데이터 형태는 0과 1로 이루어졌기 때문에 컴퓨터가 인식하고 학습하기에 용이하다.

- pd.get_dummies()를 통해 실행

 

● One Hot Encoding의 개념

매우 기초적이면서도 아주 흔하게 사용되는 피쳐 엔지니어링 기법

딥러닝, 자연어처리, 데이터 마이닝 등 많은 분야에서 사용되고 있다.

데이터를 수많은 0(False)과 하나의 1(True)로 데이터를 구별한다.

One-Hot Encoding은 One-Out-of-N Encoding이라고도 하고, 가변수라고도 하며, 범주형 변수를 이진 벡터로 표시한다

 

 

 

- 원핫인코딩을 할 때 결측치는 고려하지 않습니다.

결측치를 원핫인코딩에 반영하고자 한다면 문자 데이터로 "NA" 혹은 "없음" 등으로 값을 만들어주어야 반영이 됩니다

결측치를 채우는 방법도 있지만 결측치가 너무 많은데 해당 변수를 사용하고자 할 때는? 범주화 해서 사용하는 방법이 있다고 EDA 수업할 때 얘기한 적이 있었습니다

요금을 높음, 중간, 낮음 등으로 qcut, cut 으로 범주화 => 원핫인코딩 하면 결측치를 채우지 않고 기존 값만 활용할 수 있습니다

 

예를 들어 사용기간(Tenure) 는 약정 기간별로 해지가 주로 되는 기간을 나눠서 구간화 하는 것도 방법입니다

 

 

 One Hot Encoding의 장단점(Chat GPT 답변)

장점:

  1. 범주형 데이터를 수치형 데이터로 변환하므로, 모델 학습에 용이합니다.
  2. 각 범주는 고유한 이진 배열로 변환되기 때문에, 범주 간의 상대적인 순서나 거리 개념이 없는 비교적 단순한 데이터로 처리됩니다.
  3. 범주가 명확하게 정의되어 있어서, 모델이 정확하게 예측할 수 있습니다.

단점:

  1. 범주가 많은 경우, 벡터 차원이 매우 커지며 희소(sparse)한 벡터가 생성됩니다. 이는 메 모리 사용량과 연산 속도를 늘리는 원인이 됩니다.
  2. 범주형 데이터에 순서가 있는 경우, 이 정보가 유실됩니다. 예를 들어, '낮음, '보통, '높 음과 같이 순서가 있는 범주를 One-hot encoding하면, 순서 정보가 사라지고 범주 간의 동등한 거리 개념으로 처리됩니다.
  3. One-hot encoding은 범주형 데이터의 정보를 대부분의 경우 더 큰 차원으로 확장시킵 니다. 따라서, 데이터 차원이 매우 크고, 데이터가 희소한 경우에는 다른 방식으로 데이 터를 인코딩하는 것이 더 효율적일 수 있습니다.

따라서, One-hot encoding은 일반적으로 범주형 데이터를 수치형 데이터로 변환할 때 많이 사용되지만, 범주의 개수와 데이터의 특성에 따라 다른 방식의 인코딩이 더 적합할 수 있습 니다.

 

● 희소행렬이란?

희소 행렬(Sparse Matrix)은 행렬의 원소 중에 많은 항들이 '0'으로 구성되어 있는 행렬이다. 희소 행렬의 대부분의 항은 '0'으로 이루어져 있어, 실제 사용하지 않는 메모리 공간으로 인해 메모리 낭비가 발생하게 된다.\

 

 

train, test의 피처를 동일하게 만들어주어야 학습과 예측을 할 때 오류가 생기지 않음

train, test를 따로 인코딩하면 컬럼 순서나 개수가 달라질 수 있다.

다른 피처를 사용하면 학습했을 때 오류가 발생!! -> train으로 맞춰주는 작업 필요

scikit-learn에서 fit, transform을 할 때 trian에만 fit을 해주는 이유와도 같음

 

 

● stratify
stratify 파라미터는 분류 문제를 다룰 때 매우 중요하게 활용되는 파라미터 값 입니다.
stratify 값으로는 target 값을 지정해주면 됩니다. stratify값을 target 값으로 지정해주면 target의 class 비율을 유지 한 채로 데이터 셋을 split 하게 됩니다. 만약 이 옵션을 지정해주지 않고 classification 문제를 다룬다면, 성능의 차이가 많이 날 수 있습니다.

 

 

 의사결정나무 (회귀)

- 결정 트리 중 목표 변수가 연속하는 값, 일반적으로 실수를 가지는 경우 회귀 트리라 한다.

 

 의사결정나무(DecisionTree)의 단점이 있다면? (Chat GPT 답변)

  1. Overfitting: Decision tree는 데이터에 대해 과적합될 가능성이 높습니다. 즉, Decision tree가 training 데이터에 대해 지나치게 복잡한 모델을 만들 수 있어서 새로운 데이터에 대한 예측 성능이 저하될 수 있습니다.
  2. Instability: 데이터의 작은 변화에도 Decision tree의 구조가 크게 변할 수 있습니다. 이러 한 변화는 Decision tree가 다른 결과를 출력하도록 만들 수 있습니다.
  3. Bias: Decision tree는 변수의 중요도를 과소평가할 수 있습니다. 즉, Decision tree는 어떤 변수가 중요한지 못 찾아낼 수 있습니다.
  4. Handling Continous variables: Decision tree는 연속적인 변수를 다루기 어렵습니다. 일 반적으로 Decision tree는 연속적인 변수를 이산적인 값으로 변환해야 합니다.
  5. Unbalanced dataset: Decision tree는 클래스간 데이터의 불균형이 있을 경우, 예측력이 떨어질 수 있습니다. 즉, 예측 대상 클래스의 비율이 너무 차이나는 경우 Decision tree는 예측력이 저하될 수 있습니다.

 랜덤 포레스트

- 의사결정나무를 여러 개(?) 놔두면 더 좋아지지 않을까 ~?! 에서 나온 학습법

- 결정트리 학습법보다 과적합에 강하다.

 

 부트스트랩이란? (모델링 bootstrap 아님!)

모수의 분포를 신뢰구간으로 추정하는 아주 파워풀한 방법이다

 

- 교차 검증(cross-validation) : 테스트 데이터를 제외한 무작위로 중복되어 있지 않은 k개의 데이터로 분할 (k-1) 개는 학습 데이터로 사용 나머지 1개의 데이터를 검증 데이터로 사용한다.

- 그리드 서치(grid search):하이퍼 파라미터가 가능한 모든 조합을 시도하여 최적의 파라미터 값을 찾는 방법

- 파라미터: 데이터 학습을 통해 자동으로 그 값을 결정

- 하이퍼 파라미터 : 사용자가 경험적으로 그 값을 결정

 

질문🙋🏻‍♂️ : DT는 plot_tree 기능을 제공하지만 RF는 시각화 하기가 어렵습니다. 왜 그럴까요?
나무를 여러개 그리면 알아보기 힘들어서 그런것같습니다

 

팁❗️
두 개짜리 데이터(예: gender, SeniorCitizen 등)는 굳이 one-hot encoding을 해줄 필요가 없습니다!
-> binary encoding

 

팁❗️
train을 기준으로 one hot encoding을 해준다! 
train -> fit_transform 
test -> transform

 

'멋쟁이사자처럼 > Python' 카테고리의 다른 글

멋사 AI스쿨 TIL - (22)  (1) 2023.03.16
멋사 AI스쿨 TIL - (21)  (0) 2023.03.15
멋사 AI스쿨 TIL - (19)  (0) 2023.03.09
멋사 AI스쿨 TIL - (18)  (0) 2023.03.07
멋사 AI스쿨 TIL - (17)  (0) 2023.03.07
Comments