Development Project

[ 2021 NIPA AI - 응용 ] 1. 머신러닝 시작하기 (01~05) + α 본문

AI/Edu

[ 2021 NIPA AI - 응용 ] 1. 머신러닝 시작하기 (01~05) + α

나를 위한 시간 2021. 12. 11. 13:49

00 인공지능/머신러닝 개론

  • 도입
    • BIG DATA를 다루기 위한 방법으로 IoT, 클라우드, 머신러닝 기술 등이 있음
    • 머신러닝
      • 개념
        • 기존 통계학 및 시각화 방법의 한계를 해결함
        • 명시적으로 프로그래밍을 하지 않고도 컴퓨터가 학습할 수 있는 능력을 갖게 하는 것
      • 머신러닝 학습방법
        • 지도학습 (입력과 결과를 이용) => 데이터가 무엇인지 알려주고(예시를 줌) 맞추라고 함
          • 회귀분석, 분류 존재
        • 비지도 학습 (입력만을 이용)
          • 군집화, 압축 존재
        • 강화학습 (결과값 대신 보상이 주어짐)
          • Action Selection, Policy Learning

01 자료 형태의 이해

  • 자료형태 구분 
    • 수치형 자료 (Numerical data)
      • 개념 
        • 양적 자료 (Quantitative data)
        • 수치로 측정이 가능한 자료
        • 수치형 자료를 구간화 하면 범주형 자료
      • 구분
        • 연속형 자료 (Continuous data)
          • 연속적인 관측값을 가짐
          • ex) 원주율, 시간
        • 이산형 자료 (Discrete data)
          • 셀 수 있는 관측값을 가짐
          • ex) 주문 상품 개수
      •  자료 요약
        • 필요성
          • 많은 양의 자료를 의미 있는 수치로 요약하여 대략적인 분포상태를 파악 가능
        • 방법
          • 평균 (m)
            • import numpy as np
              np.mean()​
            • 관측값들을 대표할 수 있는 통계값
            • 수치형 자료의 통계값 중 가장 많이 사용되는 방법
            • 극단적으로 큰 값이나 작은 값의 영향을 많이 받음
          • 분산 (v)
            • from statistics import variance
              variance()
            • 자료의 평균으로 부터 떨어진 정도를 숫자로 표현한 것
          • 표준편차 (s)
            • from statistics import stdev
              stdev()
            • 분산의 양의 제곱근
        • 그래프 표현 방식
          • 히스토그램 
            • # X축 : 계급 / Y축 : 빈도
              import matplotlib.pyplot as plt
              plt.hist()
            • 수치형 자료를 일정한 범위를 갖는 범주로 나누고 막대그래프와 같은 방식으로 나타냄
    • 범주형 자료 (Categprocal data)
      • 개념
        • 질적 자료 (Qualitative data)
        • 수치로 측정이 불가능한 자료
        • 범주형자료를 숫자로 표현할 수 있지만, 숫자로 표현되었다해서 무조건 수치형 자료인것은 아님!
      • 구분
        • 순위형 자료 (Ordinal data)
          • 범주 사이의 순서에 의미가 있음
          • ex) 학점
        • 명목형 자료 (Norminal data)
          • 범주 사이의 순서에 의미가 없음
          • ex) 혈액형
      • 자료 요약
        • 필요성 
          • 다수의 범주가 반복해서 관측되므로, 각 범주에 속하는 관측값의 개수를 측정
          • 관측값의 크기보다 포함되는 범주에 관심 多 => 전체에서 차지하는 각 범주의 비율 파악 필요
          • == 효율적으로 범주간의 차이점을 비교 가능
        • 방법
          • 도수분포표(Frequency Table)
            • 범주형 자료에서 범주와 그 범주에 대응하는 도수, 상대도수를 나열해 표로 만든것
          • 도수(Frequency)  
            • 각 범주에 속하는 관측값의 개수
            • value_counts()
          • 상대도수(Relatice Frequency)
            • 도수를 자료의 전체개수로 나눈 비율
            • value_counts(normalize=True) 
        • 그래프 표현 방식
          • 막대그래프
            • # X축 : 범주의 나열 / Y축 : 도수에 대한 눈금
              import matplotlib.pyplot as plt
              plt.bar()
            • 각 범주가 가지는 도수의 크기차이를 비교하기 쉬움
            • 단, 각 범주가 차지하는 비율의 비교는 어려움

 


