머신러닝으로 머신는척 하기

망고🥭져도 좋아·2021년 6월 21일
0

아이팅(IT+파이팅)

목록 보기
2/5
post-thumbnail

book_만화로 쉽게 배우는 머신러닝

사실 이거 만화임ㅎ...그래서 간신히 봤지
암튼 대강이라도 안다는 게 중요하지 따봉


  • 이 책에서의 목표
    • 대체, 머신러닝이 뭔데?
    • 이 단어 정도는 알아들어야지
    • 만약에 머신러닝 일하면 기획자가 해야하는 사고는 과연 어디까지?
    • 나머지 수식, 코딩이 와랄라라라ㅏ 나오면 과감히 넘어간다!

그래도 나름 모아보니 내용은 많네
함 훑어나 바유~


일단 머신러닝 한 마디로,

입력 데이터를 바탕으로 예측모델을 구축, 학습 하는 프로그램
크게보면 데이터 마이닝도 포함됨

데이터 마이닝 ?
: 빅데이터에서 유의미한 경향을 찾는 것


머신러닝의 종류

  1. 지도 학습
    • 정답이 있는 데이터
    • 출력 값에 따라서 회귀/분류로 나뉜다.
    • 데이터를 주고 딥러닝(심화학습) 을 시킴
      • 회귀 문제 : 출력 값이 숫자인 경우, y = f(x) 로 관계를 만들 수 있는 거
      • 분류 문제 : 출력 값이 Yes or No 의 해답인 경우

요지피셜
'회귀' 뜻이 뭔가 항상 궁금했는데, 수학 회귀 이론 발견? 만든? 가설이
부모와 자녀의 키사이에는 선형적인 관계가 있는데, 이 관계들을 모아보면 결국 전체 키 평균으로 돌아가려는 경향 이 있다는 거임.
결국,
" 어떤 값(x) 에 따라서 결과 값(y)이 일정하게 도출되는 것 "
이걸 수식으로 만들 수 있으면 회귀

  1. 중간적 학습
  • 우승을 하면 보수를 주는 식으로 학습
  • = 강화학습
  1. 비지도 학습
  • 정답이 없는 데이터 (바람직한 출력 값이 주어지지 않음)
  • 과거의 구입 기록을 토대로 상품 추천 기능 등..어떤 데이터가 도움이 되는 지식인지를 찾아내는 것?
  • 클러스터링, 행렬 분해 등 데이터 흐름을 찾아내어 학습

1. 지도 학습

  • 회귀 문제

    • 여기서 예측하려는 결과가 목표변수(y), 결과에 작용하는 요인이 설명변수(x,z...복수 개 가능)
    • 선형 회귀는 설명변수에 가중치를 주어 다 더하는 방식 (w1x1 + w2x2 + w3x3 + ...)
      • 선형 회귀에서 메인 변수를 알아내는 방법 : 1개 빼고 나머지 가중치를 0에 가깝게 만듬
      • = 정칙화
        • Ridge 회귀 : 가중치 큰 값을 최대한 줄인다.
        • Lasso 회귀 : 가중치 0 이되는 값을 많도록 한다.
  • 분류 문제

    • 데이터를 분류하는 과정

      1. 데이터 정리 (빠지거나 보정 필요한 것들)

      2. 데이터 클래스 예측 (음성, 문자의 인식, Positivie/Negative 판정 등 정례와 비정례 값으로 구분함)

      3. 로지스틱 분류 (입력 가중치를 조정해서 정례.비정례를 수치로 만듬, 회귀분류임)

        • 시그모이드 함수를 사용함
          • 데이터 분류를 할 때, 값이 극단적으로 커지거나 작아질 가능성이 있으면 확률에 대응하기 어려워서
          • 모든 값이 0에서 1사이가 되도록 만드는 것 : 시그모이드 함수
      4. 결정나무

        • 트리 구조처럼, 노드와 리프로 표현하고,

        • 정례인 리프 값으로 가는 노드(조건들)들을 AND 로 결합하면 논리식이 됨

          • 노드(절) : 데이터 분류하는 질문
          • 리프(잎) : 분류 결과
        • 노드를 어떻게 짜야 효율적일까?
          -= 불순도와 정보량을 이용하여 수치화함

          불순도 : 어느 데이터 집합에서 y/n 값이 나오는 경우를 맞히기 어려운 정도 (클래스 분류가 안 되어있을 경우)
          정보량 : 어느 데이터 집합으로부터 y/n 결과로 얻어진 정보양 (유의미한 정보 양)
        • 트리가 짧고 단순할수록 우연일 확률이 낮아짐

        • Overfitting 을 주의해야 함 (결정나무에서 학습 데이터에 지나치게 적응해 있어서, 새로운 데이터를 넣어도 원하는 답으로 뽑아낼 수 있음)


