인공지능/머신러닝

[머신러닝 - 이론] 머신러닝의 기초 (Fundamental of Machine Learning)

바보1 2022. 4. 8. 00:28

1. 머신러닝 기초

 

머신러닝에서 데이터는 중요합니다.

차가 가기 위해 연료가 필요하듯 머신러닝에는 데이터가 필수적입니다.

데이터가 없으면 머신러닝을 적용할 수가 없습니다. 아무것도 가르쳐 주지 않고, 예측하라는 것과 마찬가지입니다. 

 


2. 용어 및 예시

 

데이터 셋 (Data Set) : 머신러닝이 사용하는 데이터는 여러 개의 샘플을 담고 있어서 데이터 셋이라 부릅니다.

특징 벡터 (feature vector) : 데이터의 특징으로 구성되는 특징들의 집합입니다.

부류 (class) : 쉽게 설명해서 꽃의 종류입니다. 특징으로는 색깔, 길이 등등이 있고, 이 특징들을 바탕으로 부류가 정해집니다. 머신러닝이 예측하는 값입니다.

 

사이킷런에서 제공하는 iris 데이터 셋을 한 번 확인해봅시다.

from sklearn import datasets

d = datasets.load_iris()

print(d.DESCR)
Iris plants dataset
--------------------

**Data Set Characteristics:**

    :Number of Instances: 150 (50 in each of three classes)
    :Number of Attributes: 4 numeric, predictive attributes and the class
    :Attribute Information:
        - sepal length in cm
        - sepal width in cm
        - petal length in cm
        - petal width in cm
        - class:
                - Iris-Setosa
                - Iris-Versicolour
                - Iris-Virginica

총 150개의 샘플이 있고, 4개의 특징, 그리고 3개의 부류가 있네요.

 

여기서 특징 벡터와 클래스를 확인해봅시다.

 

for i in range(len(d.data)):
  print(d.data[i], d.target[i])
[5.1 3.5 1.4 0.2] 0
[4.9 3.  1.4 0.2] 0
[4.7 3.2 1.3 0.2] 0
[4.6 3.1 1.5 0.2] 0
[5.6 3.  4.5 1.5] 1
[5.8 2.7 4.1 1. ] 1
[6.2 2.2 4.5 1.5] 1
[5.6 2.5 3.9 1.1] 1
[7.7 3.8 6.7 2.2] 2
[7.7 2.6 6.9 2.3] 2
[6.  2.2 5.  1.5] 2
[6.9 3.2 5.7 2.3] 2

클래스는 총 3개가 있고, 실제로 출력된 건 더 많은데 그냥 클래스 0, 1, 2를 4개씩 가져왔습니다.

 

참고로 클래스, 분류를 보통 타겟, 레이블이라고도 표현합니다. 저는 보통 타겟이라는 말을 써요.

 

아무튼 특징 벡터는 보통 x로 표현합니다.

 

특징 벡터 : x = (x1, x2, ... ,xd) (d는 특징의 개수, 특징 벡터의 차원이라고도 부름)

레이블 : 값 또는 원핫 코드

 

이때 값은 0, 1, 2, 3 ... 으로 나오는 거고, 원핫 코드는 한 요소만 1인 배열입니다.

만약 값이 세 개라면, 원핫 코드의 종류는 (1, 0, 0), (0, 1, 0), (0, 0, 1)이 되겠죠?


3. 모델링과 예측, 추가적인 설명

 

아주 간단하게 svm(support vector machine)이라는 머신러닝 모델을 써봅시다.

이 모델이 뭐하는지는 나중에 알고, 우선 예측부터 해봅시다.

from sklearn import svm

s = svm.SVC(gamma = 0.1, C = 10)		# 모델을 생성함, 매개변수(하이퍼 파라미터)는 몰라도 됨 (지금은)
s.fit(d.data, d.target)		# 훈련

new_d = [[6.4, 3.2, 6.0, 2.5], [7.1, 3.1, 4.7, 1.35]]

res = s.predict(new_d)		# 예측
print("두 개의 예측은", res)
두 개의 예측은 [2 1]

제대로 예측했는지는 모르겠네요..

왜냐면 저 데이터 셋은 저도 모르는 데이터 셋이니까요 ㅎㅎ;

 

아무튼 fit이라는 함수를 통해 주어진 데이터 셋으로 학습할 수 있습니다.

 

이때, 데이터셋도 두 가지 부류로 나뉘게 됩니다.

훈련 집합 (Train Set) : 머신러닝 모델이 학습하는데 쓰는 데이터로서 특징 벡터와 타겟 정보를 가지고 있음

테스트 집합 (Test Set) : 학습을 마친 모델의 성능을 측정하기 위해 쓰는 데이터입니다. 특징 벡터의 정보만 가지고 있고, 예측한 결과를 바탕으로 Test Set의 Target 정보와 예측 결과를 비교하여 정확률을 측정합니다.

 

