컴퓨터공학/인공지능

[인공지능] 3장. 기계 학습과 인식1

NIMHO 2023. 4. 4. 12:32
728x90

복습하기 위해 학부 수업 내용을 필기한 내용입니다.
이해를 제대로 하지 못하고 정리한 경우 틀린 내용이 있을 수 있습니다.
그러한 부분에 대해서는 알려주시면 정말 감사하겠습니다.

3.1 기계학습 기초

기계학습에서 데이터의 중요성

- 에너지를 만드는 연료에 해당한다.

- 데이터가 없으면 기계학습 적용이 불가능하다

 

가장 단순한 iris 데이터로 시작한다.

 

데이터 셋 읽기

- 사이킷런(scikit-learn) 라이브러리 설치한다.

- pip install scikit-learn 명령어로 라이브러리 설치한다.

 

3.1.1 iris 데이터셋 읽기

from sklearn import datasets

# iris 데이터셋 불러오기
d = datasets.load_iris()

# 내용을 출력 (객체 d의 DESCR 변수를 출력)
print(d.DESCR)

기계학습의 용어

- 샘플로 구성되는 데이터셋

- 특징으로 구성되는 특징 벡터 (feature vector)

- 부류 (class)

# iris의 내용 살피기
for i in range(0, len(d.data)):
    print(i + 1, d.data[i], d.target[i])

 

3.1.1 기계학습에서 데이터셋의 표현

샘플을 특징 벡터와 레이블로 표현

- 특징 벡터는 x로 표기 (d는 특징의 개수로서 특징 벡터의 차원이라 부른다.)

- 특징 벡터 : x=(x1, x2,..., xd)     (3.1)

 

레이블은 0, 1, 2,..., c-1의 값 또는 1, 2,..., c-1, c의 값 또는 원핫(one-hot) 코드이다.

- 원핫 코드는 한 요소만 1인 이진 정보 (binary vector)이다.

- ex) Setosa는 (1, 0, 0), Versicolor는 (0, 1, 0), Virginica는 (0, 0, 1)로 표현한다.

 

3.1.2 기계학습 적용 : 모델링과 예측

SVM (support vector machine)이라는 기계 학습 모델을 사용한다.

from sklearn import svm

# svm 분류 모델 SVC 객체를 생성하고
s = svm.SVC(gamma=0.1, C=10)
# iris 데이터로학습한다.
s.fit(d.data, d.target) # training set

# 101번째와 51번째 샘플을 변형해 새로운 데이터를 생성한다.
new_d = [[6.4, 3.2, 6.0, 2.5], [7.1, 3.1, 4.7, 1.35]]

res = s.predict(new_d) # test set
print("새로운 2개의 샘플의 부류는 ", res)

 

훈련 집합

- 기계학습 모델을 학습하는데 쓰는 데이터

- 특징 벡터와 레이블 정보를 모두 제공한다.

 

테스트 집합

- 학습을 마친 모델의 성능을 측정하는데 쓰는 데이터

- 예측할 때는 특징 벡터 정보만 제공한다.

- 예측 결과를 가지고 정확률을 측정할 때 레이블 정보를 사용한다.

 

 

3.2 인공지능 제품의 설계와 구현

[3-1]은 인공지능 제품의 핵심이다.

- 데이터를 읽고 모델링과 예측을 수행한다.

- 붓꽃 영상을 획득하고 특징을 추출하는 컴퓨터 비전 모듈을 전처리로 붙이면 붓꽃 인식 프로그램이 된다.

 

1. 데이터를 확보

2. 특징 벡터와 레이블 준비

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

4. 예측 과정을 프로그래밍 (새로 수집한 테스트 데이터 사용)

 

3.2.1 Five common types of data bias (데이터 편향)

Response or Activity Bias

- 교육 데이터가 활동 수준 또는 응답률의 차이로 인해 특정 그룹 또는 행동을 불균형적으로 나타낼 때 발생한다.

- 즉, 설문조사 하는 사람만 한다는 것이다.

Selection bis due to feedback loops

- 잘 안 모이는 데이터 열심히 모은다.

- 모델의 예측이 향후 교육 데이터 수집에 영향을 미칠 때 선택 편향을 초래할 수 있다.

Bias due to system drift

- 최근 업데이트 x면 문제

- 시간이 지남에 따라 기본 데이터 분포 또는 시스템 동작의 변화를 의미한다. 
- 이러한 변화를 설명하기 위해 정기적으로 업데이트되지 않는 경우 기계 학습 모델에 편견을 초래할 수 있다.

Omitted variable bias

- 결과에 영향을 미치는 중요한 변수가 모형에 포함되지 않아 포함된 변수와 결과 사이의 관계에 대한 편향된 추정치를 초래할 때 발생한다.

Societal bias

- 어떤 성이면 어떤 직업을 가질 것이다.

- 사회적 편견은 사회적 규범, 고정관념 또는 역사적 요인으로 인해 데이터에 내재된 편견을 말한다.

 

3.2.2 규칙 기반 vs 고전적 기계학습 vs 딥러닝

규칙 기반 방법

- 분류하는 규칙을 사람이 구현한다.

- 큰 데이터 셋에서는 불가능하다.

- 데이터가 바뀌면 처음부터 새로 작업해야 해서 비효율적이다.

 

기계학습 방법

- 특징 벡터를 추출하고 레이블을 붙이는 과정은 규칙 기반과 동일하다. (수작업 특징)

- 규칙 만드는 일은 기계학습 모델을 이용해 자동으로 수행한다.

 

딥러닝 방법

- 레이블을 붙이는 과정은 기계학습과 동일하다.

