[AI] 머신러닝(Machine Learning, ML)

아현·2024년 10월 11일
0

AI

목록 보기
6/7

<읽어보면 좋은 글 - Don't learn machine learning - 머신러닝 공부하지 마세요!>


1. Machine Learinig 이란?


  • 머신 러닝(Machine Learning) : 단어 그대로 기계를 학습한다.
    1. 머신(Machine)이란?

      • 인간이 제공한 데이터를 표현할 수 있는 모델(함수)
    2. 학습(Learning)이란?

      • 데이터를 가장 잘 표현할 수 있는 모델을 찾는 것(모델의 파라미터 최적화)
  • 통계적인 방법 혹은 경사하강법을 이용해 최적의 파라미터를 찾음
      



2. 용어 정리


데이터의 구성


  • 데이터는 피처(feature)라벨(label)로 구성됨

    • 이는 독립 변수종속 변수로도 불림
  • 라벨은 y로 표기하며, 라벨의 유무로 지도학습, 비지도학습을 구분함



Feature(=attribute, 피처)


  • 데이터 X의 특징, 혹은 항목을 의미

    • ex) 혈압, 몸무게, 나이
  • N : 데이터 샘플 개수, D: 피처의 개수



Parameter(weight, 파라미터, 가중치)


  • 주어진 데이터(입력값) 말고, 모델이 가지고 있는 학습 가능한 파라미터

    • ex ) w_0, w_1,…, w_D
  • 심장병 발생에 혈액형, 나이, 성별이라는 feature가 있을 때 각각의 feature가 심장병 발생에 끼치는 영향력



4)  Hyperparameter(하이퍼 파라미터)


  • 모델 학습에 있어, 인간이 정해야하는 변수

  • 학습률, 배치 크기 등등



3. 머신러닝의 학습 방법


3-1. 지도학습(Supervised Learning)


  • 지도학습은 말 그대로 정답이 있는 데이터를 활용해 데이터를 학습시키는 것.

  • 입력값(X)이 주어지면 입력값에 대한 Label(Y)를 주어 학습시키며 대표적으로 분류, 회귀 문제가 있다.

    • ex) 입력 데이터 X에 22, 45 등을 주고 라벨 데이터 셋을 입력 데이터 셋의 정답인 4, 20등을 주면 해당 모델은 주어지지 않은 데이터 5*5 등의 정답을 해결할 수 있다.



분류(Classification)


  • 분류는 주어진 데이터를 정해진 카테고리(라벨)에 따라 분류하는 문제를 말한다.

  • O, X여부를 판별하는 이진분류 문제, 사과, 바나나, 포도 등 2가지 이상으로 분류하는 다중 분류 문제가 있다.

    • ex) 입력 데이터로 메일을 주고 라벨을 스팸메일이다, 아니다를 주면 모델이 스팸메일을 분류할 수 있음



회귀(Regression)


  • 회귀는 어떤 데이터들의 Feature를 기준으로, 연속된 값(그래프)을 예측하는 문제로 주로 어떤 패턴이나 트렌드, 경향을 예측할 때 사용된다.

    • 분류와 다르게 예측값이 어떤 수나 실수로 표현된다.

      • ex) 예를 들면, 서울 20평대 아파트 가격, 30평대 아파트 가격, 지방의 20평대 아파트 가격 등의 입력 데이터를 통해 어떤 지역의 20평대 아파트 가격을 예측할 수 있다.



