221017

AIVILLAIN·2022년 10월 17일
0

오공완

목록 보기
21/25

scikit-learn 머신 러닝 기본

머신러닝 애플리케이션은 데이터의 가공 및 변환 과정의 전처리 작업, 데이터를 학습 데이터와 테스트 데이터로 분리하는 데이터 세트 분리 작업을 거친 후에 학습 데이터를 기반으로 머신러닝 알고리즘을 적용해 모델을 학습

학습된 모델을 기반으로 테스트 데이터에 대한 예측을 수행하고 이렇게 예측된 결갓값을 실제 결괏값과 비교해 머신러닝 모델에 대한 평가를 수행하는 방식으로 구성

데이터의 전처리 작업은 오류 데이터의 보정이나 결손값(Null) 처리 등의 다앙한 데이터 클렌징 작업 레이블 인코딩이나 원-핫 인코딩과 같은 인코딩 작업, 그리고 데이터의 스케일링/정규화 작업 등으로 머신러닝 알고리즘이 최적으로 수행될 수 있게 데이터를 사전 처리

머신러닝 모델은 학습 데이터 세트로 학습한 뒤 반드시 별도의 테스트 데이터 세트로 평가되어야 함
또한 테스트 데이터의 건수 부족이나 고정된 테스트 데이터 세트를 이용한 반복적인 모델의 학습과 평가는 해당 테스트 데이터 세트에만 치우친 빈약한 머신러닝 모델을 만들 가능성이 높음 (Overfitting).

이를 해결하기 위해 학습 데이터 세트를 학습 데이터와 검증 데이터로 구성된 여러 개의 폴드 세트 로 분리해 교차 검증을 수행할 수 있음
사이킷런은 이러한 교차 검증을 지원하기 위해 KFold, StratifiedKFold, cross_val_score( ) 등의 다양한 클래스와 함수를 제공또한 머신러닝 모델 의 최적의 하이퍼 파라미터를 교차 검증을 통해 추출하기 위해 GridSearchCV를 제공

사이킷런은 머신러닝 프로세스의 모든 단계에서 적용될 수 있는 많은 API와 직관적인 개발 프레임워크를 제공

분류(Classification)

분류에 사용되는 정확도, 오차 행렬, 정밀도, 재현율, F1 스코어, ROC-AUC

이진 분류의 레이블 값이 불균형하게 분포될 경우(즉 0이 매우 많고 1이 매우 적을 경우 또는 반대의 경우) 단순히 예측 결과와 실제 결과가 일치하는 지표인 정확도는 머신러닝 모델의 예측 성능을 평가할 수 없음

오차 행렬은 Negative와 Positive 값을 가지는 실제 클래스 값과 예측 클래스 값이 True와 False에 따라 TN, FP, FN, TP로 매핑되는 4분면 행렬을 기반으로 예측 성능을 평가

정확도, 정밀도, 재현율 수치는 TN, FP, FN, TP 값을 다양하게 결합해 만들어지며, 이를 통해 분류 모델 예측 성능의 오류가 어떠한 모습으로 발생하는지 알 수 있음

정밀도(Precision)와 재현율(Recall)은 Positive 데이터 세트의 예측 성능에 좀 더 초점을 맞춘 평가 지표
특히 재현율이 상대적으로 더 중요한 지표인 경우는 암 양성 예측 모델과 같이 실제 Positive 양성인 데이터 예측을 Negative로 잘못 판단하게 되면 업무상 큰 영향이 발생하는 경우 분류하려는 업무의 특성상 정밀도 또는 재현율이 특별히 강조돼야 할 경우 분류의 결정 임곗값 (Threshold)을 조정해 정밀도 또는 재현율의 수치를 높일 수 있음

F1 스코어는 정밀도와 재현율을 결합한 평가 지표이며, 정밀도와 재현율이 어느 한쪽으로 치우치지 않을 때 높은 지표값을 가짐
ROC-AUC는 일반적으로 이진 분류의 성능 평가를 위해 가장 많이 사용되는 지표
AUC(Area Under Curve) 값은 ROC 곡선 밑의 면적을 구한 것으로서 일반 적으로 1에 가까울수록 좋은 수치

대부분의 앙상블 기법은 결정 트리 기반의 다수의 약한 학습기(Weak Learner)를 걸합해 변동성을 줄여 예측 오류를 줄이고 성능을 개선