2. 결과의 평가

  • 분류 모델의 학습 데이터 정확도가 100%이어도, 테스트 데이터로 평가하지 않으면 의미가 없다.

  • → 미지 데이터의 성능을 구하기 위해, Raw data 구분해서, 테스트 데이터를 남겨둬야 함

  • Raw data 구분하기

    1. 학습용 데이터
    2. 테스트용 데이터
    3. 검증용 데이터
    • 데이터 양이 충분치 않을 때는, 테스트용 데이터를 학습용 데이터 중간 중간에 넣어서 여러번 돌려서 여러 정확도의 평균 값으로 구함
  • 성능을 평가하는 방법

    • Negative : 적합하지 않은 데이터

    • Positive : 적합한 데이터

    • 정확성, 정밀도, 재현률을 종합적으로 따지기 위한 값 = F1 Score

      • 정밀도와 재현률은 서로 반비례라 어느 한 지표만 높일 수 없음
    • F1 Score x (Precision x Recall / Precision + Recall)

요지피셜
이 수식을 조화평균이라고 하는데, 그냥 산술평균 (a+b/2) 이 안되는 이유는,
평균적인 변화율 을 구해야 하기 때문임.
(왔다 갔다의 평균속도 구할 때 속도/2 하면 안되는 것 처럼)

  • 혼동행렬로 평가지표 만들기
    • 맞춘 것 = 30+40, 틀린 것 = 10+20
    • 가능한 평가지표 : 정확성, 정밀도, 재현도
  1. 정확성(Accuracy)
    : 전체 결과 중, 올바른 예측이 얼만큼이었나

    TP+TN / (TP +TN+FP+FN)

    eg) 30+40 / (30+20+10+40)
  2. 정밀도(Precision)
    : 긍정으로 예측한 것 중에, 실제 긍정이 얼만큼인가

    = TP / (TP+FP)

    eg) 30 / 30+10 
  3. 재현률 (Recall)
    : 실제 긍정 중에, 긍정 예측된 게 얼만큼인가

    = TP / (TP+FN)

    eg) 30 / 30+20

3. 딥러닝

  • 심층학습
  • 다층 뉴럴 네트워크를 이용한 수법중 하나,
  • 화상, 음성, 자연언어 처리에 유용하다

