본문 바로가기
머신러닝

파이썬 머신러닝 이론에 대해 정리해 보자

by 초보코딩러 2021. 6. 21.

머신 러닝을 위한 용어 정리 

피쳐(Feature)  피처는 데이터 세트의 일반 속성
레이블(label,target) 타겟값 또는 결정값은 지도 학습 시 데이터의 학습을 위해 주어지는 정답 데이터 

 

사이킷런으로 시작하는 머신러닝

1.데이터 세트 분리 데이터를 학습 데이터와 테스트 데이터로 분리 
2.모델 학습 학습 데이터를 기반으로 ML 알고리즘을 적용해 모델을 학습시킵니다.
3.예측 수행 학습된 ML 모델을 이용해 테스트 데이터의 분류 (붓꽃 종류)를 예측
4.평가 이렇게 예측된 결괏값과 테스트 데이터의 실제 결괏값을 비교해 ML모델
성능을 평가 

 

사잇킷런 기반 프레임워크 -

Classifier(분류) 1. DecisionTreeclassifier
2. RandomForestclassifier
3.GradientboostingClassifer
4. GaussianNB
5.SVC
Regressor(회귀) 1. Linear Regression
2. RIdge
3. Lasso
4. RandomForestRegressor
5. GradientBoostingRegressor

교차 검증 

K fold 교차 검증 (일반 k 폴드)  k = 5 일 경우 
총 5개의 폴드 세트에 5번의 학습과 검증 평가 반복 수행
 stratified K 폴드  1. 불균형한 분포도를 가진 레이블 데이터 집합을 위한 k폴드 방식

2. 학습 데이터와 검증 데이터 세트가 가지는 레이블 분포도가 유사하도록 검증 데이터 추출

교차 검증을 보다 간편하게

cross_val_score() 함수 폴드 세트 추출, 학습/예측 , 평가를 한번에 수행 

교차 검증과 최적 하이퍼 파라미터 튜닝을 한번에 

GridSearchCV 사이킷런은 GridSearchCV 를 이용해 classifier나 Regressor와 같은 알고리즘에 사용되는 하이퍼 파라미터를 순차적으로 입력하면서 편리하게 최적의 파라미터를 도출할 수 있는 방안을 제공 

데이터 전처리

  • 데이터 클린징
  • 결손값 처리(Null/Nan 처리)
  • 데이터 인코딩(레이블, 원-핫 인코딩)
  • 데이터 스케일링
  • 이상치 제거
  • Feature 선택, 추출 및 가공 

Label 인코딩

원-핫 (one_hot) 인코딩

평가

분류(Classification) 성능 평가 지표

이진 분류 성능 평가 지표

  • 정확도(Accuracy)
  • 오차행렬(Confusion Matrix)
  • 정밀도(Recall)
  • F1 스코어
  • ROC AUC

 정확도(Accuracy) = 예측 결과가 동일한 데이터 건수/ 전체 예측 데이터 건수 

정확도 : 90%

 

정밀도(Precision)과 재현율(Recall)

  • 정밀도 = TP/(FP + TP)
  • 재현율 = TP/(FN + TP)
  • 정밀도 = precision_score()
  • 재현율 = recall_score()

정밀도/재현율 트레이드오프

 

Threshold을 조정해 정밀도 또는 재현율의 수치를 높일 수 있다.

어느 한쪽을 강제로 높이면 다른 하나의 수치는 떨어지기 쉽다

이를 정밀도/재현율의 트레이드오프(Trade-off)라고 부른다.

 

분류기를 평가할 때 정확도는 잘 사용하지 않습니다. 특히 데이터의 비율이 서로 다르다면 큰 문제가 발생 (ex 10000개의 샘플중 500개의 불량 샘플이 있는 데이터 ) 이럴 때 분류기의 성능을 확인하는 지표로 정밀도(Precision)와 재현율(Recall)을 많이 사용한다.

 

 분류 알고리즘

결정 트리와 앙상블

  • 결정트리의 복잡한 규칙 구조로 인한 과적합(overfitting)이 발생해 반대로 예측 성능이 저하될 수도 있다.
  • 이러한 단점이 앙상블 기법에서는 오히려 장점으로 작용 앙상블은 매우 많은 여러개의 약한 학습기(예측 성능이 상대적으로 떨어지는 학습 알고리즘)을 결합해 확률적 바완과 오류가 발생 부분에 대한 가중치를 계속 업데이트하면서 예측 성능을 향상시키는데, 결정 트리가 좋은 약한 학습기가 되기 때문(GBM, XGBoost, LightGBM)