- 특징 벡터를 학습이 자동으로 알아낸다. (특징 학습 or 표현 학습을 한다고 말한다.)

- 특징 추출과 분류를 동시에 최적화하므로 뛰어난 성능을 보장한다.

- 인공지능 제품 제작이 빠르다.

 

Extra. Supervised Learning vs Few-Shot Learning

Few-Shot Learning is a kind of Meta Learning

- Meta Learning : learn to learn

 

Traditional supervised learning

- Test samples are never seen before

- Test samples are from known classes

 

Few-Shot Learning

- Query samples are never seen before

- Query samples are from unknown classes

 

3.2.2 규칙 기반 vs 고전적 기계학습 vs 딥러닝

Supervised vs Semi-supervised vs Unsupervised Learning

- Supervised learning uses labeled data to train an algorithm to predict an output.

- Unsupervised learning looks for patterns in unlabeled data

- Semi-supervised learning is a mix of both, using some labeled data and some unlabeled data to train an algorithm.

 

3.3 데이터에 대한 이해

3.3.1 특징 공간에서 데이터 분호

iris 데이터

- 특징이 4개라서 4차원 특징 공간을 형성한다.

- 150개 샘플 각각은 4차원 특징 공간의 한 점이다.

- pip install plotly로 plotly를 설치해 준다.

import plotly.express as px

df = px.data.iris()

# petal_length를 제외하여 3차원 공간 구성
fig = px.scatter_3d(df, 
                 x='sepal_length', 
                 y='sepal_width', 
                 z='petal_width', 
                 color='species')
fig.show(renderer='browser')

 

3.3.2 영상 데이터 사례 : 필기 숫자

두 가지 필기 숫자 데이터셋

- sklearn 데이터셋 : 8*8 맵 (64개 화소), 1797개 샘플, [0, 16] 명암값

- MNIST 데이터셋 : 28*28 맵 (784개 화소), 7만 개 샘플, [0, 255] 명암값

 

matplotlib 라이브러리를 이용한 샘플 디스플레이와 샘플 내용(화소값) 출력

from sklearn import datasets
import matplotlib.pyplot as plt

digit = datasets.load_digits()

plt.figure(figsize=(5, 5))
plt.imshow(digit.images[0], cmap=plt.cm.gray_r, interpolation='nearest')

plt.show()
print(digit.data[0])
print("이 숫자는 ", digit.target[0], "입니다.")

 

3.3.3 영상 데이터 사례 : lfw 얼굴 데이터셋

lfw(labeled faces in the wild) 데이터 셋

- 5749명의 유명인의 얼굴 영상 13233장, 50*37 맵, [0, 255] 명암값

- 데이터 편향 주의 (어린이, 흑인 등이 적어 얼굴 인식 프로그램을 제작하는데 부적절하다.)

lfw = datasets.fetch_lfw_people(min_faces_per_person=70, resize=0.4)

plt.figure(figsize=(20, 5))

for i in range(8):
    plt.subplot(1, 8, i + 1)
    plt.imshow(lfw.images[i], cmap=plt.cm.bone)
    plt.title(lfw.target_names[lfw.target[i]])

plt.show()

 

3.3.4 텍스트 데이터 사례 : 20newsgroups

20newsgroups 데이터셋

- 웹에서 수집한 문서를 20개 부류로 구분한다.

- 텍스트로 구성되어 샘플의 길이가 다르다.

- 시계열 데이터 (단어가 나타나는 순서가 중요하다.)

news = datasets.fetch_20newsgroups(subset='train')
print("*****\n", news.data[0], "\n*****")
print("이 문서의 부류는 <", news.target_names[news.target[0]], "> 입니다.")

 

3.4 특징 추출과 표현

기계 학습의 전형적이 과정

- 실제에서는 다양한 형태로 나타난다.

- 데이터 수집 -> 특징 추출 -> 모델링 -> 예측

 

3.4.1 특징의 분별력

사람은 직관적으로 분별력(discriminating power)이 높은 특징을 사용한다.

 

ex) 두 텀블러를 구분하는 특징

- 글씨 방향, 몸통 색깔, 손잡이 유무, 뚜껑 유무 등

- 뚜껑 유무라는 특징은 분별력이 없다.

- 손잡이 유무라는 특징은 분별력이 높다.

 

기계 학습은 높은 분별력을 지닌 특징을 사용해야 한다.

- ex) 100여 년 전의 iris 데이터는 사람이 네 종류의 특징을 자를 들고 직접 추출했다.

- 현대에서는 붓꽃 영상을 그대로 입력하면 딥러닝이 최적의 특징을 추출해 준다.

 

다양한 형태의 특징 공간

- 실제 세상은 (c, d)와 같은 비선형 데이터를 생성한다.

(데이터의 원천적인 성질 또는 측정이나 레이블링 오류, 비합리적인 특징 추출 알고리즘에 기인)

- 가급적 d보다 c와 같은 특징을 사용해야 한다.

 

3.4.2 특징 값의 종류

수치형 특징

- ex) iris의 네 개 특징은 실수이다.

- 거리 개념이 있다.

- 실수 또는 정수 또는 이진값

 

범주형 특징

- 학점, 수능 등급, 혈액형, 지역 등

- 순서형 : 학점, 수능 등급 등

     거리 개념이 있다.

     순서대로 정수를 부여하면 수치형으로 취급 가능하다.

-이름형

     혈액형, 지역 등으로 거리 개념이 없다.

     보통 원핫 코드로 표현한다. ex) A형(1, 0, 0, 0),..., AB형(0, 0, 0, 1)

728x90