본문 바로가기

AI: ML,DL

[인공지능] 머신러닝, 딥러닝 개요

인공지능

사람처럼 학습하고 추론할 수 있는 지능을 가진 컴퓨터 시스템을 만드는 기술을 의미한다. 실제 사람처럼 행동하는 것을 강인공지능이라 하고 사람을 도와 보조적인 역할을 하는 것을 약인공지능이라고 한다.

 

머신러닝

머신러닝은 규칙을 일일이 프로그래밍하지 않아도 자동으로 데이터에서 규칙을 학습하는 알고리즘을 연구하는 분야이다. 통계학과 깊은 관련이 잇다. 대표적으로 사이킷런(scikit-leran)이라는 머신러닝 라이브러리가 존재한다.

 

딥러닝

딥러닝은 많은 머신러닝 알고리즘 중 인공 신경망(Artificial Neural Network)을 기반으로한 방법을 통칭한다. 유명한 라이브러리로는 텐서플로(Tensorflow), 파이토치(PyTorch)가 있다.

 

가장 간단한 머신러닝 예시

시장에서 '도미', '곤들매기', '농어' 등의 생선을 판매하며 이들을 프로그램으로 분류해야 한다고 가정해보자. 이들을 분류하기 위해서는 생선의 특성을 알면 쉽게 구분 가능할 것이다. 여기서는 생선의 길이와 무게를 특징으로 잡아 분류한다.

//도미와 빙어의 정보

bream_length = [25.4, 26.3, 26.5, 29.0, 29.0, 29.7, 29.7, 30.0, 30.0, 30.7, 31.0, 31.0, 
                31.5, 32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0, 
                35.0, 35.0, 35.0, 36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, 41.0]
bream_weight = [242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 450.0, 500.0, 475.0, 500.0, 
                500.0, 340.0, 600.0, 600.0, 700.0, 700.0, 610.0, 650.0, 575.0, 685.0, 620.0, 680.0, 
                700.0, 725.0, 720.0, 714.0, 850.0, 1000.0, 920.0, 955.0, 925.0, 975.0, 950.0]
                
smelt_length = [9.8, 10.5, 10.6, 11.0, 11.2, 11.3, 11.8, 11.8, 12.0, 12.2, 12.4, 13.0, 14.3, 15.0]
smelt_weight = [6.7, 7.5, 7.0, 9.7, 9.8, 8.7, 10.0, 9.9, 9.8, 12.2, 13.4, 12.2, 19.7, 19.9]


//산점도 그리기

import matplotlib.pyplot as plt

plt.scatter(bream_length, bream_weight)
plt.scatter(smelt_length, smelt_weight)
plt.xlabel('length')
plt.ylabel('weight')
plt.show()

파이썬의 matplotlib 라이브러리를 활용하여 위처럼 도미와 빙어의 산점도를 그릴 수 있다. 산점도의 그래프가 일직선에 가까운 형태로 나타날 경우 통계학 용어로 선형이라고 부른다.

 

이후 사이킷런에 존재하는 k-최근접 이웃 알고리즘을 활용하여 도미와 빙어를 분류해보려고 한다.

k-최근접 이웃 알고리즘은 데이터에 대한 답을 구할 때 근처에 주위 데이터를 참고하여 다수를 차지하는 대상을 정답으로 처리하는 알고리즘이다.

 

bream_length = [25.4, 26.3, 26.5, 29.0, 29.0, 29.7, 29.7, 30.0, 30.0, 30.7, 31.0, 31.0, 
                31.5, 32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0, 
                35.0, 35.0, 35.0, 36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, 41.0]
bream_weight = [242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 450.0, 500.0, 475.0, 500.0, 
                500.0, 340.0, 600.0, 600.0, 700.0, 700.0, 610.0, 650.0, 575.0, 685.0, 620.0, 680.0, 
                700.0, 725.0, 720.0, 714.0, 850.0, 1000.0, 920.0, 955.0, 925.0, 975.0, 950.0]

smelt_length = [9.8, 10.5, 10.6, 11.0, 11.2, 11.3, 11.8, 11.8, 12.0, 12.2, 12.4, 13.0, 14.3, 15.0]
smelt_weight = [6.7, 7.5, 7.0, 9.7, 9.8, 8.7, 10.0, 9.9, 9.8, 12.2, 13.4, 12.2, 19.7, 19.9]

import matplotlib.pyplot as plt

plt.scatter(bream_length, bream_weight)
plt.scatter(smelt_length, smelt_weight)
plt.xlabel('length')
plt.ylabel('weight')
plt.show()

# 머신러닝 프로그램
length = bream_length + smelt_length
weight = bream_weight + smelt_weight

fish_data = [[l,w] for l,w in zip(length, weight)]

# 분류가 둘일 경우 1과 0으로 구분
fish_target = [1]*35 + [0]*14

from sklearn.neighbors import KNeighborsClassifier

kn = KNeighborsClassifier(n_neighbors=5) #가까운 5개의 데이터 참조

# 데이터 훈련
kn.fit(fish_data, fish_target)

# 점수
kn.score(fish_data, fish_target)
--> 결과 1.0 : 모든 fish_data 답을 정확히 맞춤

# 한 데이터에 대한 예측 (길이가 30, 무게가 600인 생성의 종류는?)
kn.predict([[30,600]]) 
--> 결과 array([1]): 도미(1번)로 판단

 

 

기타 프레임워크&툴 용어 정리

코랩(Colab)

웹 브라우저 기반 파이썬 코드 실행 환경

 

노트북

코랩의 프로그램 작성 단위이며 대화식 프로그래밍이 가능하여 데이터 분석에 적합하다. 노트북에는 코드, 실행결과, 문서를 모두 포함하여 저장/보관할 수 있다.

 

 

참고

혼자 공부하는 머신러닝+딥러닝(박해선 저)