728x90
반응형

들어가기에 앞서


  • 선형회귀 : 두 데이터 간의 직선 관계를 찾아내 x값이 주어졌을 때 y값을 예측하는 것
  • 알고리즘 : 문제 해결을 위해 정해진 절차나 방법을 공식화한 형태로 표현한 것
  • 머신러닝 : 말 그대로 기계가 학습하는 것으로, 복잡한 문제를 손쉽게 풀기 위해 창안
  • 모든 문제는 풀이를 위해 먼저 입력값(input)과 출력값(output)을 정의해야 한다.
  • 데이터셋 : 기계가 실험해 본 데이터, 즉 입력값과 출력값의 set

머신러닝의 회귀(Regression)와 분류(Classification)


💡 문제마다 유리한 방식이 다르고, 문제를 회귀와 분류 중 무엇으로 정의할지는 사람의 몫이다.

  • 회귀 (Regression) : 출력값을 연속적인 소수점으로 예측하게 하도록 푸는 방법
  • 분류 (Classification)
    • 비연속적인 문제를 풀 때 사용하는 방법
    • 이진 분류(Binary classification) : 0이냐 1이냐와 같이 이진 클래스로 나뉘는 것
    • 다중 분류(Multi-class classification, Multi-label classification) : 라벨[클래스]이 여러개

머신러닝의 분류


  1. 지도 학습
    • 기계에게 입력값과 출력값을 모두 보여주면서 학습시킨다.
    • 출력값(정답)을 알기 때문에 정답 여부를 쉽게 파악할 수 있다.
    • 레이블링(Labeling) / 어노테이션(Annotation) : 입력값에 정답을 하나씩 입력해주는 작업이 필요하다.
  2. 비지도 학습
    • 정답을 알려주지 않고 군집화(Clustering)하는 방법 → 기계가 비슷한 것끼리 묶어 분류해 놓은 것에 명칭을 붙이는 식
    • 라벨(Label 또는 Class)이 없는 데이터를 가지고 문제를 풀어야 할 때 유리하다.
    • 지도 학습에 비해 학습 시간이 오래 걸리고 방법이 어렵다.
  3. 강화 학습
    • 주어진 데이터 없이 실행과 오류를 반복하면서 학습하는 방법으로, 여러개의 경우의 수를 학습하고 가장 좋은 보상을 주는 경우의 수를 찾는 방법이다.
    • 용어를 사용한 에시 : 가령 **자신(Agent)**이 게임 **환경(Environment)**에서 **현재 상태(State)**에서 **높은 점수(Reward)**를 얻는 방법을 찾아가며 **행동(Action)**하는 학습 방법으로 특정 학습 횟수를 초과하면 높은 점수(Reward)를 획득할 수 있는 전략이 형성된다. 단, 행동(Action)을 위한 행동 목록(방향키, 버튼) 등은 사전에 정의돼 있어야 한다.

선형 회귀 (Linear Regression)


  • 가설 (Hypothesis)
    • 임의의 직선 1개로 입력값과 출력값의 관계를 표현할 수 있다고 가설을 세울 수 있다.
    • 이러한 선형 모델의 수식 : $H(x) = Wx + b$
  • 선형 회귀 → 질문
    • 입력값과 출력값의 관계가 그래프에서 직선, 즉 선형으로 나타날 것이라는 가설을 세운 것. 즉 모든 문제를 선형으로 풀 수 있다고 가설을 세운 것이 선형 회귀이다.
    • 직선상의 값들은 가설에 의한 예측값에 해당한다.
  • 손실 함수 (Cost function / Loss function)
    • mean squared error : 임의의 직선(가설, 예측값)과 점(정답) 간 거리(→오차)를 제곱한 것의 평균
    • minimization / optimization : mean squared error를 최소화하는 것
    • 손실 함수 (Cost)의 수식 : $Cost = {{1\over N}\sum_{i=1}^{N}{(H(x_i) - y_i) ^ 2}}$
    • 손실 함수의 값이 작을수록 정확하게 예측한 것으로 본다.
  • 기계의 학습 방법
  • 입력값(x)을 넣어 H(x)(예측값, 질문)을 알아내고, H(x)와 정답값(y)의 차이를 계산하는데, 이때 선형 모델의 수식에서 W(weight, 보통 행렬[matrix] 형태)와 b(bias, 행렬 형태)를 바꿔가며 실험해보면서 cost가 최소가 되는 값을 찾는다.
  • 다중 선형 회귀 (Multi-variable linear regression) : 입력값이 2개 이상인 문제를 선형 회귀로 풀고 싶을 때 사용하는 방법

💡 머신러닝에서 모든 문제는 가설이 있어야만 풀 수 있다.

💡 엔지니어가 가설과 손실 함수를 미리 정의해 두면 기계가 그 가설에 맞게 문제를 풀게 된다. 이때 어떤 손실 함수가 좋은지는 반복 실험을 통해 찾아야 한다.

경사하강법 (Gradient descent method)

  • 예측값과 정답 間 오차의 최솟값을 찾을 때 사용하는 optimizer의 일종
  • 손실 함수가 위 사진과 같은 모양일 때, 최솟값을 찾기 위해 그래프를 따라 점점 아래로 내려가는 방법으로, literally 경사를 따라 내려가며 최솟값을 찾는 방식
  • initial weight : 랜덤으로 지정된 시작점 = 초기 위치
  • learning rate : 한번씩 움직이는 거리, 즉 間 거리
  • 기계는 initial weight부터 시작해 learning rate만큼 좌우로 조금씩 움직이면서 이전 값보다 작아지는지를 관찰한다. 최소점에 도달하게 되면 학습을 종료한다.

