회귀 / 차원축소

2024. 5. 6. 19:40책/머신러닝 완벽가이드

회귀 Linear Regression

  • 회귀에서 RSS는 비용(Cost), 비용 함수, 손실 함수(loss function)라고 함
  • 머신러닝 회귀 알고리즘은 데이터를 계속 학습하면서 이 비용 함수가 반환하는 값을 지속해서 감소시키고 최종적으로는 더 이상 갑소하지 않는 최소의 오류 값을 구하는 것임

1)단순 선형 회귀(simple linear regression) : 한개의 독립 변수로 타겟 변수 예측

2)다중 선형 회귀(multiple linear regression) : 다수의 독립변수로 타겟 변수 예측

ex) 아들의 키 예측(y) = 아버지의 키 (x1) + 어머니의 키(x2) ...... 어머니 몸무게 …etc..

경사하강법

  • 점진적으로 반복적인 계산을 통해 w 파라미터를 업데이트하면서 오류 값이 최소가 되는 w 파라미터를 구하는 방식임. 핵심은 오류가 작아지는 방향으로 w 값을 업데이트하는 방법.
  • 목적함수 : 오차의 제곱을 최소화하는 w0, w1 찾기
  • 잔차 제곱의 합을 RSS / SSE(sum of squre error)라고함

비용 함수 RSS(w0,w1)에 경사하강법 적용

→ RSS(w0,w1)=N1∑i=1N(yi−(w0+w1∗xi))^2

식을 미분해서 미분 함수의 최솟값을 구해야 하는데 파라미터가 1개가 아닌 w0과 w1을 가지고 있어 편미분 진행.

  • 편미분의 결과값을 반복적으로 보정하면서 파라미터 값을 업데이트하면 RSS(w0,w1)가 최소가 되는 파라미터를 구할 수 있음.
  • 업데이트는 편미분 결과값에 마이너스(-)를 해준 뒤 원래 파라미터 값에 더해줌.
  • 그리고 편미분 값이 너무 클 수 있기 때문에 보정 계수 η를 곱하는데, 이를 '학습률' 이라고 부름

확률적 경사 하강법

  • 일반적으로 경사 하강법은 모든 학습 데이터에 대해 반복적으로 비용함수 최소화를 위한 값을 업데이트하기 때문에 수행 시간이 매우 오래 걸린다는 단점이 있다. 그래서 실전에서는 대부분 확률적 경사 하강법을 이용함.
  • 확률적 경사 하강법은 전체 데이터에 대해 파라미터를 업데이트하는 것이 아니라 일부 데이터만 이용해 파라미터가 업데이트하기 때문에 경사 하강법에 비해 빠른 속도를 보장함

평가(evaluation)

  • residuals을 줄이는 것이 목표
  • mse의 단점은 도메인의 종류에 따라 값이 천차만별인 것

ex) 키 데이터와 손 길이 데이터가 있을 때 키 데이터의 잔차 크기가 더욱 큼

또 부동산 가격 데이터가 존재하면 잔차 크기는 억단위의 크기를 가질 것임

⇒이러한 단점을 극복하기 위해 결정계수(coefficient of determination)를 사용함

결정계수(coefficient of determination)R^2

  • y값 예측을 위해 분산은 불필요
  • 결정 계수는 0 < R^2 < 1 사이에 존재
  • 1에 가까울수록 좋고 0에 가까울수록 안좋음

<Non-linear regression>

Polynomial regression

  • 장점 : 선형의 단점보완
  • 단점 : 모델 복잡도 증가
  • 코사인, 사인, 제곱, 로그 등으로 tranformation 가능

Overfitting and underfitting

단순한 모델은 과소적합 가능성 높음 ↔ 복잡한 모델은 과적합 가능성 높음

과적합 방지 방법

  • 데이터 증가시키기
  • feature selection
  • regularization

bias-variance trade off

  • 편향-분산 트레이드오프(Bias-Variance Trade off)는 머신러닝이 극복해야하는 가장 중요한 이슈 중의 하나
  • 높은 편향 / 낮은 분산에서 과소적합되기 쉬움
  • 낮은 편향 / 높은 분산에서 과적합되기 쉬움