결정 트리 알고리즘은 정보의 균일도에 기반한 규칙 트리를 만들어서 예측을 수행
결정 트리는 다른 알고리즘에 비해 비교적 직관적이어서 어떻게 예측 결과가 도출되었는지 그 과정을 쉽게 알 수 있음
결정 트리의 단점으로는 균일한 최종 예측 결과를 도출하기 위해 결정 트리가 깊어지고 복잡해 지면서 과적합이 쉽게 발생

앙상블 기법은 대표적으로 배경과 부스팅으로 구분
배경 방식은 학습 데이터를 중복을 허용하면서 다수의 세트로 샘플링하여 이를 다수의 약한 학습기가 학습한 뒤 최종 결과를 결합해 예측하는 방식
대표적인 배경 방식은 랜덤 포레스트
랜덤 포레스트는 수행시간이 빠르고 비교적 안정적인 예측 성능을 제공하는 훌륭한 머신러닝 알고리즘

현대의 앙상블 기법은 배깅보다는 부스팅이 더 주류를 이루고 있음
부스팅은 학습기들이 순차적으로 학습을 진행하면서 예측이 틀린 데이터에 대해서는 가중치를 부여해 다음번 학습기가 학습할 때에는 이전에 예측이 틀린 데이터에 대해서는 보다 높은 정확도로 예측할 수 있도록 해줌
부스팅의 효시격인 GBM(Gradient Boosting Machine)은 뛰어난 예측 성능을 가졌지만, 수행 시간이 너무 오래 걸린다는 단점이 있음

XGBoost와 LightGBM은 현재 가장 각광을 받고 있는 부스팅 기반 머신러닝 패키지
XGBoost의 경우 많은 캐글 경연대회에서 우승을 위한 알고리즘으로 불리면서 명성을 쌓아 왔으며, LightGBM 또한 XGBoost보다 빠른 학습 수행 시간에도 불구하고 XGBoost에 버금가는 예측 성능을 보유하고 있음

XGBoost와 LightGBM 개발 그룹은 많은 사용자들이 애용하는 사이킷런과 XGBoost와 LightGBM이 쉽게 연동할 수 있도록 사이킷런 래퍼 클래스를 제공
이들 래퍼 클래스를 이용하면 사이킷런의 여타 다른 Estimator 클래스와 동일한 방식으로 사이킷런 기반의 머신러닝 애플리케이션을 더 쉽게 개발할 수 있음

스태킹은 여러 개의 개별 모델들이 생성한 예측 데이터를 기반으로 최종 메타 모델이 학습할 별도의 학습 데이터 세트와 예측할 테스트 데이터 세트를 재생성하는 기법
스태킹 모델의 핵심은 메타 모델이 사용할 학습 데이터 세트와 예측 데이터 세트를 개별 모델의 예측 값들을 스태킹 형태로 결합해 생성

회귀(Regression)

선형 회귀는 실제값과 예측값의 차이인 오류를 최소로 줄일 수 있는 선형 함수를 찾아서 이 선형 함수에 독립변수(피처)를 입력해 종속변수(타깃값, 예측값)를 예측하는 것

이 최적의 선형 함수를 찾기 위해 실제값과 예측값 차이의 제곱을 회귀 계수 W를 변수로 하는 비용 함수로 만들고, 이 비용 함수가 최소화되는 W의 값을 찾아 선형 함수를 도출할 수 있음

이 비용 함수를 최소화할 수 있는 방법으로 경사 하강법이 있음
이러한 비용 함수의 최적화 기법은 머신러닝 전반에 걸쳐서 매우 중요한 개념

실제값과 예측값의 차이를 최소화하는 것에만 초점을 맞춘 단순 선형 회귀는 학습 데이터에 과적합되는 문제를 수반할 가능성이 높음
이러한 과적합 문제를 해결하기 위해 규제(Regularization)를 선형 회귀에 도입

대표적인 규제 선형 회귀는 L2 규제를 적용한 릿지, L1 규제를 적용한 라쏘, 그리고 L1에 L2 규제를 결합한 엘라스틱넷으로 나누어 짐

선형 회귀를 분류에 적용한 대표적인 모델이 로지스틱 회귀
로지스틱 회귀는 이름은 회귀이지만 실제로는 분류를 위한 알고리즘
선형 함수 대신 최적의 시그모이드 함수를 도출하고 독립변수(피처)를 이 시그모이드 함수에 입력해 반환된 결과를 확률값으로 변환해 예측 레이블을 결정
로지스틱 회귀는 매우 뛰어난 분류 알고리즘이며, 특히 이진 분류나 희소 행렬로 표현되는 텍스트 기반의 분류에서 높은 예측 성능을 나타냄