02 데이터 전 처리하기

  • 데이터 전처리의 필요성
    • 대부분의 머신러닝 모델은 숫자 데이터를 입력받지만, 실제 데이터는 여러 형태로 존재
    • 전처리를 통하여
      • 머신러닝 모델이 이해할 수 있는 수치형 자료로 변환
      • 결측값 및 이상치를 처리하여 데이터 정제
      • 학습용 및 평가용 데이터 분리
  • 전처리 방법 
    • 수치형 자료의 전처리
      • 자료 변환 방식
        • 스케일링(Scaling) - 정규화(Normalization) - 표준화(Standardization)
          • 스케일링(Scaling)
            • 변수 값의 범위 및 크기를 변환하는 방식
            • 변수 간의 범위 차이가 나면 사용
          • 정규화(Normalization)
            • X' = ( X - X_min ) / ( X_max - X_min )
          • 표준화(Standardization)
            • X' = ( X - 평균 μ ) / 표준편차 σ
        • 범주화
          • 변수의 값보다 범주가 중요한 경우 사용
    • 범주형 자료의 전처리
      • 범주의 크기가 의미 없다면 명목형 자료, 크기가 의미 있다면 순서형 자료로 구분
      • 명목형 자료의 전처리
        • 수치 맵핑 방식
          • 2개라면 (0, 1)로 맵핑 / 3개 이상인 경우, 수치의 크기 간격을 같게 하여 수치 맵핑
        • 더미(Dummy) 기법
        • # 혈액형 데이터를 더미변수로 바꾸는 예시
          from pasty import dmatrix
          df = pd.DataFrame(["A", "B", "AB", "O"], column=["x"])
          # 문자열에 0을 추가하는 이유 : 상수항이 생기지 않도록
          dmatrix("x + 0", df)​
           
        • 더미 기법을 사용하여 각 범주를 0또는 1로 변환
      • 순서형 자료의 전처리
        • 수치 맵핑 방식
          • 수치에 맵핑하여 변환하지만, 수치 간 크기 차이는 커스텀 가능
          • 단, 크기 차이가 머신러닝 결과에 영향을 끼칠 수 있음
    • 공통 처리
      • 결측값(missing data)
        • = Null, None, NaN 값
          • 처리 방법
            • 결측값이 존재하는 샘플 삭제
            • 결측값이 많이 존재하는 변수 삭제
            • 결측값을 다른 값으로 대체
      • 이상치(Oulier) 처리
        • 이상치가 있으면, 모델의 성능을 저해할 수 있음
        • 이상치는 일반적으로 전 처리 과정에서 제거하며, 어떤값이 이상치인지 판단하는 기준이 중요
          • 처리 방법
            • 데이터 분포를 보고 직접 판단
            • 통계 지표(카이제곱검정, IQR 지표 등)를 사용하여 판단
            • 머신러닝 기법을 사용하여 이상치 분류
      • 데이터 분리
        • 머신러닝 모델을 평가하기 위해서는 학습에 사용하지 않은 평가용 데이터가 필요
        • 학습데이터 : 평가용 데이터 = 7 : 3 or 8 : 2 사용
        • 지도학습의 경우 Feature 데이터와 Label 데이터로 구분
          • Feature 데이터 : label을 예측하기 위한 입력 값
          • Label 데이터 : 예측해야 할 대상이 되는 데이터

 