→ 결국, 편향과 분산이 서로 적절히 이뤄지면서 오류 cost 값이 최대로 낮아지는 모델을 구축하는 것이 가장 효율적인 머신러닝 예측 모델을 만드는 방법임

Regularization

  • 𝝀는 하이퍼 파라미터로 regularization을 조정하는 역할
    • 𝝀가 커지면 weight는 작아지고 mse는 높아짐 ↔ 𝝀가 작아지면 weight는 커지고 mse는 작아짐
      • 𝝀=10000, weight=down, mse=up
      • 𝝀=0.001, weight=up, mse=down

ex) 보고서 양에 제한 없음 = 보고서 양 늘어남(내용은 풍부) = 내용 복잡

↔ 보고서 양 제한 = 보고서 양 줄어듬(내용은 적음)=보기 좋은 보고서

train R^2 test R^2

𝝀=1 0.98 0.5 overfitting
𝝀=100 0.3 0.3 underfitting
𝝀=10 0.8 0.8 fit
  • 𝝀를 적절히 조절한느 것이 regularization의 핵심

Ridge Regression

  • 릿지 회귀는 선형 회귀에 L2 규제를 추가한 회귀 모델
  • L2 규제는 상대적으로 큰 회귀 계수 값의 예측 영향도를 감소시키기 위해서 회귀 계수값을 더 작게 만드는 규제 모델

LASSO

  • 라쏘 회귀는 선형 회귀에 L1 규제를 적용한 방식
  • L2 규제가 회귀 계수 값의 크기를 줄이는 데 반해, L1 규제는 예측 영향력이 작은 feature의 회귀 계수를 0으로 만들어 회귀 예측 시 feature가 선택되지 않게 하는 것
  • lasso는 변수를 0으로 만들고 유의미하지 않은 0값은 결국 제거 됨 - 이를 통해 어느 변수가 유의미한 것인지 파악 가능함 ( 따라서 l1규제는 feature 선택 기능으로도 불림)
    • 위 그림에서 가장 유의미한 변수는 가장 늦게 0이된 핑크색 변수임

Elastic Net

  • L2, L1 규제를 함께 결합한 모델
  • 주로 feature가 많은 dataset에서 적용되며, L1 규제로 feature의 개수를 줄임과 동시에 L2 규제로 계수 값의 크기를 조정

코딩실습

알게된 내용

error

from imblearn.over_sampling import SMOTE

smote=SMOTE(random_state=0) X_train_over, y_train_over=smote.fit_resample(X_train, y_train) print('smote 적용 전 학습용 피처/레이블 데이터세트:',X_train.shape,y_train.shape) print('smote 적용 후 학습용 피처/레이블 데이터세트:',X_train_over.shape,y_train_over.shape) print('smote 적용 후 레이블 값 분포:',pd.Series(y_train_over).value_counts())

ImportError: cannot import name '_MissingValues' from 'sklearn.utils._param_validation' (/Users/yeong-gwang/anaconda3/lib/python3.11/site-packages/sklearn/utils/_param_validation.py)

 

 

 

차원 축소

399~430

차원 축소 개념

  • 차원(feature) 증가 = 데이터 포인트 간 거리가 기하급수적으로 멀어짐 (=희소한 구조)
    • 만약 수백 개 이상 피처로 구성된 데이터 세트가 있다면 적은 차원에서 학습된 모델보다 예측 신뢰도 떨어짐
  • 또한 개별 피처간 상관관계가 높을 가능성이 큼
    • 선형 모델에서 입력 변수 간 상관관계가 높은 경우 다중 공산성 문제가 발생하며 결국, 모델 예측 성능이 저하됨

따라서, 많은 다차원 피처를 줄이는 것**(차원 축소)**

차원 축소 종류 2가지

피처 선택(feature selection) & 피처 추출(feature extraction)

피처 선택

  • 특정 피처에 종속성이 강한 불필요한 피처 제거
  • 즉, 특징을 잘 나타내는 주요 피처만 선택

피처 추출

  • 기존 피처를 저차원의 중요 피처로 압축해서 추출
  • 새롭게 추출된 중요 특성은 기존의 피처가 압축된 것 즉, 기존 피처와는 완전 다른 값
  • 단순 압축 x → 또 다른 공간으로 매핑해 추출 o
    • 즉, 함축적인 요약 특성 추출
    • 기존 피처가 인지하기 어려웠던 잠재적 요소 추출
    • ex ) 성적, 상장, 대외활동, 봉사활동, 공모전, 학업 성취도 , 모의고사 성적, 영어성적같은 피쳐를 더욱 함축