앙상블 기법(Ensemble Learning)


  • 앙상블 기법 이란 여러 개의 개별 모델을 조합하여 최적의 모델로 일반화 하는 방법.

  • Weak classifier 들을 결합하여 strong classifier를 만드는 것.

  • 앙상블 기법에는 voting, bagging, boosting, stacking이 있다.


  • 보팅(Voting)

    • 보팅은 다양한 머신 러닝 알고리즘들이 투표를 통해 결합하여 예측을 수행하는 방법이다.

      • 보팅은 주로 분류(Classification)문제에서 사용된다.
    • 보팅은 크게 하드 보팅과 소프트 보팅으로 나뉜다.

      1. 하드 보팅

        • 여러 모델이 각각의 예측 결과를 투표하여 가장 많이 선택된 클래스를 최종 예측으로 선택(다수결의 원칙)
      2. 소프트 보팅

        • 모든 모델의 예측 확률의 평균을 계산하고, 평균적으로 가장 높은 확률을 갖는 클래스를 선택.
    • 예측 결과에 대한 확률을 고려하여 최종 예측을 수행하므로, 소프트 보팅이 더 선호된다.


  • 베깅 (bagging)

    • 부스트랩을 집계 (Boostrap aggregating)

      • 배깅은 부스트랩을 집계 하여 학습 데이터가 충분하지 않더라도 충분한 학습 효과를 주어 높은 bias의 underfitting 문제나, 높은 variance로 인한 overfiting 문제를 해결하는데 도움을 준다.
    • 각각의 분류기들이 학습 시 상호 영향을 주지 않은 상황에서 학습이 끝난 다음 결과를 종합하는 기법이다.

    • 배깅은 보팅과 비슷하게 보이지만 사진처럼 차이가 있다.

      • 보팅각각 다른 알고리즘을 이용한 분류기를 결합하는 방식으로 최종 예측 값을 투표하는 방식이다.

      • 배깅서로 같은 알고리즘을 이용한 분류기가 데이터 샘플링을 각자 다르게 가져가면서 학습을 수행하는 방식이다.

        • 대표적인 예시로 Random Forest가 있다.

  • 부스팅(boosting)

    • 부스팅 알고리즘은 여러 개의 학습기를 순차적으로 학습/예측 하면서 잘못 예측한 데이터나 학습 트리에 가중치를 부여해 오류를 개선해 나가면서 학습하는 방식이다.

    • 병렬적으로 처리해 평균을 내는 배깅과 달리 순차적으로 모델을 실행한다는 것이 다른 점이다.

    • 부스팅은 대표적으로 AdaBoost와 Gradient Boost(GBM) 그리고 GMB기반의 다른 모델인 XGBoost 등이 있다.

    • 각각의 모델마다 장단점이 있기 때문에 자신의 데이터 셋에 맞는 모델을 선정하는게 중요하다.



3-2. 비지도학습(Unsupervised Learning)


  • 비지도 학습은 레이블이 지정되지 않은 데이터 세트를 분석하고 군집화 한다.

    • 인간의 개입 없이 숨겨진 패턴이나 데이터 그룹핑을 감지한다.
  • 일반적인 비지도 학습 접근 방식은 아래 3가지가 있다.

    1. 군집화(Clustering)
    2. 연관(Associataion)
    3. 차원 축소(Dimensionality Reduction)
  • 군집화(Clustering)

    • 레이블이 지정되지 않은 데이터를 유사점 또는 차이점에 따라 그룹화 하는 기술.

    • 군집화 알고리즘 유형

      • 배타적 군집화 : 하나의 군집에 하나의 데이터 요소만 포함 (예 : K-평균 군집화)

      • 중첩적 군집화 : 데이터 요소가 여러 군집에 포함될 수 있음 (예 : 퍼지 K-평균 군집화)

      • 계층적 군집화 : 데이터 요소를 반복적으로 병합하거나 분리 (예 :HCA)

      • 확률적 군집화 : 특정 분포에 속할 가능성에 따라 군집화 (예 : 가우스 혼합 모델, GMM)

  • 연관 규칙 (Association Rules)

    • 특정 데이터 세트에서 변수 간의 관계를 발견하여 규칙을 생성하는 방법

    • 활용 예시 : 장바구니 분석, 추천 엔진 (예 : Amazon의 “이 상품을 구매한 고객이 함께 구입한 상품“)

    • 알고리즘 예시 : Apriori 알고리즘 – 빈발 항목 집합을 식별하고 소비 가능성을 예측

  • 차원 축소 (Dimensionality Reduction)

    • 목적 : 데이터의 많은 차원을 줄여 성능 최적화 및 시각화 용이성 증가

    • 방법

      1. 주성분 분석 (PCA)

        • 원리 : 데이터 변환을 통해 분산을 최대화하는 주성분 추출

        • 특징 : 중복 최소화, 데이터 압축

      2. 비정칙 값 분해(SVD)

        • 원리 : 행렬을 3개의 하위 행렬로 분해
      3. 오토인코더 (Autoencoder)

        • 특징 : 신경망을 사용한 데이터 압축 및 재생성

        • 구조 : 인코딩과 디코딩 단계로 나뉨 (입력 -> 압축 -> 출력)

  • 예제 코드


import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# 랜덤한 2D 데이터를 생성합니다.
np.random.seed(0)
X = np.random.rand(100, 2)

# K-평균 클러스터링을 사용하여 데이터를 군집화합니다.
k = 3  # 군집의 개수
kmeans = KMeans(n_clusters=k, random_state=0)
kmeans.fit(X)

# 각 데이터 포인트의 군집 레이블을 예측합니다.
labels = kmeans.labels_

# 각 군집의 중심점을 얻어옵니다.
centers = kmeans.cluster_centers_

# 데이터를 시각화합니다.
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', marker='o')
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75, marker='x')
plt.title("K-Means Clustering")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.show()