뉴럴 네트워크?

  • 생물세포의 뉴런처럼 서로 시냅스를 통해 신호를 주고 받음

    1. 전기신호를 받아서 일정 값에 도달하면 자기도 새로운 신호를 보냄
    2. 입력의 가중치 합에서 임계값이 특정 값에 도달하면 출력함 (1또는 0)
  • 이런 모델 유닛들이 연결된 것이 뉴럴 네트워크 모델

  • 3개의 층으로 구성됨 (실제로 수치 계산을 하는 건 은닉, 출력 층만)

    1. 입력층 : 입력 정보를 그대로 출력함
    2. 은닉층 : 신호에 가중치가 더해져 들어오고, 이 합을 출력함
    3. 출력층 : 클래스 식별
  • 뉴럴 네트워크 모델은 앞으로만 진행함 (출력 쪽으로만 연결되어있어서 입력 쪽으로 돌아가는 피드백이 없음)

  • 뉴럴 네트워크의 계층을 심화하는 게, 딥 머신러닝

    1. 은닉층을 여러 층으로 만들기 (은닉 1 → 은닉 2 → ...)

    2. 은닉층에 적용가능한 태스크 늘리기 (노드 여러개, 모든 노드로 전파)

      → 이러면서 기울기가 0에 가까워져 무의미한 결과가 나옴 (학습을 하지 않음)

  • 딥 러닝에 필요한 처리 (위 문제를 해결하기 위한 방법)

    1. 다계층학습
      1. 사전학습법 : 오차역전파법을 이용해서 학습함
      2. 활성화 함수 : 활성화 함수를 시그모이드가 아니라, rectified linear 함수로 만듬
      3. 과적합 피하기 (드롭아웃) : 랜덤으로 유닛 삭제
    2. 특화된 구조일 경우, 그에 맞춤
      • 화상인식을 위한, 합성곱 뉴럴 네트워크 : 합성 + 풀링 + 합성 + 풀링 층으로 화상 필터를 만듬

딥러닝 보완하는 법

(앙상블 학습의 목표)

  • 어떻게 해서 독립적이게 행동하는 모델을 만들 것인가?
  1. 버깅

    학습데이터에서 복원 추출해서 다시 학습데이터로 씀

    이 학습데이터가 계속 선택되지 않을 확률 = (1-1/n)n승 = 1/e = 0.368..

    → 학습이 몇 번이든 약 30%의 데이터는 포함되지 않음

  2. 랜덤 포레스트

    여러개의 분류 트리가 학습 데이터의 특징을 랜덤으로 선택해서 다른 트리를 만듬

  3. 부스팅

    오류 줄이는 거에 특화된 분류 모델을 여러개 추가함

4. 비지도학습

클러스터링

  • 비지도 학습의 하나

  • 유사한 데이터를 묶고, 각 그룹 간 경계를 짓는 것

  • 클러스터링 방식

    1. 계층적 클러스터링 : 개개의 데이터가 유사한지를 비교해서 올라가는 bottom up
    2. 분할 최적화 클러스터링 : 전체 데이터 흩뜨려서 최적의 분할 지점 찾기
  • 계층적 클러스터링

    • 가까운 클러스터를 융합해서 점점 크게 만든다
    • 클러스터 간 유사도 (거리)를 측정해야 하는데, 이 방식도 여러개임
      • 단련결함, 완전연결법, 중심법, ward법...
  • 분할 최적화 클러스터링

    • 데이터 분할의 좋음을 평가하는 함수를 정하고, 그 함수 값이 가장 좋은 걸 모델링 함

    • 수법

      1. k-means

        각 클러스터의 평균 벡터 k개를 난수로 생성해서,

        각 클러스터 중심으로 가까운 데이터를 흡수함, 평균 벡터가 움직이지 않을 때까지 반복

        → 국소적인 결과를 얻고 모델 학습을 중지할 위험도 있음

      2. EM 알고리즘

        각 클러스터에 k개의 정규 분포를 난수로 정해서,

        적당한 비율로 각 클러스터에 계산해보고, 완만하면 소속함

행렬 분해

  • 원래 행렬 데이터를 쪼갰다가 다시 모델링
    eg. 사용자가 많이 구매하는 제품의 패턴 알기
  1. 원래 데이터 행렬 : N명의 사용자가 M종류의 상품을 구입한 데이터 → N x M = K

  2. 1에서 쪼갠 사용자 정보 : N x K = u

  3. 1에서 쪼갠 제품 정보 : M x K = v

  4. 원본과 오차가 최대한 적게, K = uv


노션에서 써서 수식이 뒤죽박죽이지만, 아무튼 됐다.
하 잔다 이제
ㅂ2

profile
나를 한 줄로 소개하지 못해서 시작했는데, 지금은 그냥 고망고일상

0개의 댓글