정리

  • 차원축소는 단순히 데이터의 압축 아님
  • 중요한 것은 차원 축소를 통해 더 데이터를 잘 설명할 수 있는 잠재적인 요소를 추출하는 것
  • PCA, SVD, NMF가 대표적 (이미지, 텍스트에서 잘 활용됨)
    • 이미지 데이터 : 이미지 변환, 압축 진행 → 원본 이미지보다 훨씬 적은 차원 → 과적합 영향력이 작아짐 ⇒ 예측 성능 향상
    • 텍스트 문서의 숨겨진 의미 추출 → 시맨틱(semantic)한 의미, topic을 잠재 요소로 간주하고 찾음 (SVD, NMF가 semantic topic 모델링을 위한 기반 알고리즘으로 사용)

PCA

  • 대표적인 차원 축소 기법
  • 변수 간의 상관관계를 이용해 대표 주성분을 추출해 차원 축소
  • 차원 축소 시 기존 데이터의 정보 유실을 최소화 할 것
    • 가장 높은 분산을 가지는 데이터의 축을 찾아 이 축으로 차원 축소, 이것이 PCA의 주성분
    • 즉, PC는 분산이 데이터의 특성을 가장 잘 나타내는 것으로 간주

차원 축소 절차

  1. 가장 큰 데이터 변동성을 기반으로 첫 번째 벡터 축 생성
  2. 두 번째 축은 이 벡터 축에 직각이 되는 벡터를 축으로 함
  3. 두 번째 축과 직각이 되는 벡터를 설정하는 방식으로 축 생성

이렇게 생성된 벡터 축에 원본 데이터를 투영하면 벡터 축 개수 만큼의 차원으로 원본 데이터가 차원 축소됨

즉, PCA는 원본 데이터 피처 개수에 비해 매우 작은 주성분으로 원본 데이터의 총 변동성을 대부분 설명할 수 있는 분석법

선형대수 관점에서 본 PCA

★ 입력 데이터의 공분산 행렬이 고유벡터와 고유값으로 분해될 수 있으며, 이렇게 분해된 고유벡터를 이용해 입력 데이터를 선형 변환하는 방식이 pca라는 것임

PCA STEP

  1. 입력 데이터 세트의 공분산 행렬을 생성
  2. 공분산 행렬의 고유벡터와 고유값을 계산
  3. 고유값이 가장 큰 순으로 K개(PCA 변환 차수만큼)만큼 고유벡터를 추출
  4. 고유값이 가장 큰 순으로 추출된 고유벡터를 이용해 새롭게 입력 데이터를 변환

LDA

  • 선형 판별 분석법으로 불리며 PCA와 매우 유사
  • LDA는 지도학습의 분류에서 사용하기 쉽도록 개별 클래스를 분별할 수 있는 기준을 최대한 유지하면서 차원을 축소
    • PCA = 입력 데이터의 변동성이 가장 큰 축을 찾음
    • LDA = 입력 데이터의 결정 값 클래스를 최대한으로 분리할 수 있는 축을 찾음
  • LDA는 특정 공간상에서 클래스 분리를 최대화하는 축을 클래스 간 분석
  • 클래스 내부 분산의 비율을 최대화하는 방식으로 차원을 축소

즉. 클래스 간 분산이 클수록 좋고, 클래스 내부의 분산이 작을수록 좋음

PCA와 LDA를 구하는 단계의 가장 큰 차이점

공분산 행렬이 아닌 한 클래스 간 분산과 클래스 내부 분산 행렬을 생성, 그리고 이 행렬에 기반해 고유벡터를 구하고 입력 데이터를 투영함

LDA STEP

  1. 클래스 내부클래스 간 분산 행렬을 구함, 그리고 이 두개의 행렬은 입력 데이터의 결정 값 클래스별로 개별 피처의 평균 벡터를 기반으로 구함
  2. 클래스 내부 분산 행렬을 Sw , 클래스 간 분산 행렬을 SB라고 하면 다음 식으로 두 행렬을 고유벡터로 분해 가능
  3. 고유값이 가장 큰 순으로 K개(LDA변환 차수만큼) 추출
  4. 고유값이 가장 큰 순으로 추출된 고유벡터를 이용해 새롭게 입력 데이터를 변환