3-3. 강화학습


  • 강화학습은 머신러닝의 한 부류로, 비지도 및 지도 학습과 달리 정적 데이터셋에 의존하지 않고 역동적인 환경에서 수집된 경험을 통해 학습한다.

    • 이는 환경과 소프트웨어 에이전트 간의 시행착오 상호작용을 통해 데이터를 수집하기 때문에, 별도의 데이터 수집, 전처리 및 레이블 지정이 필요하지 않다.

    • 적절한 인센티브가 주어지면 강화학습 모델은 인간의 개입 없이 학습을 시작할 수 있다.

  • 강화학습의 주요 응용 분야

    1. 고급 제어 : 비선형 시스템을 제어하는 데 사용된다.

    2. 자율주행 : 카메라와 라이다 등의 센서를 기반으로 주행 결정을 내린다.

    3. 로봇공학 : 픽앤플레이스 등의 응용 분야에서 로봇 팔 학습에 사용된다. 또한 인간-로봇 및 로봇-로봇 협업에도 적용될 수 있다.

    4. 스케줄링 : 신호등 제어와 공장 리소스 배치 등 다양한 조합 최적화 문제에 활용된다.

    5. 보정 : ECU(Electronic Control Unit) 보정 등 파라미터의 수동 보정이 필요한 분야에 효과적이다.

  • 예제 코드

    • 캐릭터가 스스로 학습하며 길을 찾아간다.
import numpy as np
import gym
import warnings

# DeprecationWarning 무시
warnings.filterwarnings("ignore", category=DeprecationWarning) 

# FrozenLake 환경을 불러옵니다.
env = gym.make("FrozenLake-v1", is_slippery=False, render_mode='human')

# Q-테이블 초기화
Q = np.zeros((env.observation_space.n, env.action_space.n))

# 하이퍼파라미터들
learning_rate = 0.8
discount_factor = 0.95
num_episodes = 1000

# 탐험 및 탐사에 대한 설정(Epsilon-Greedy)
epsilon = 0.1
max_steps_per_episode = 100

# 학습 과정
for episode in range(num_episodes):
    state = env.reset()
    state = state[0] if isinstance(state, (tuple, list)) else state  # 상태가 튜플 또는 리스트인 경우 첫 번째 요소 선택
    done = False
    step = 0

    while not done and step < max_steps_per_episode:
        # Epsilon-Greedy 정책
        if np.random.uniform(0, 1) < epsilon:
            action = env.action_space.sample()
        else:
            action = np.argmax(Q[state, :])
        
        # 행동을 취하고 환경으로부터 보상 및 앞으로의 상태를 얻습니다.
        new_state, reward, done, truncated, _ = env.step(action)
        new_state = new_state[0] if isinstance(new_state, (tuple, list)) else new_state  # 상태가 튜플인 경우 첫 번째 요소 선택
        
        # Q-값 업데이트 식
        Q[state, action] = Q[state, action] + learning_rate * (reward + discount_factor * np.max(Q[new_state, :]) - Q[state, action])
        
        # 상태 업데이트
        state = new_state
        step += 1

# 학습이 끝난 후의 Q-테이블
print("훈련된 Q-테이블:")
print(Q)

# 환경에서 랜더링하면서 에이전트가 학습한 정책을 시각적으로 확인합니다.
state = env.reset()
state = state[0] if isinstance(state, (tuple, list)) else state  # 상태가 튜플인 경우 첫 번째 요소 선택
done = False
step = 0

env.render()

while not done and step < max_steps_per_episode:
    action = np.argmax(Q[state, :])
    new_state, reward, done, truncated, _ = env.step(action)
    new_state = new_state[0] if isinstance(new_state, (tuple, list)) else new_state  # 상태가 튜플인 경우 첫 번째 요소 선택
    env.render()
    state = new_state
    step += 1

env.close()



4. 참고 사항


  1. Y(라벨) ML 규칙 : 정답지를 모델에게 주면 안됨.

  2. 학습데이터 0.8, 테스트데이터 0.2. 둘다 X와 y가 존재함.

  3. 학습 시에는 무조건 학습데이터만 사용하고 평가데이터를 사용하면 안됨.

    • 평가 데이터를 모델 학습에 사용해선 안된다.

    • 학습 데이터에서는 y를 모델에게 주면 안된다.

      • 학습 데이터도 x로 예측만 시키고, 그 예측 값을 받아서 y와 비교하는 것.

      • 그리고 얼마나 틀렸는지 오류 값을 다시 머신에게 넘겨줌. 이걸 순환하면서 작동함.



profile
For the sake of someone who studies computer science

0개의 댓글