[4week] ML - 머신러닝 소개

atdawn·2024년 9월 26일
0

AIVLE

목록 보기
11/25

Chapter 1. 머신 러닝에 대한 이해

머신 러닝이란 ?
컴퓨터에 여러 경험 데이터를 주고 인공 신경망으로 학습시켜서 예측하게 하는 것


학습 방법에 따른 분류

  1. 지도 학습 (Supervised Learning)
    학습 대상이 되는 데이터에 정답을 주어 규칙성
    즉, 데이터의 패턴을 배우게 하는 학습 방법

  2. 비지도 학습 (Unsupervised Learning)
    정답이 없는 데이터만으로 배우게 하는 학습 방법

  3. 강화 학습 (Reinforcement Learning)
    선택한 결과에 대해 보상을 받아 행동을 개선하면서 배우게 하는 학습 방법

과제에 따른 분류

  1. 분류 문제(Classification)
    이미 적절히 분류된 데이터를 학습하여 분류 규칙을 찾고, 그 규칙을 기반으로 새롭게 주어진 데이터를 적절히 분류하는 것을 목적으로 함 (지도학습)

  2. 회귀 문제 (Regression)
    이미 결과값이 있는 데이터를 학습하여 입력 값과 결과 값의 연관성을 찾고, 그 연관성을 기반으로 새롭게 주어진 데이터에 대한 값을 예측하는 것을 목적으로 함 (지도 학습)

  3. 클러스터링 (Clustering)
    주어진 데이터를 학습하여 적절한 분류 규칙을 찾아 데이터를 분류함을 목적으로 함. 정답이 없으니 성능을 평가하기 어려움 (비지도 학습)


Chapter 2. 분류와 회귀

  • 모델링을 하기 전에 원하는 결과가 분류인지 회귀인지를 명확히 이해해야 함
  • 분류인지 회귀인지에 따라 사용할 알고리즘과 평가를 위한 함수가 달라짐

회귀

  • 연속된 숫자를 예측

분류

  • 범주값을 예측

분류와 회기문제 알고리즘과 평가 방법


Chapter 3. 용어

모델(Model)

  • 데이터로부터 패턴을 찾아 수학식으로 정리해 놓은 것
  • 모델링 (Modeling) : 오차가 적은 모델을 만드는 과정
  • 목적 : 샘플을 가지고 전체를 추정
    • 샘플 : 표본, 부분집합, 일부, 과거의 데이터
    • 전체 : 모집단, 전체집단, 현재와 미래의 데이터
    • 추정 : 예측, 추론

행, 열

독립변수, 종속변수

  • 독립변수 : x
  • 종속 변수(결과) : y

y= ax + b

평균과 오차

  • 통계학에서 사용되는 가장 단순한 모델 중 하나가 평균
  • 관측값(실제값)과 모델 예측값의 차이 : 이탈도 (Deviance) -> 오차

데이터 분리

  • 데이터 셋을 학습용, 검증용, 평가용 데이터로 분리

  • 실전 : 학습용, 검증용, 평가용

    • 평가용 데이터는 별도로 제공되는 데이터일 경우가 많음
    • 검증용 데이터로 평가 전에 모델 성능을 검증해 볼 수 있음 (튜닝 시 사용)

  • 수업 : 학습용, 평가용
    • 성능 검증 없이 배우는 과정에서는 펴의상 모델을 만든 후 평가용으로 바로 평가

🌟 평가 데이터는 미래의 데이터이기때문에 한 번 평가를 하면 과거로 돌아가 성능을 개선할 수 없음 !

x,y 분리

# x, y 분리
target = 'Ozone'
x = data.drop(target, axis=1)
y = data.loc[:, 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)