결정 트리 주요 하이퍼 파라미터

 

파라미터 명 설명
max_depth *트리의 최대 깊이를 규정
*디폴트= None
*노드가 가지는 데이터 개수가 min_samples_split보다 작아질 때까지 계속 깊이를 증가 시킴
*깊이가 깊어지면 min_samples_split 설저대로 최대 분할하여 과적합 할 수 있음.
max_features *최적의 분할을 위해 고려할 최대 피처 개수
*디폴트 = None

min_samples_split *노드를 분할하기 위한 최소한의 샘플 데이터 수로 과적합을 제어하는데 사용됨.
*디폴트 = 2 , 작게 설정 할수록 분할되는 노드가 많아져서 과적합 가능성 증가
*과적합을 제어, 1로 설정할 경우 분할되는 노드가 많아져서 과적합 가능성 증가 
min_samples_leaf *말단 노드(leaf)가 되기 위한 최소한의 샘플 데이터 수 
max_leaf_nodes *말단 노드(Leaf)의 최대 갯수 

Graphviz 결정 트리의 시각화 

앙상블-보팅

앙상블 유형  
보팅(Voting) 일반적으로 서로 다른 알고리즘을 가진 분류기 결합
배깅(Bagging) 랜덤 포레스트(Random Forest) ,분류기가 모두 같은 유형의 알고리즘 기반
부스팅(Boosting) 에스다 부스팅, 그래디언트부스팅, XGBoost, LightGBM

사이킷런 랜덤 포레스트 하이퍼 하라미터

n_estimators *랜덤 포레스트에서 결정 트리의 개수를 지정 
*디폴트 = 10개
*많이 설정 할수록 좋은 성능을 기대 할 수 있지만 계속 증가시킨다고 성능이 무조건 좋아지진 않음 
*학습 수행 시간이 오래걸리는 것도 감안 해야함.
max_features 랜덤포레스트에서의 디폴트 = 'auto','sqrt'(전체 피처 개수)
max_depth , min_samples_leaf 결저트리에 과적합을 개선하기위해 랜덤포레스트에서도 똑같이 적용이 가능함.
   

 

GBM *에이다부스트와 유사하나, 가중치 업데이트를 경사 하강법 이용
*GBM의단점 : 가중치 업데이트 반복수행으로 인해 학습시간이 상대적으로 오래걸림
그리드 서치까지 수행하면 매우 오래걸린다.
하이퍼 파라미터  
loss *경사 하강법에서 사용할 비용함수를 지정
* 특별한 이유가 없으면 기본값 = 'deviance'
learing_rate *GBM이 학습을 진행할 때 마다 적용하는 학습률
*Weak learner 가 순차적으로 오류 값을 보정해 나가는 데 적용하는 계수
*기본값 = 0.1   0~1사이의 값을 지정 할 수 있다.

n_estimators *Weak learner의 개수 , Weak learner가 순차적으로 오류를 보정하므로 개수가 많을 수록 예측 성능이 일정 수준까지는 좋아 질 수 있다. 
*but 하지만 개수가 많을 수록 수행기간이 오래걸린다.
subsample *weak learner가 학습에 사용하는 데이터의 샘플링 비율
* 기본값 = 1 , 이는 전체 학습 데이터를 기반으로 학습한다는 의미
*ex) 0.5 이면 학습 데이터의 50%
*과적합이 염려되면 1보다 작은 값으로 설정.

 

XGBoost learning_rate *GBM의 학습률과 같은 파라미터입니다.
*0~1사이의 값을 지정하며 부스팅 스텝을 반복적으로 수행
*XGBoost
*디폴트 = 0.1

  min_child_weight *결정트리의 min_child_leaf와 유사, 과적합 조절용
*트리에서 가지를 추가로 치기 위해 필요한 최소 샘플 수 
  colsample_bytree *GBM의 max_features와 유사하다.
*트리 생성에 필요한 피처(칼럼)을 임의로 샘플링 하는 데 사용됩니다.
매우 많은 피처가 있는 경우 과적합을 조정하는 데 적용합니다. 
*default =1
  scale_pos_weight *특정 값으로 치우진 비대칭한 클래스로 구성된 데이터 세트의 균형을
유지하기 위한 파라미터
*디폴트 = 1
  gamma *트리의 리프 노드를 추가적으로 나눌지를 결정할 최소 손실 감소 값.
