1. 머신러닝에 대한 이해
(1) 학습 방법에 따른 분류
지도 학습 (Supervised Learning) |
- 입력 데이터와 해당 데이터의 정답(라벨)이 주어진 상태에서, 모델이 이를 학습하여 새로운 데이터의 결과를 정확하게 예측하도록 만드는 학습 방식 |
비지도 학습 (Unsupervised Learning) |
- 정답(라벨)이 없는 데이터에서 패턴, 구조, 군집을 찾아내어 데이터의 특성을 분석하거나 유사한 그룹을 형성하는 학습 방식 |
강화 학습 (Reinforcement Learning) |
- 에이전트(강화학습을 수행하는 주체)가 환경과 상호작용하며 행동에 따른 보상을 받아 최적의 행동을 선택하고, 이를 통해 목표를 달성하는 정책을 학습하는 방식 |
(2) 과제에 따른 분류
분류 문제 (Classification) |
- 주어진 데이터를 기반으로 사전에 정의된 여러 이산적인 클래스 중 하나로 분류하는 문제 - ex) 스팸/정상, 합격/불합격 - 지도 학습 |
회귀문제 (Regression) |
- 입력된 데이터를 이용해 연속적인 수치 값을 예측하며, 예측 결과가 특정 범위 내의 실수로 나타나는 문제 - ex) 주택 가격, 주식 가격 예측 - 지도 학습 |
클러스터링 (Clustering) |
- 데이터에 라벨이 없는 상태에서 유사한 특성을 가진 데이터끼리 그룹화하여 패턴을 발견하는 비지도 학습 문제 - ex) 고객 세분화, 문서 군집화 - 비지도 학습 |
(3) 머신러닝 분류 정리
2. 분류와 회귀
(1) 분류와 회귀
- 모델링을 하기 전에는 원하는 결과가 분류인지 회귀인지를 명확히 이해해야 한다.
- 분류인지 회귀인지에 따라 사용할 알고리즘과 평가를 위한 함수가 달라진다.
- 회귀는 연속적인 숫자를 예측하는 것이고, 분류는 범줏값을 예측하는 것이다.
- 연속적인 숫자 확인 방법에는 두 값 사이에 있는 중간값이 의미 있는 숫자인지,
- 또는 두 값에 대한 연산 결과가 의미가 있는 숫자인지 등등을 확인해본다.
- 예측해야 할 값에 연속성이 있는지 확인하면 분류와 회귀를 쉽게 구분할 수 있다.
- 회귀 : 판매가격 (5,000원 / 6,000원), 분류 : 가입여부 (0/1)
- 다음달에 약정 기간이 끝나는 고객이 타 통신사로 이동할까? -> 분류
- 이 타이어는 1,000km 안에 교체해야 할까? -> 분류
- 내일 주가가 얼마일까? -> 회귀
- 내일 주가가 오를까? -> 분류
- 이 제품의 다음 주 수요량은 얼마일까? -> 회귀
- 즉 분류는 A일까? B일까?에 대한 대답, 회귀의 경우 얼마나 많이?에 대한 대답
- 분류와 회귀에서 사용하는 서로 다른 함수
- 문제 유형을 정확히 파악하여 알고리즘과 평가 방법을 선택하고, 관련된 함수를 사용해 모델링한다.
분류 문제 | 회귀 문제 | |
알고리즘 | - DecisionTreeClassifier - KNeighborsClassifier - LogisticRegression - RandomForestClassfier - XGBClassifier |
- LinearRegression - KNegihborsRegressor - DecisionTreeRegressor - RandomForestRegressor - XGBRegressor |
평가 방법 | - accuracy_score - recall_score - precision_score - classfication_report - confusion_matrix |
- mean_absolute_error - mean_squrared_error - root_mean_squared_error - mean_absolute_percentage_error - r2_score |
3. 미리 알아 둘 용어
(1) 모델과 모델링
① 모델(Model)
- 데이터로부터 패턴을 찾아 수학식으로 정리해놓은것
- 모델링 : 오차가 적은 모델을 만드는 과정
② 모델의 목적
- 샘플을 가지고 전체를 추정
- 샘플 : 표본, 부분집합, 일부, 과거의 데이터
- 전체 : 모집단, 전체집합, 현재와 미래의 데이터
- 추정 : 예측, 추촐
=> 즉, 머신이 적절한 학습을 통해 최선의 모델을 만들 수 있도록 노력하는 우리들의 행동을 모델링이라고 한다.
(2) 행, 열
① 열 (Column)
- 특성(Feature) / 속성 (Attribute) / 변수 (Variable) / 필드 (Field)
② 행 (Row)
- 개체 (Instance) / 관측치 (Observed Value) / 기록 (Record) / 사례 (Example) / 경우 (Case)
(3) 독립변수, 종속변수
- 독립변수(원인), 즉 x로 표시한다.
- 종속변수(결과), 즉 y로 표시한다.
=> y = ax + b
(4) 오차
① 평균과 오차
- 통계학에서 사용되는 가장 단순한 모델 중 하나가 평균
- 관측값(=실젯값)과 모델 예측값의 차이 : 이탈도 (Deviance) -> 오차
- 평균보다는 나은 모델을 만들어야지..!
(5) 데이터 분리
- 데이터 셋을 학습용 , 검증용, 평가용 데이터로 분리한다.
① 실전에서는
- 평가용 데이터는 별도로 제공되는 데이터일 경우가 많다.
- 검증용 데이터로 평가 전에 모델 성능을 검증해 볼 수 있다. (튜닝시 사용한다.)
② 수업에서는
- 성능 검증 없이 배우는 과정에서 편의상 모델을 만든 후 평가용으로 바로 평가할 예정이다. (7:3)
# x, y 분리
target = 'Ozone'
x = data.drop(target, axis=1)
y = data[target]
# 학습용, 평가용 데이터 분리
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)
(6) 과대적합 vs 과소적합
① 과대적합(Overfitting)
- 학습 데이터에 대해서는 성능이 매우 좋은데, 평가 데이터에 대해서는 성능이 매우 좋지 않은 경우
- 학습 데이터에 대해서만 잘 맞는 모델 => 실전에서 예측 성능이 좋지 않음
② 과소적합(Underfitting)
- 학습 데이터보다 평가 데이터에 대한 성능이 매우 좋거나, 모든 데이터에 대한 성능이 매우 안좋은 경우
- 모델이 너무 단순하여 학습 데이터에 대해 적절히 훈련되지 않은 경우. 머신러닝에 대한 이해
4. 모델링 코드 구조
(1) Scikit-Learn 소개
- 지도/비지도 학습 알고리즘을 제공하는 대표적인 파이썬 라이브러리
- sklearn이라고 쓰고 '사이킷런'이라고 읽는다.
- 오픈 소스로서, 개인/비즈니스 관계없이 누구나 무료로 사용이 가능하다.
- 여러 알고리즘을 같은 구조의 코드로 사용할 수 있어 배우기가 쉬우며, Iris, Boston 과 같은 다양한 예제 데이터셋(토이 데이터셋)을 포함하고 있어 학습에 용이하다.
- 따라서, 처음 Machine Learning을 배울 때 가장 적합한 라이브러리로, 모델링 과정에서 필요한 함수를 sklearn에서 불러와 사용한다.
# 불러오기
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error, r2_score
(2) Scikit-Learn 모델링 코드 구조
① 불러오기 | 사용할 알고리즘과 평가를 위한 함수 import from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_absolute_error |
② 선언하기 | 사용할 알고리즘용 함수로 모델 선언 model = LinearRegression() |
③ 학습하기 | 모델 .fit(x_train, y_train) 형태로 모델 학습시키기 model.fit(x_trian, y_train) |
④ 예측하기 | 모델 .predict(x_test) 형태로 예측한 결과 변수 저장 pred = model.predict(x_test) |
⑤ 평가하기 | 실젯값과 예측값을 평가 함수에 전달해 성능 평가 mean_absolute_error(y_test, pred) |
(3) 데이터 준비 과정
- 머신러닝은 데이터에서 규칙을 찾고 그 규칙에 기반에 예측하므로, 데이터 준비 과정이 필요하다.
- 충분히 학습하고 평가할 수 있는 좋은 데이터가 준비 되어야 좋은 모델을 기대할 수 있다.
- 대상 데이터를 불러와 충분히 탐색하고 적절히 전처리한 후 데이터 분리 과정을 수행한다.
# 라이브러리 불러오기
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 데이터 읽어오기
data = pd.read_csv('airquality.csv')
# x, y 분리
target = 'Ozone'
x = data.drop(target, axis=1)
y = data[target]
# 학습용, 평가용 데이터 분리
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_text_split(x, y, test_size=0.3)
(4) 모델링 과정
- 위에서 언급하였던 모델 코드 구조 5단계에 따라 코딩을 진행한다.
(불러오기-선언하기-학습하기-예측하기-평가하기)
- 사용할 알고리즘과 평과지표와 관련된 함수를 불러와 사용한다.
- 모델링 결과 (예측 및 평가 결과)에 대해 충분히 분석하고 의미를 찾는 과정이 필요하다.
# 1단계 : 불러오기
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
# 2단계 : 선언하기
model = LinearRegression()
# 3단계 : 학습하기
model.fit(x_train, y_train)
# 4단계 : 예측하기
y_pred = model.predict(y_test)
# 5단계 : 평가하기
result = mean_absolute_error(y_test, y_pred)
print(result)
'머신러닝 > 지도학습' 카테고리의 다른 글
[머신러닝-지도] 성능평가 (1) | 2024.12.16 |
---|