선형(또는 비선형) 회귀와 같이 최적의 선형(또는 비선형) 함수를 찾아내는 대신 회귀 트리를 이용해 예측하는 방법도 있음
회귀 트리는 분류를 위해 만들어진 분류 트리와 크게 다르지 않으나, 리프 노드에서 예측 결정 값을 만드는 과정에 차이가 있음
회귀 트리는 리프 노드에 속한 데이터 값의 평균값을 구해 회귀 예측값을 계산
결정 트리, 랜덤 포레스트, GBM, XGBoost, LightGBM 모두 회귀 트리를 이용해 회귀를 수행하는 방법제공

선형 모델을 기반으로 하는 선형 회귀는 데이터 값의 분포도와 인코딩 방법에 많은 영향을 받을 수 있음
선형 회귀는 데이터 값의 분포도가 정규 분포와 같이 종 모양의 형태를 선호하며, 특히 타깃값의 분포도가 왜곡(Skew)되지 않고 정규 분포 형태로 되어야 예측 성능을 저하시키지 않음
데이터 세트가 이러한 왜곡된 데이터 분포도를 가지고 있을 때 일반적으로 로그 변환을 적용하는 것이 유용
또한 선형 회귀의 경우 데이터 세트에 카테고리형 데이터가 있을 경우 이를 레이블 인코딩을 통한 숫자형 변환보다는 원-핫 인코딩으로 변환해줘야 함
회귀 트리의 경우 인코딩 방식에 크게 영향을 받지는 않음

차원 축소(Dimensionality Reduction)

많은 피처로 이뤄진 데이터 세트를 PCA 같은 차원 축소를 통해 더욱 직관적으로 이해할 수 있음
무엇보다 차원 축소는 단순히 피처의 개수를 줄이는 개념보다는 이를 통해 데이터를 잘 설명할 수 있는 잠재적인 요소를 추출하는 데 큰 의미가 있음
이 때문에 많은 차원을 가지는 이미지나 텍스트에서 PCA, SVD 등의 차원 축소 알고리즘이 활발하게 사용됨

PCA는 입력 데이터의 변동성이 가장 큰 축을 구하고, 다시 이 축에 직각인 축을 반복적으로 축소하려 는 차원 개수만큼 구한 뒤 입력 데이터를 이 축들에 투영해 차원을 축소하는 방식
이를 위해 입력 데이터의 공분산 행렬을 기반으로 고유 벡터(Eigenvector)를 생성하고 이렇게 구한 고유 벡터에 입력 데이터를 선형 변환하는 방식

LDA(Linear Discriminant Analysis)는 PCA와 매우 유사한 방식이며, PCA가 입력 데이터 변동성의 가장 큰 축을 찾는 데 반해 LDA는 입력 데이터의 결정 값 클래스를 최대한으로 분리할 수 있는 축을 찾는 방식으로 차원을 축소

SVD와 NMF는 매우 많은 피처 데이터를 가진 고차원 행렬을 두 개의 저차원 행렬로 분리하는 행렬 분해 기법
특히 이러한 행렬 분해를 수행하면서 원본 행렬에서 잠재된 요소를 추출하기 때문에 토픽 모델링이나 추천 시스템에서 활발하게 사용됨

각 군집화 기법은 나름의 장/단점을 가지고 있으며, 군집화하려는 데이터의 특성에 맞게 선택해야 함

K-평균의 경우 거리 기반으로 군집 중심점을 이동시키면서 군집화를 수행
쉽고 직관적인 알고리즘으로 많은 군집화 애플리케이션에서 애용되지만, 복잡한 구조를 가지는 데이터 세트에 적용하기에는 한계가 있으며, 군집의 개수를 최적화하기가 어려움
K-평균은 군집이 잘 되었는지의 평가를 위해 실루엣 계수를 이용

평균 이동(Mean Shift)은 K-평균과 유사하지만 거리 중심이 아니라 데이터가 모여 있는 밀도가 가장 높은 쪽으로 군집 중심점을 이동하면서 군집화를 수행
일반 업무 기반의 정형 데이터 세트보다는 컴퓨터 비전 영역에서 이미지나 영상 데이터에서 특정 개체를 구분하거나 움직임을 추적하는 데 뛰어난 역할을 수행하는 알고리즘

GMM(Gaussian Mixture Model) 군집화는 군집화를 적용하고자 하는 데이터가 여러 개의 가우시안 분포(Gaussian Distribution)를 모델을 섞어서 생성된 모델로 가정해 수행하는 방식
전체 데이터 세트에서 서로 다른 정규 분포 형태를 추출하여 이렇게 다른 정규 분포를 가진 데이터 세트를 각각 군집화
GMM의 경우는 K-평균보다 유연하게 다양한 데이터 세트에 잘 적용될 수 있으나 군집화를 위한 수행 시간이 오래 걸린다는 단점이 있음