03 지도학습 - 회귀

  • 데이터를 가장 잘 설명하는 모델을 찾아 입력값에 따른 미래 결과값을 예측하는 알고리즘
  • 종류
    • 단순 선형 회귀
      • 입력값이 1개인 경우에만 적용 가능
      • 데이터를 설명하는 모델을 직선형태 [ Y = β_0 + β_1 * X ]로 가정
      • 실제값과 예측값의 차이의 제곱의 합으로 비교
        • Loss함수
          • 실제값과 예측값의 차이를 제곱하여 평균을 구한 함수
          • β_0( y절편 ), β_1( 기울기 ) 값을 조절하여 Loss 함수의 크기 조절 가능 
          • Loss 함수가 작을 수록 좋은 모델
        • Loss함수의 크기를 작게할 수 있는 방법
          • Gradient descent (경사하강법) 
            • β_0, β_1값을 랜덤하게 초기화
            • 현재 β_0, β_1값으로 Loss 값 계산
            • 현재 β_0, β_1값을 어떻게 변화해야 Loss값이 작아지는지 알수있는 Gradient값 계산
            • Gradient값을 활용하여 β_0, β_1값 업데이트
            • Loss 값의 차이가 거의 없을때까지 위의 과정을 2~4번 반복
          • Normal equation (least squares)
          • Brute force search
          • ..etc
    • 다중 선형 회귀
      • 여러개의 입력값과 결과값간의 관계 확인 가능
      • but) 여러개의 입력값 사이 간의 상관 관계가 높을 경우, 결과에 대한 신뢰성을 잃을 가능성이 있음
      • 데이터를 설명하는 모델을 [ Y = β_0 + β_1 * X_1 + β_2 * X_2 + β_3 * X_3 + ... + + β_m * X_m ]로 가정
      • 실제값과 예측값의 차이의 제곱의 합으로 비교
        • Loss함수
          • 실제값과 예측값의 차이를 제곱하여 평균을 구한 함수
          • β_0, β_1, β_2, ..., β_m 값을 조절하여 Loss 함수의 크기 조절 가능 
          • Loss 함수가 작을 수록 좋은 모델
        • Loss함수의 크기를 작게할 수 있는 방법
          • Gradient descent (경사하강법) 
            • β_0, β_1, β_2, ..., β_m값을 랜덤하게 초기화
            • 현재 β_0, β_1, β_2, ..., β_m값으로 Loss 값 계산
            • 현재 β_0, β_1, β_2, ..., β_m값을 어떻게 변화해야 Loss값이 작아지는지 알수있는 Gradient값 계산
            • Gradient값을 활용하여 β_0, β_1, β_2, ..., β_m값 업데이트
            • Loss 값의 차이가 거의 없을때까지 위의 과정을 2~4번 반복
  • 회귀 알고리즘 평가
    • 목표를 얼마나 잘 달성했는지 정도를 알아야 어떤 모델이 좋은 모델인지 평가가 가능함
    • 평가지표(실제 값과 모델이 예측하는 값 차이에 기반한 평가방법) 종류
      • RSS (단순오차) ==실제값과 예측값의 단순 오차 제곱의 합
        •  
        •  
        • 값이 작을수록 모델의 성능이 높음
        • 가장 간단한 평가 방법으로 직관적인 해석이 가능
        • but) 오차를 그대로 이용 => 입력값의 크기에 의존적
        • 절대적인 값과의 비교는 불가능
      • MSE(Mean Squared Error) == 평균 제곱 오차
        • RSS에서 데이터의 수만큼 나눈 값
        • 값이 작을수록 모델의 성능이 높음
        • but) 평균값을 그대로 이용 => 입력값의 크기에 의존적
        • 절대적인 값과 비교가 불가
        • 이상치에 민감
      • MAE(Mean Absolute Error) == 평균 절댓값 오차
        • 실제 값과 예측값 오차의 절대적인 평균
        • 값이 작을수록 모델의 성능이 높음
        • 변동성이 큰 지표와 낮은 지표를 같이 예측시 유용한 지표
        • but) 평균값을 그대로 이용 => 입력값의 크기에 의존적
        • 절대적인 값과 비교가 불가
      • R² (결정계수) == 회귀 모델의 설명력을 표현하는 지표
          • TSS == 데이터 평균값과 실제값 차이의 제곱
        • 1에 가까울수록 높은 성능의 모델
        • 값이 0인 경우 데이터의 평균 값을 출력하는 직선 모델을 의미
        • 음수 값이 나온 경우, 평균값 예측 보다 성능이 좋지 않음
      • MAPE

 


