머신러닝의 개념
머신러닝은 일반적으로, 애플리케이션을 수정하지 않고도 데이터를 기반으로 패턴을 학습하고 결과를 예측하는 알고리즘 기법을 통칭한다.
톰 미첼(Tom Mitchell)은 머신러닝에 대해
"어떤 작업 T에 대한 컴퓨터 프로그램의 성능을 P로 측정했을 때 경험 E로 인해 성능이 향상됐다면, 이 컴퓨터 프로그램은 작업 T와 성능 측정 P에 대해 경험 E로 학습한 것이다"라고 했다.
- 훈련 세트: 시스템이 학습하는 데 사용하는 샘플
- 훈련 사례(샘플): 각각의 훈련 데이터
- 모델: 머신러닝 시스템에서 학습하고 예측을 만드는 부분 (예. 신경망, 랜덤 포레스트 등)
업무적으로 복잡한 조건/규칙들이 다양한 형태로 결합하고 시시각각 변하면서 도저히 소프트웨어 코드로 로직을 구성하여 이들을 관통하는 일정한 패턴을 찾기 어려운 경우에 머신러닝은 훌륭한 솔루션을 제공한다.
ex) 스팸메일 필터링, 금융 사기 거래 적발 등
머신러닝은 데이터를 기반으로 숨겨진 패턴을 인지해 문제를 해결하고, 머신러닝 알고리즘은 데이터를 기반으로 통계적인 신뢰도를 강화하고 예측 오류를 최소화하기 위한 다양한 수학적 기법을 적용해 데이터 내의 패턴을 스스로 인지하고 신뢰도 있는 에측 결과를 도출해 낸다.
데이터마이닝, 영상 인식, 음성 인식, 자연어 처리에서 개발자가 데이터나 업무 로직의 특성을 직접 감안한 프로그램을 만들 경우 난이도와 개발 복잡도가 너무 높아질 수 밖에 없는 분야에서 머신러닝이 급속한 발전을 이루고 있다.
머신러닝의 분류
일반적으로 머신러닝은 지도학습(Supervised Learning), 비지도학습(Unsupervised Learning), 강화학습(Reinforcement Learning)으로 나뉜다. (해당 내용은 필자 블로그에 상세하게 있으므로 자세한 설명을 생략한다)
[지도 학습] ▶ 정답인 레이블이 포함되어 있는 학습 데이터를 통해 컴퓨터를 학습시키는 방법
- 분류: 문서를 분류하거나 조직을 그룹으로 나눌 때, 또는 온라인 수강생들을 특성에 따라 분류할 때 사
- 회귀: 독립변수의 조작에 따른 종속변수의 변화를 확인하여 두 변수 간의 관계를 파악
- 추천 시스템: 데이터 내부에 존재하는 항목 간의 상호 관계 혹은 종속 관계를 찾아내는 분
- 시각/음성 감지/인지
- 텍스트 분석, NLP
[비지도 학습] ▶ 입력 데이터에 대한 정답(레이블)이 없는 상태에서 훈련 데이터를 통해 학습시키는 방법
- 클러스터링: 관측된 여러 개의 변수값들로부터 유사성에만 기초하여 n개의 군집으로 집단화하여 집단의 특성을 분
- 차원 축소: 분석대상이 되는 여러 변수의 정보를 최대한 유지하면서 데이터 세트 변수의 개수를 줄이는 탐색적 분석 기법
- 시각화 알고리즘: 레이블이 없는 대규모의 고차원 데이터를 넣으면 도식화가 가능한 2D나 3D 표현 생성
- 이상치 탐지: 학습 알고리즘에 주입하기 전에 데이터셋에서 이상한 값을 자동으로 제거하는 것.
- 특이치 탐지: 훈련 세트에 있는 모든 샘플과 달라 보이는 새로운 샘플을 탐지하는 것이 목적.
- 연관 규칙 학습: 대량의 데이터에서 특성 간의 흥미로운 관계를 찾는 것.
[머신러닝] 차원 축소(Dimension Reduction)
[딥러닝] 비지도 학습: 오토인코더, GAN, 확산 모델
[준지도 학습] ▶ 레이블이 일부만 있는 데이터를 다루는 학습 방법
대부분의 준지도 학습 알고리즘은 지도 학습과 비지도 학습의 조합으로 이루어져 있다.
예를 들어 군집 알고리즘을 사용해 비슷한 샘플을 한 그룹으로 모으고, 레이블이 없는 샘플에 클러스터에서 가장 많이 등장하는 레이블을 할당한다. 전체 데이터셋에 레이블이 부여되고 나면 지도 학습 알고리즘을 사용할 수 있다.
준지도학습의 예. 구글 포토 서비스
[자기지도 학습] ▶ 레이블이 전혀 없는 데이터셋에서 레이블이 완전히 부여된 데이터 셋을 생성하는 방법
예를 들어 레이블이 없는 이미지로 구성된 대량의 데이터셋이 있다면 각 이미지의 일부분을 랜덤하게 마스킹하고 모델이 원본 이미지를 복원하도록 훈련할 수 있으며, 훈련하는 동안 마스킹된 이미지는 모델의 입력으로 사용되고 원본 이미지는 레이블로 사용된다.
자기 지도 학습은 훈련하는 동안 (생성된) 레이블을 사용하므로 지도 학습에 더 가까우며, 지도 학습과 동일한 작업 (주로 분류, 회귀)에 초점을 맞춘다.
[강화학습] ▶ 선택 가능한 행동 중 보상을 최대화하는 행동 혹은 행동 순서를 선택하는 학습 방법
[딥러닝] 강화 학습(Reinforcement Learning) - 1
보다 자세한 내용은
머신러닝 시스템 분류 - 1
◆ 배치 학습(batch learning), 오프라인 학습
배치 학습에서는 시스템이 점진적으로 학습할 수 없고, 가용한 데이터를 모두 사용해 훈련시켜야 한다. 이 방식은 시간과 자원을 많이 소모하므로 오프라인에서 수행된다. 먼저 시스템을 훈련시킨 다음 제품 시스템에 적용하면 더 이상의 학습 없이 실행된다.
배치 학습 시스템이 새로운 데이터에 대해 학습하려면 전체 데이터를 사용하여 시스템의 새로운 버전을 처음부터 다시 훈련하고 이전 모델을 새 모델로 교체한다.
- 머신러닝 시스템을 훈련, 평가, 론칭하는 전체 과정이 쉽게 자동화될 수 있어 배치 학습 시스템도 변화에 적응할 수 있으나, 전체 데이터셋을 사용해 훈련하는 데 몇 시간이 소요될 수 있고, 보통 24시간 또는 매주 시스템을 훈련시키기 때문에 시스템이 빠르게 변하는 데이터에 적응해야 한다면 더 능동적인 방법이 필요하다.
- 전체 데이터셋을 사용해 훈련한다면 많은 컴퓨팅 자원이 필요하다.
- 자원이 제한된 시스템(스마트폰 등)이 스스로 학습해야 할 때 많은 양의 훈련 데이터를 나르고 매일 몇 시간씩 학습을 위해 많은 자원을 사용하면 심각한 문제를 일으킨다
◆ 온라인 학습
온라인 학습에서는 데이터를 순차적으로 한 개씩 또는 미니배치라 부르는 작은 묶음 단위로 주입하여 시스템을 훈련시켜 매 학습 단계가 빠르고 비용이 적게 들어 시스템은 데이터가 도착하는 대로 즉시 학습할 수 있다.
따라서, 온라인 학습은 극도로 빠른 변화에 적응해야 하는 시스템에 적합하며, 컴퓨팅 자원이 제한된 경우에도 좋은 선택이다.
또한, 외부 메모리 학습을 사용하여 컴퓨터 한 대의 메인 메모리에 들어갈 수 없는 아주 큰 데이터셋에서 모델을 훈련할 수도 있다.
머신러닝 시스템 분류 - 2
어떻게 일반화 되는가에 따라 머신러닝 시스템을 분류할 수 있다.
머신러닝 작업은 주어진 훈련 데이터로 학습하고 이전에는 본적 없는 새로운 데이터에서 좋은 예측을 만들어야 (일반화되어야) 하는데, 머신러닝의 진짜 목표는 새로운 샘플에 잘 작동하는 모델이다.
◆ 사례 기반 학습
시스템이 훈련을 기억함으로써 학습하고, 유사도 측정을 사용해 새로운 데이터와 학습한 샘플을 비교하는 식으로 일반화하는 방식.
◆ 모델 기반 학습
샘플로부터 일반화시키는 다른 방법은 이 샘플들의 모델을 만들어 에측에 적용하는 것이다.
[일반적인 머신러닝 프로젝트 과정]
- 데이터 분석
- 모델 선택
- 모델이 가지는 파라미터(모델 파라미터)를 조정하여 값을 표현하는 모델 생성
- 모델 사용 전 모델이 최상의 성능을 내도록 하는 값을 측정 지표(호용 함수, 적합도 함수, 비용 함수)를 정하여 파라미터 값 정의
- 모델 훈련: 알고리즘에 훈련 데이터를 공급하여 가장 잘 맞는 파라미터 찾기
- 모델을 사용해 예측: 새로운 데이터에 모델을 적용해 예측 만듦. (추론)
데이터를 로드하고 입력X와 레이블 y로 나눈 다음 산점도글 그려 시각화하고 사이킷런을 이용해 선형 모델을 훈련하여 예측하는 과정을 보여주는 코드
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.linear_model import LinearRegression
# 데이터 준비
lifesat = pd.read_csv("C:/Users/niceq/Documents/DataScience/Hands_ML/Data/01. lifesat.csv")
X = lifesat[["GDP per capita (USD)"]].values
y = lifesat[["Life satisfaction"]].values
# 그래프로 시각화
lifesat.plot(kind='scatter', grid=True, x="GDP per capita (USD)", y="Life satisfaction")
plt.axis([23_500, 62_500, 4, 9])
plt.show()
# 선형 모델 선택
model = LinearRegression()
# 모델 훈련
model.fit(X, y)
# 키프로스에 대해 예측 생성
X_new = [[37_655.2]] # 2020년 키프로스 1인당 GDP
print(model.predict(X_new))
머신러닝이 뛰어난 분야
- 기존 솔루션으로는 많은 수동 조정과 규칙이 필요한 문제
▶ 머신러닝 모델이 코드를 간단하게 만들고 전통적인 방법보다 더 잘 수행할 수 있다
- 전통적인 방식으로는 해결 방법이 없는 복잡한 문제
▶ 가장 뛰어난 머신러닝 기법으로 해결 방법을 찾을 수 있다
- 유동적인 환경
▶ 머신러닝 시스템은 새로운 데이터로 쉽게 재훈련할 수 있어 항상 최신 상태를 유지한다
- 복잡한 문제와 대량의 데이터에서 인사이트 얻기
애플리케이션 사례
- 생산 라인에서 제품 이미지를 분석해 자동으로 분류하기: 이미지 분류 작업 (합성곱 신경망이나 트랜스포머 등 사용)
- 뇌를 스캔하여 종양 진단하기: 시맨틱 분할 작업 (CNN이나 트랜스포머 사용하여 이미지의 각 픽셀 분류)
- 자동으로 뉴스 기사 분류하기: 자연어 처리, 텍스트 분류 (순환 신경망이나 CNN 사용, 트랜스포머의 성능이 훨씬 좋음)
- 토론 포럼에서 부정적인 코멘트를 자동으로 구분하기: 자연어 처리(NLP)
- 긴 문서를 자동으로 요약하기: NLP 도구 사용
- 챗봇 또는 개인 비서 만들기: 자연어 이해 (NLU)와 질문-답변 모듈을 포함한 여러 가지 NLP 컴포넌트 필요
- 여러 가지 성과 자료를 바탕으로 회사의 내년도 수익 예측하기: 회귀 작업 (숫자로 값 예측). 선형 회귀, 다항 회귀, 회귀 서포트 벡터 머신, 회귀 랜덤 포레스트, 인공 신경망 등 사용
- 음성 명령에 반응하는 앱 만들기: 음성 인식 작업으로 오디오 샘플을 처리해야 하므로, RNN, CNN, 트랜스포머 사용
- 신용카드 부정 거래 감지하기: 이상치 탐지 작업. 아이솔레이션 포레스트, 가우스 혼합, 오토인코더 등 사용
- 구매 이력을 기반으로 고객을 나누고 각 집합마다 다른 마케팅 전략 계획하기: 군집 작업. K-평균, DBSCAN 등 사용하여 수행
- 고차원의 복잡한 데이터셋을 명확하고 의미 있는 그래프로 표현하기: 데이터 시각화 작업. 차원 축소 기법 사용
- 과거 구매 이력을 기반으로 고객이 관심을 가질 수 있는 상품 추천하기: 추천 시스템. 과거 구매 이력을 인공 신경망에 주입하고 다음에 구매할 가능성이 가장 높은 상품 출력 (모든 고객의 구매 이력을 기반으로 훈련)
- 지능형 게임 봇 만들기: 강화 학습.
합성곱 신경망(CNN), 순환 신경망(RNN), 자연어 처리(NLP)
데이터 vs 머신러닝 알고리즘
데이터와 머신러닝 알고리즘 모두 머신러닝에는 중요한 요소이다. 일단 머신러닝 세상이 본격적으로 펼쳐진다면 데이터의 중요성이 무엇보다 커진다.
머신러닝의 가장 큰 단점은 데이터에 매우 의존적이라는 것이다.
Garbage In - Garbege Out
: 쓰레기가 들어가면, 쓰레기가 나온다.
즉, 좋은 품질의 데이터를 갖추지 못한다면 머신러닝의 수행 결과도 좋을 수 없다. 머신러닝을 이용해 데이터만 집어넣으면 자동으로 최적화된 결과를 도출할 거라는 믿음은 환상일 뿐이다.
머신러닝 모델의 개선을 위해서 최적의 머신러닝 알고리즘과 모델 파라미터를 구축하는 능력도 중요하지만 데이터를 이해하고 효율적으로 가공, 처리, 추출해 최적의 데이터를 기반으로 알고리즘을 구동할 수 있도록 준비하는 능력이 더 중요할 수 있다.
앞으로 많은 회사의 경쟁력은 어떠한 품질의 데이터로 만든 머신러닝 모델이냐에 따라 결정될 수 있다.
Python vs R
머신러닝 프로그램을 작성할 수 있는 대표적인 오픈 소스 프로그램 언어는 파이썬과 R이다.
물론, C/C++, JAVA 등 컴파일러 기반의 언어도 가능하지만, 파이썬과 R에 비해 개발 생산성이 떨어지고
지원 패키지와 생태계가 활발하지 않다.
R은 통계 전용 프로그램 언어이고,
파이썬은 다양한 영역에서 사용되는 개발 전문 프로그램 언어이다.
저자는 개발 언어에 익숙하지 않으나 통계 분석에 능한 현업 사용자라면 - R을 선택
이제 머신러닝을 시작하려는 사람, 거기에 만약 개발자라면 - 파이썬을 선택
하라고 권유한다.
특히, 파이썬은 딥러닝에 대한 관심이 증가하는 2016년도부터 관심도가 급격히 증가하였고, 무엇보다도 구글, 메타 등 유수의 IT 업계에서도 파이썬의 높은 생산성으로 인해 활용도가 매우 높다.
https://www.tiobe.com/tiobe-index/
또한, 유수의 딥러닝 프레임워크인 텐서플로(TensorFlow), 케라스(Keras), 파이토치(PyTorch) 등에서 파이썬 우선 정책으로 파이썬을 지원하고 있다.
파이썬의 주요 장점 (for 머신러닝)
- 쉽고 뛰어난 개발 생산성으로 전 세계 개발자들이 파이썬을 선호. (구글, 메타 등)
- 오픈 소스 계열의 전폭적인 지원을 받고 있으며 놀라울 정도의 많은 라이브러리로 인해 개발 시 높은 생산성 보장
- 인터프리터 언어(Interpreter Language)의 특성상 속도는 느린 대신, 뛰어난 확장성, 유연성, 호환성으로 인해 서버, 네트워크, 시스템, IOT, 데스크톱까지 다양한 영역에서 사용
- 머신러닝 애플리케이션과 결합한 다양한 애플리케이션 개발 가능
- 엔터프라이즈 아키텍처로의 확장 및 마이크로서비스 기반의 실시간 연계 등 다양한 기업 환경으로의 확산 가능
머신러닝의 주요 도전 과제
머신러닝 데이터셋 구하기에 좋은 사이트 모음
[출처]
핸즈온 머신러닝
'[파이썬 Projects] > <파이썬 머신러닝>' 카테고리의 다른 글
[머신러닝] 사이킷런의 model_selection 모듈 (0) | 2024.06.07 |
---|---|
[머신러닝] 사이킷런에 내장된 예제 데이터 세트 (0) | 2024.05.30 |
[머신러닝] 사이킷런 주요 모듈 (0) | 2024.05.30 |
[머신러닝] 사이킷런으로 시작하는 ML (0) | 2024.05.30 |
[머신러닝] 주요 패키지 (0) | 2024.05.25 |