DBSCAN(Density Based Spatial Clustering of Applications With Noise)은 밀도 기반 군집화의 대표적인 알고리즘
입실론 주변 영역 내에 포함되는 최소 데이터 개수의 충족 여부에 따라 데이터 포인트를 핵심 포인트, 이웃 포인트, 경계 포인트, 잡음 포인트로 구분, 특정 핵심 포인트에서 직접 접근이 가능한 다른 핵심 포인트를 서로 연결하면서 군집화를 구성하는 방식
DBSCAN은 간단하고 직관적인 알고리즘으로 돼 있음에도 데이터의 분포가 기하학적으로 복잡한 데이터 세트에도 효과적인 군집화가 가능

텍스트 분석

텍스트 사전 정제 작업 등의 텍스트 정규화
피처 벡터화
피처 벡터 데이터 세트에 머신러닝 모델 학습, 예측, 평가
텍스트 정규화 작업은 텍스트 클렌징, 대소문자 변경, 단어 토큰화, 스탑워드 필터링, 어근 추출 등 피처 벡터화 진행 전 수행하는 다양한 사전 작업
피처 벡터화는 BOW의 대표 방식인 Count 기반과 TF-IDF 기반 피처 벡터화
일반적으로 문서의 문장이 긴 경우 TF-IDF 기반 피처 벡터가 더 정확한 결과를 도출
피처 벡터 데이터 세트는 희소 행렬이며 머신러닝 모델은 희소 행렬 기반에서 최적화되어야 함

지도학습 기반의 긍정/부정 이진 분류, SentiWordNet, VADER와 같은 감성 사전 Lexicon을 이용한 방식
토픽 모델링은 LDA를 이용하여 뉴스그룹 내 문서들이 공통적으로 가지는 토픽 추출
군집화는 K-평균 군집화 기법을 이용해 비슷한 문서들 간 군집화
텍스트 유사도 측정에서는 코사인 유사도를 이용하여 문서들 간 유사도 측정

추천 시스템

콘텐츠 기반 필터링과 협업 필터링
콘텐츠 기반 필터링은 아이템(상품, 영화, 서비스 등)을 구성하는 여러 가지 콘텐츠 중 사용자가 좋아하는 콘텐츠를 필터링하여 이에 맞는 아이템을 추천하는 방식
예를 들어 영화 추천의 경우 사용자가 좋아하는 영화를 분석한 뒤, 이 영화의 콘텐츠와 유사한 다른 영화를 추천
영화의 경우 이러한 콘텐츠의 예는 장르, 감독, 영화배우, 영화 키워드와 같은 요소
이들 요소들을 결합하여, 하나의 콘텐츠 특징으로 피처 벡터화한 뒤에 이들 피처 벡터와 가장 유사한 다른 피처 벡터를 가진 영화를 추천하는 것입니다.

협업 필터링은 최근접 이웃 협업 필터링과 잠재 요인 협업 필터링으로 나뉨
최근접 이웃 협업 필터링은 다시 사용자 기반(사용자 사용자)과 아이템 기반(아이템 - 아이템)으로 나뉘며, 이중 아이템 기반이 더 많이 사용됨
아이템 기반 최근접 이웃 방식은 특정 아이템과 가장 근접하게 유사한 다른 아이템들을 추천하는 방식
이 유사도의 기준이 되는 것은 사용자들의 아이템에 대한 평가를 벡터화한 값
이를 위해 모든 아이템을 행으로, 모든 사용자를 열로, 그리고 사용자별 아이템 평점을 값으로 하는 아이템 사용자 행렬 데이터 세트(피벗 테이블)를 만들고, 아이템 별로 코사인 유사도를 이용해 사용자 평점 피처 벡터에 따른 TOP-N 유사 아이템을 추천

잠재 요인 협업 필터링은 많은 추천 시스템에서 활용하는 방식
사용자 아이템 평점 행렬 데이터에 숨어 있는 잠재 요인을 추출하여 사용자가 아직 평점을 매기지 않은 아이템에 대한 평점을 예측하여 이를 추천에 반영하는 방식
이렇게 잠재 요인을 추출하기 위해서 다차원의 사용자 아이템 평점 행렬을 저차원의 사용자 잠재요인, 아이템-잠재요인 행렬로 분해하는데, 이러한 기법을 행렬 분해라고 함

Surprise는 사이킷런과 유사한 API를 지향

profile
소신있는 오픈마인드

0개의 댓글