04 지도학습 - 분류

  • 주어진 입력 값이 어떤 클래스에 속할지에 대한 결과 값을 도출하는 알고리즘
  • 종류
    • 트리 구조 기반
      • 의사결정나무
        • 개념 
          •  
          • 스무고개와 같이 특정 질문들을 통해 정답을 찾아가는 모델
          • 최상단의 뿌리 마디에서 마지막 끝 마디까지 아래방향으로 진행
        • 좋은 분리기준 찾기
          • 불순도 ==다른 데이터가 섞여 있는 정도
            • 지니 불순도 (Gini Impurity)
              • Gini Impurity = ( n_1 / N ) * Gini_Index_1 + ( n_2 / N ) * Gini_Index_2
              • n_i = i번째 자식 마디의 데이터 개수 / N : 부모 마디의 데이터 개수 
                • 지니계수 (Gini Index) 
                  • 해당 구역 안에서 특정 클래스에 속하는 데이터의 비율을 모두 제외한 값 => 다양성을 계산
                  • Gini Index = 1 - (yes의 확률)² - (no의 확률)²
              • 가장 낮은 Gini Impurity를 갖는 기준을 선택
          • trade-off
            • 의사결정나무의 깊이가 깊어질수록 세분화해서 나눌 수 있으나, 너무 깊은 모델은 과적합(Overfitting)을 야기 (지양)
        • 의사결정나무의 특징
          • 결과가 직관적이며, 해석 용이
          • 학습이 끝난 트리의 작업속도는 매우 빠름
          • 깊이가 깊어질수록 과적합( Overfitting )문제 발생 가능성 높음
      • 랜덤포레스트
    • 확률 모델 기반
      • 나이브 베이즈 분류기
    • 결정 경계 기반
      • 선형분류기
      • 로지스틱 회귀 분류기
      • SVM
    • 신경망
      • 퍼셉트론
      • 딥러닝 모델
  • 적합한 모델인지를 판단하는 평가지표
    • 요약
      • 혼동행렬 (Confusion Matrix) : 분류 결과를 전체적으로 보고 싶을 때
      • 정확도 (Accuracy) : 정답을 얼마나 잘 맞췄는지
      • 정밀도 (Precision) : FP의 중요도가 높을 때
      • 재현율 (Recall) : FN의 중요도가 높을 때 
    • 혼동행렬(Confusion Matirx)
      • TP (True Positive) : 실제 Positive인 값을 Positive라고 예측 == 정답
      • TN (True Negative) : 실제 Negative인 값을 Negative라고 예측 == 정답
      • FP (True Positive) : 실제 Negative인 값을 Positive라고 예측 == 1형 오류
      • FN (True Negative) : 실제 Positive인 값을 Negative라고 예측 == 2형 오류
    • 정확도(Accuracy)
      • 일반적으로 분류 모델의 주요 평가 방법으로 사용됨
      • 전체 데이터 중에서 제대로 분류된 데이터의 비율로, 모델이 얼마나 정확히 분류하는지 나타냄
      • but) 클래스 비율이 불균형 할 경우, 평가 지표의 신뢰성을 잃을 가능성 있음
    • 정밀도(Precision) => Negative가 중요한 경우 사용
      • 모델이 Positive라고 분류한 데이터 중에서 실제로 Positive인 데이터의 비율
      • 즉, 실제로 Negative인 데이터를 Positive로 판단하면 안되는 경우 사용되는 지표
      • ex) 스팸 메일이면 Positive, 일반 메일이면 Negative라 했을 때
    • 재현율(Recall, TPR) => Positive가 중요한 경우 사용
      • 실제로 Positive라고 분류한 데이터 중에서 모델이 Positive인 데이터의 비율
      • 즉, 실제로 Positive인 데이터를 Negative로 판단하면 안되는 경우 사용되는 지표
      • ex) 악성 종양이면 Positive, 양성 종양이면 Negative라 했을 때
Comments