Learning Rate


  • learning rate가 작을수록 initial weight로부터 최소점을 찾는 시간, 즉 학습 시간이 오래 걸린다.
  • learning rate가 너무 크면 점이 최소값을 지나쳐 계속 진동하다가 끝내 최소값에 수렴하지 못하게 된다. 최악의 경우 발산(Overshooting)하게 될 수도 있다.출처 링크
  • 발산 (overshooting) : 진동하다가 튕겨나가서 무한대로 수렴하는 경우

Global Cost Minimum과 Local Cost Minimum

  • 복잡한 가설을 세워야 하는 선형 회귀 문제의 경우 손실 함수의 형태가 사람이 실제로 그릴 수 없는 형태가 된다.
  • global cost minimum : 손실 함수의 최소점
  • local cost minimum : 국지적인 최소점
  • initial weight가 랜덤으로 지정되고, 최솟값과 먼 곳에서 시작할 확률이 높으며, 경사’하강’법을 쓰기 때문에 잠깐 위로 올라가는 값에서 그 다음으로 넘어가지 못하고 다시 내려오게 되면서 local cost minimum에 수렴할 위험성이 존재한다.

데이터셋 분할

  • Training set (학습 데이터셋) like 교과서
  • : 전체 데이터셋의 약 80%를 차지하며, 머신러닝 모델을 학습시키는 용도로 사용한다.
  • Validation set (검증 데이터셋) like 모의고사
  • : 전체 데이터의 약 20%로, 머신러닝 모델의 성능을 검증 및 튜닝하는 지표 용도로 사용한다. 이 데이터는 정답 라벨이 있고 학습 단계에서 사용하긴 하지만, 모델에게 데이터를 직접 보여주진 않으므로 모델의 성능에는 영향을 주지 않는다.
  • Test set (평가 데이터셋) like 수능
  • : 정답 라벨이 없는 실제 환경에서의 평가 데이터셋

참고 사이트 모음


  • TensorFlow 공식 가이드 문서 : https://www.tensorflow.org/guide
  • Keras 공식 가이드 문서 : https://www.tensorflow.org/guide/keras/sequential_model
  • 데이터 사이언티스트를 위한 커뮤니티 kaggle : https://kaggle.com
  • 캐글 데이터셋 다운로드
    1. 로그인하고 내 프로필 클릭 > Account 탭 클릭하기
    2. API - Create New API Token 클릭해서 kaggle.json 파일 다운로드 받기
    3. 브라우저에서 파일을 열어 username과 key 복사하기
    4. 환경변수 지정하기
    5. import os os.environ['KAGGLE_USERNAME'] = '[내_캐글_username]' # username os.environ['KAGGLE_KEY'] = '[내_캐글_key]' # key #{"username":"leegeumbin","key":"b516fbe3d3376cf82aa0a55c7e1c7202"}} #{"username":"kairess","key":"7d0443b2dfffc57c94271fd797511896"}}
    6. kaggle에서 원하는 데이터셋 검색 (예: https://www.kaggle.com/ashydv/advertising-dataset)
    7. [Copy API command] 버튼 클릭 (New Notebook 옆에 ... 버튼 클릭)
    8. 코드 셀에 붙여넣고 실행! (맨 앞에 "!" 꼭 붙이기)
    9. !kaggle datasets download -d ashydv/advertising-dataset
    10. 데이터셋 압축 풀기
    11. !unzip /content/advertising-dataset.zip #경로를 입력해주면 압축을 풀어준다. #csv 확장자명의 파일을 더블클릭해주면 미리보기도 할 수 있다.

선형회귀 실습하기


import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam, SGD

x_data = np.array([[1], [2], [3]])
y_data = np.array([[10], [20], [30]])

#모델을 정의한다.
model = Sequential([
  Dense(1)
])

#모델을 컴파일 구성을 해준다.
model.compile(loss='mean_squared_error', optimizer=SGD(lr=0.1))

#모델을 정의했으니까 이제 모델을 학습시킨다.
model.fit(x_data, y_data, epochs=100) # epochs 복수형으로 쓰기!
#fit이라는 명령어로 학습이 시작되는데, 인자로 x_data, y_data, 몇 번을 반복시킬 건지가 들어간다.
  • 출력내용 보기
    #테스트 데이터 예측하기
    y_pred = model.predict([[4]])
    # 인수로 x값을 넣어주게 되면 y_pred에 우리가 예측한 값, 즉 4를 넣었을 때 무엇이 나왔는가 하는 예측값을 쓰게 된다.
    print(y_pred)
    #출력하게 되면 [[39.743465]]와 같은 값이 나오게 된다. 5를 넣으면 [[49.594902]]와 같은 값이 나온다.
    

keras 실습 하나 더 있었는데 생략

반응형

'Programming > TIL and WIL' 카테고리의 다른 글

221013 Today I Learned (TIL)  (1) 2022.10.13
221012 Today I Learned (TIL)  (0) 2022.10.13
221010 Weekly I Learned (WIL)  (0) 2022.10.11
221009 Today I Learned (TIL)  (0) 2022.10.09
221006 TIL - 프로젝트 피드백 및 팀 회고  (2) 2022.10.07

+ Recent posts