과대적합 vs 과소적합

  1. 과대 적합 (Overfitting)
  • 학습 데이터에 대해서는 성능이 매우 좋은데, 평가 데이터에 대해서는 성능이 매우 좋지 않는 경우
  • 학습 데이터에 대해서만 잘 맞는 모델 -> 실전에서 예측 성능이 좋지 않음
  1. 과소 적합 (Underfitting)
  • 학습 데이터보다 평가 데이터에 대한 성능이 매우 좋거나, 모든 데이터에 대한 성능이 매우 안좋은 경우
  • 모델이 너무 단순하여 학습 데이터에 대해 적절히 훈련되지 않는 경우

Chapter 4. 모델링 코드 구조

skleanr : 사이킷런

  • 지도/비지도 학습 알고리즘을 제공하는 대표적인 파이썬 라이브러리
  • 오픈 소스로서 개인, 비즈니스 관계없이 누구나 무료로 사용가능
  • 여러 알고리즘을 같은 구조의 코드로 사용할 수 있어 배우기 쉬움
  • Iris, Boston과 같은 다양한 예제 데이터셋(토이 데이터셋)을 포함하고 있어 학습에 용이
  • 모델링 과정에서 필요한 함수를 sklearn에서 불러와 사용함

Scikit-Learn 모델링 코드 구조

  • 피팅까지가 모델이 완성되는 단계
  • 학습이 되면 Binary 형태로 저장 -> 예측할때 사용

코드 실습

1. 환경 준비

# 라이브러리 불러오기
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings

warnings.filterwarnings(action='ignore')
%config InlineBackend.figure_format = 'retina'
# 데이터 읽어오기
path = 'https://raw.githubusercontent.com/Jangrae/csv/master/airquality_simple.csv'
data = pd.read_csv(path)

2. 데이터 이해

  • 상위 몇 개 행 확인
  • 하위 몇 개 행 확인
  • 변수 확인
  • 기술통계 확인
  • 상관관계 확인

3. 데이터 준비 (전처리)

  1. 결측치 처리
# 결측치 확인
data.isna().sum()

# 가까운 값으로 결측치 채우기
data['Solar.R'].interpolate(method='nearest',inplace=True)
  1. 변수 제거 : 분석에 의미가 없다고 판단되는 변수 제거
# 변수 제거
drop_cols = ['Month','Day']
data.drop(columns=drop_cols,inplace=True)


# 확인
data.head()
  1. x,y 분리
  • 우선 target 변수를 명확히 지정합니다.
  • target을 제외한 나머지 변수들 데이터는 x로 선언합니다.
  • target 변수 데이터는 y로 선언합니다.
  • 이 결과로 만들어진 x는 데이터프레임, y는 시리즈가 됩니다.
  • 이후 모든 작업은 x, y를 대상으로 진행합니다.
# target 확인
target = 'Ozone'

# 데이터 분리
x = data.drop(columns=target)
y = data.loc[:,'Ozone']

  1. 학습용, 평가용 데이터 분리
  • 학습용, 평가용 데이터를 적절한 비율로 분리합니다.
  • 반복 실행 시 동일한 결과를 얻기 위해 random_state 옵션을 지정합니다.
# 모듈 불러오기
from sklearn.model_selection import train_test_split

# 7:3으로 분리
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=42)

4. 모델링

  • 본격적으로 모델을 선언하고 학습하고 평가하는 과정을 진행합니다.
  • 우선 회귀 문제인지 분류 문제인지 명확히 구분합니다.
  1. 불러오기
# 1단계: 불러오기
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
  1. 선언하기
# 2단계: 선언하기
model = LinearRegression()
  1. 학습하기
# 3단계: 학습하기
model.fit(x_train, y_train)
  1. 예측하기
# 4단계: 예측하기
y_pred = model.predict(x_test)
  1. 평가하기
# 5단계: 평가하기
mean_absolute_error(y_test,y_pred)

# 실제값, 예측값
print('실제값:', y_test.values[:10]) #array
print('예측값:', y_pred[:10] ) 

# 시각화 비교
plt.plot(y_test.values)
plt.plot(y_pred)
plt.legend(['Actural','Predicted'])
plt.show()

profile
복습 복습 복습

0개의 댓글