SVD

  • PCA와 유사한 행렬 분해 기법을 이용
  • 차이점
    • PCA = 정방행렬만을 고유벡터로 분해 가능
    • SVD =정방행렬 뿐 아니라 행과 열의 크기가 다른 행렬에도 적용할 수 있음
  • SVD는 특이값 분해로도 불림
  • U, V에 속한 벡터는 특이벡터(모든 특이 벡터는 서로 직교하는 성질 존재)
  • Σ는 대각 행렬 (행렬의 대각에 위치한 값만 0이 아니고 나머지 위치의 값은 모두 0)
    • Σ이 위치한 0이 아닌 값이 바로 행렬 A의 특이값임
  • 데이터 세트가 스케일링으로 데이터 중심이 동일해지면 사이킷런의 SVD와 PCA는 동일한 변환 수행
  • PCA는 SVD 알고리즘으로 구현됨
  • PCA는 밀집 행렬에 대한 변환만 가능, SVD는 희소 행렬에 대한 변환 가능
  • SVD는 PCA와 유사하게 컴퓨터 비전 영역에서 이미지 압축을 통한 패턴 인식과 신호 처리 분야에 사용
  • 또한 텍스트의 토픽 모델링 기법인 LSA의 기반 알고리즘이기도 함

NMF

  • Truncated SVD와 같이 낮은 랭크를 통한 행렬 근사 방식의 변형
  • 원본 행렬 내의 모든 원소 값이 모두 양수라는 게 보장되면 더 간단하게 두개의 기반 양수 행렬로 분해될 수 있는 기법
  • 행렬 분해는 일반적으로 SVD와 같은 행렬 분해 기법을 통칭하는 것
  • 행렬 분해 시작고 넓은 행렬 H로 분해
    • 분해 행렬 W는 원본 행에 대해서 이 잠재 요소 값이 얼마나 되는지에 대응
    • 분해 행렬 H는 이 잠재 요소가 원본 열로 어떻게 구성 됐는지 나타내는 행렬
  • 일반적으로 길고 가는 행렬 w
  • SVD와 유사하게 차원 축소를 통한 잠재 요소 도출 (이미지 변환 및 압축, 텍스트의 토픽 도출 영역에서 사용….→이미지 압축을 통한 패턴 인식, 텍스트의 토픽 모델링 기법, 문서 유사도 및 클러스터링
  • 또한 영화 추천과 같은 추천 영역에 활발하게 적용

정리

  • 차원 축소는 단순히 피처의 개수를 줄이는 개념보다는 데이터를 잘 설명할 수 있는 잠재적인 요소를 추출
  • PCA
    • 입력 데이터의 변동성이 가장 큰 축을 구함
    • 다시 이축에 직각인 축을 반복적으로 축소하려는 차원 개수만큼 구함
    • 입력 데이터를 이 축들에 투영해 차원을 축소

이를 위해 입력 데이터의 공분산 행렬을 기반으로 고유 벡터를 생성 후 이렇게 구한 고유 벡터에 입력 데이터를 선형 변환하는 방식

  • LDA
    • PCA와 매우 유사한 방식이며, PCA가 입력 데이터 변동성의 가장 큰 축을 찾는데 반해 LDA는 입력 데이터의 결정 값 클래스를 최대한으로 분리할 수 있는 축을 찾는 방식
  • SVD, NMF
    • 매우 많은 피처 데이터를 가진 고차원 행렬을 두 개의 저차원 행렬로 분리하는 행렬 분해 기법
    • 특히 이러한 행렬 분해를 수행하면서 원본 행렬에서 잠재된 요소를 추출하기 때문에 토픽 모델링이나 추천 시스템에사 활발히 사용

 

' > 머신러닝 완벽가이드' 카테고리의 다른 글

텍스트 분석/추천시스템  (0) 2024.05.06
군집화  (0) 2024.05.06
분류  (0) 2024.05.06
추천 시스템  (1) 2024.01.07
텍스트 분석  (1) 2024.01.06