간단하죠? 말 그대로 훈련 집합으로 훈련시키고, 테스트 집합으로 정확률을 측정합니다.

참고로 테스트 집합에 대한 레이블이 있어야 예측 결과랑 비교할 수 있습니다.

 

하이퍼 파라미터 (Hyper Parameter) : 모델의 동작을 제어하는 변수, 모델이 학습을 하기 전에 적절한 값으로 세팅해줘야 좋은 학습을 합니다. 이때 하이퍼 파라미터는 사람이 일일이 지정해줘야 합니다. 자세한 내용은 추후에 쓸 예정입니다.

 

 

즉, 인공지능을 설계하기 위해서는

 

1. 데이터 확보

  • 다양한 각도의 사과 사진을 수집 (데이터 편향 (Data Bias))를 막기 위해

2. feature vector, label 준비

  • 어떤 특징을 사용하여 사과를 표현할지
  • 각 특징에 맞는 label 부여

3. 학습 과정을 프로그래밍 (훈련 데이터를 사용하여)

  • 적절한 하이퍼 파라미터를  넣음

4. 새로 수집한 데이터에 대하여 예측해봄

이 가장 기본적인 설계 방법입니다.

 

데이터 편향 (data bias) : 예를 들어 사람의 얼굴을 인식해야하는데, 어린이의 얼굴만 훈련시키면 어떻게 될까요? 과연 이 모델은 제대로 된 예측을 할 수 있을까요? 이처럼 데이터가 한쪽으로 편향된 것을 데이터 편향이라고 합니다.

 

참고로 앞에서 규칙 기반 방법, 기계 학습 방법이 있는데,

규칙 기반 방법 : 분류하는 규칙을 사람이 구현합니다. 예를 들어 꽃잎의 색깔이 a고, 길이가 b면 setosa다 같은 규칙

기계 학습 방법 : 특징 벡터를 추출하고, 레이블을 붙이는 과정은 규칙 기반과 동일하게 수작업입니다. 하지만 규칙은 머신러닝이 자동으로 학습합니다.

 

이때 딥러닝은

딥러닝 방법 : 레이블을 붙이는 과정은 동일하지만, 특징 벡터를 모델이 학습으로 알아냅니다. 사진을 주면 해당 사진의 픽셀 값을 이용하여 본인이 특징들을 알아냅니다.

이를 곧 특징 학습 (feature learning), 표현 학습 (representation learning)이라고 합니다.

 

딥러닝의 장점은 특징 추출과 분류를 동시에 최적화 하므로 뛰어난 성능을 보장하고, 인공지능 제품 제작이 빠릅니다.

 

쉽게 말해 learn from data를 하는 것이죠.

 

머신러닝의 정의는 다음과 같습니다. learn without being explicitly programmed, 즉 명시적인 프로그래밍 없이 학습하는 뜻입니다.


4. 머신러닝의 종류

 

머신러닝은 supervised learning, unsupervised learning, reinforcement learning이 있습니다.

 

  • Supervised Learning
    • Data : (x, y), x is data, y is label
    • goal : Learn function to map (x -> y)
    • Supervised는 주어진 데이터와 타겟을 바탕으로 어떤 데이터가 들어오면 예측을 하는 종류입니다.
  • Unsupervised Learning
    • Data : x, x is data, no label
    • Goal : Learn underlying structure
    • Unsupervised는 주어진 데이터를 바탕으로 '분류'하는 것이 목표인 모델입니다. 사람이란 데이터가 들어오면 인종에 따라서 분류하는 종류입니다.
  • Reinforcement Learning
    • Data : state - action pairs
    • Goal : Maximize future rewards over many time steps
    • 추후에 자세히 설명드리겠습니다.

5. 데이터에 대한 이해

 

원샷 학습 (1-shot learning) : 레이블이 있는 샘플 하나만을 사용

퓨샷 학습 (few-shot learning) : 몇 개의 샘플만 사용

준지도 학습 (semi-supervised learning) : 레이블이 있는 소량의 샘플과 레이블이 없는 대량의 샘플을 같이 사용


6. 요약

 

머신러닝에선 데이터는 필수입니다. 데이터 없이 머신러닝은 불가능합니다.

 

이때

data set : 샘플들의 집합

feature vector : 특징들의 종류

class, label, target : 해당 특징들을 가지고 있는 데이터들을 분류한 것입니다.

train set : 훈련에 사용되는 데이터

test set : 모델을 평가하기 위해 사용되는 데이터

hyper parameter : 모델을 학습하기 위해 주는 초깃값

data bias : 데이터의 편향

 

 

글이 좀 난잡하므로 양해 부탁드립니다.

감사합니다.

 

 

 

지적 환영합니다.