*해당 값 보다 큰 손실이 감소된 경우에 리프 노드를 분리.
*값이 클수록 과적합 감소 효과가 있습니다.
  n-estimators *default = 100
*생성할 약한 학습기 개수 
  ealy_stopping_rounds * default = None
* 조기 중단을 위한 반복 횟수 ,N번 반복하는 동안 성능 평가 지표가 향상되지 않으면 반복이 멈춤.

XGBoost 조기 중단 기능(Early Stopping)

  • 특정 반복 횟수 만큼 더 이상 비용함수가 감소하지 않으면 지정된 반복횟수를 다 완료하지 않고 수행을 종료가능
  • 학습을 위한 시간을 단축 시킬 수 있음. 특히 최적화 튜닝 단계에서 적절하게 사용 가능.
  • 너무 반복 횟수를 단축할 경우 예측 서능 최적화가 안된 상태에서 학습이 종료될 수 있으므로 유의필요
  • 조기 중단 설정을 위한 주요 파라미터 

LightGBM 하이퍼 파라미터 

  • 리프 중심 분할은 트리의 균형을 맞추지 않고 최대 손실 값을 가지는  노드를 지속적으로 분할하면서
  • 트리의 깊이가 깊어지고 비대칭적인 트리가 생성
  • 결과적으로 균형 트리 분할에 비해 손실값이 높은 노드에 대해 더 깊게 트리를 분할하며 손실값을 줄일 수 있기 때문에 다른 부스팅 계열 알고리즘 보다 더 좋은 정확도나 비슷한 수준의 성능을 낼 수 있다. 
  • 에 따르면, 리프 중심 분할 방법은 복잡도가 증가하고 과적합 문제가 발생할 수 있다 합니다. 그러나, 이는 트리의 최대 깊이인 max_depth의 하이퍼 파라미터를 조정한다면 해결할 수 있는 문제라 합니다.
reg_lambda L2규제 적용 값 , 기본값은 1 값이 클 수록 규제 값이 커짐 과적합 제어
reg_alpha L1규제 적용 값 기본값은 0임 값이 클 수록 규제 값이 커짐, 과적합 제어 
early_stopping_ronunds 학습 조기 종료를 위한 early stopping interval 값
num_leaves *하나의 트리가 가질 수 있는 최대 리프 개수 
  • 자료 구조 트리에 존재하는 모든 노드 가운데 자식을 가지지 않는 노드를 통틀어 이르는 말.
 min_child_weight 결정 트리의 min_child_leaf와 유사 , 과적합 조절용 
lerning_rage * default = 0.1 
* 학습률
min_child_sample *default = 20
*최종 리프 노드가 되기 위해 최소한으로 필요한 레코드 수 
*과적합 제어를 위한 파라미터

리프노드

Log 변환

Log변환은 왜곡된 분포도를 가진 데이터 세트를 비교적 정규 분포에 가깝게 변환해주는 훌륭한

featue Engineering방식 

 

언더 샘플링과 오버 샘플링

언더 샘플링

: 많은 레이블을 가진 데이터 세트를 적은 레이블을 가진 데이터 세트 수준으로 

감소 샘플링.

 

오버 샘플링

: 적은 레이블을 가진 데이터 세트를 많은 레이블을 가진 데이터 세트 수준으로 증식.

SMOTE (systhetic minority Over-Sampling Technique)

-타겟값 분포에 맞춰서 피처 데이터를 오버 샘플링 해준다. 

출처: 파이썬 머신러닝 완벽 가이드.

회귀 소개

  • 회귀는 현대 통계학을 이루는 큰 축
  • 회귀 분석은 유전적 특성을 연구하던 영국의 통계학자 갈톤이 수한 여구에서 유래했다.
  • 회귀 분석은 이처럼 데이터 값이 평균과 같은 일정한 값으로 돌아가려는 경향을 이용한 통계학 기법.

Tip 종속변수 

서로 관계를 주고 받는 둘 또는 그 이상의 변수중에는, 다른 변수에 영향을 주는 변수도 있고, 다른 변수에 의해 영향을 받는 변수도 있을 것이다. 이때 영향을 받는 변수를 종속변수라 하고, 반대로 영향을 주는 변수를 독립변수 또는 설명변수라고 한다.


Tip 회귀 계수(Regresiion coefficients)

 

:독립변수의 값에 영향을 미치는 회귀 계수

회귀 개요

:머신러닝은 회귀 예측의 핵심은 주어진 피처결정 값 데이터 기반에서 학습을 통해 최적의 회귀 계수를 찾아내는 것입니다.

 

