본문 바로가기
머신러닝/지도학습

[머신러닝-지도] 머신러닝 소개

by 황오독 2024. 12. 15.

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)

- 학습 데이터보다 평가 데이터에 대한 성능이 매우 좋거나, 모든 데이터에 대한 성능이 매우 안좋은 경우

- 모델이 너무 단순하여 학습 데이터에 대해 적절히 훈련되지 않은 경우. 머신러닝에 대한 이해

https://heytech.tistory.com/125

 

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