회귀의 유형

:회귀는 회구 계수의 선형/비선형 여부, 독립변수의 개수 ,종속 변수의 개수에 따라 여러 가지 유형으로 나뉨

회귀에서 가장 중요한 것은 =회귀 계수 

 

회귀계수가 선형이나 아니냐에 따라 선형 회귀와 비선형 회귀로 나눌 수 있다.

그리고 독립 변수의 개수가 한 개인지 여러 개인지에 따라 단일 회귀 , 다중 회귀로 나뉜다.

 

선형 회귀의 종류

종류 설명
일반 선형 회귀 예측값과 실제 값의 RSS(Residual Sum of Squares)를 최소화 할 수 있도록 회귀 계수를 최적화하며,
규제(Regularization)를 적용하지 않은 모델.
릿지(Ridge) 릿지 회귀는 선형 회귀에 L2규제를 추가한 회귀 모델
라쏘(Lasso) 라쏘 회귀는 선형 회귀에 L1규제를 적용한 방식
엘라스틱넷(ElasticNet) L1,L2 규제를 함께 결합한 모델.
로지스틱 회귀 로지스틱 회귀는 회귀라는 이름이 붙어 있지만, 사실은 분류에 사용되는 선형  모델.

출처 파이썬 머신러닝 완벽가이드.

단순 선형 회귀 (simple Regression)를 통한 회귀의 이해

  • 최적의 회귀 모델을 만든다는 것은 바로 전체 데이터의 잔차(오류값) 합이 최소가 되는 모델을 만든다는 의미.
  • 동시에 오류 값 합이 최소가 될 수 있는 최적의 회귀 계수를 찾는다는 의미도 됩니다.

RSS 기반의 회귀 오류 측정

오류 값의 제곱을 구해서 더하는 방식입니다. 일반적으로 미분 등의 계산을 편리하게 하기 위해서 RSS 방식으로

오류 합을 구합니다. 즉 Error2=RSS

출처 파이썬 머신러닝 완벽 가이드

 

비용 최소화 하기_경사하강법(Gradient Descent) #Grandient ==기울기 

출처 파이썬 머신러닝 완벽 가이드

 

사이킷런 LinearRegression 클래스

 

LnearRegression 클래스는 예측값과 실제 값의 RSS를 최소화해 OLS추정 방식

 

LinearRegression 클래스는 fit() 메서드로 x,y 배열의 입력 받으면 회귀 계수인 W를 coef_속성에 저장한다.

 

선형 회귀의 다중 공정성 문제 (서로 상관관계가 높은 피처가 많은 경우 독립적인 피처만남긴다)

일반적으로 선형 회귀는 입력 피처의 독립성에 많은 영향을 받습니다. 피처간의 상관관계가 매우 높은 경우 

분산이 매우 커져서 오류에 매우 민감해집니다. 이러현 현상을 다중공선성

 

일반적으로 상관관계가 높은 피처가 많은 경우 독립적인 중요한 피처만 남기고 제거하거나 규제를 적용.

 

출처: 파이썬 머신러닝 완벽가이드

 

 

회귀를 위한 데이터 변환 방법

타깃값 변환 회귀에서 타깃값은 반드시 정규 분포를 가져야함. 이를 위해 주로 로그 변환을 적용
피쳐값 변환 standardScaler 클래스를 통해 평균이 0, 분산이 1인 표준 정규 분포를 가진 데이터 세트로 변환
MinMaxScaler 클래스를 이용해 최솟값이 0이고 최댓값이 1인 값으로 정규화 수행
  스케일링/정규화 수행한 데이터 세트에 다시 다항 특성을 적용하여 변환하는 방법 보통 
  원래 값이 log 함수를 적요하면 보다 정규 분포에 가까운 형태로 값이 분포된다.
로그 변환은 매우 유용한 변환 로그변환이 가장 많이 쓰인다

 

회귀를 위한 데이터 변환 방법 - 인코딩

선형 회귀의 데이터 인코딩은 일반적으로 레이블 인코딩이 아니라 원-핫 인코딩을 적용합니다.

 

로지스틱 회귀 개요

 

로지스틱 회귀는 선형 회귀 방식을 분류에 적용한 알고리즘 즉 로지스틱 회귀는 분류에 사용됩니다.

시그모이드(sigmoind)함수 최적선을 찾고 이 시그모이드 함수의 변환 값을 확률로 간주

 

 

출처: 파이썬 머신러닝 완벽가이드

 

댓글