본문 바로가기
[KT AIBLE SCHOOL]에이블스쿨

[KT에이블스쿨] 04.07 머신러닝

by 오동일지 2025. 4. 7.

인공지능 : 기계가 인간처럼 사고하고 행동하도록 만드는 기술

머신러닝(기계학습) : 데이터를 이용해 스스로 학습하는 기술

딥러닝 : 인공 신경망(ANN)을 이용하여 정보 처리

 

인공지능 > 머신러닝 > 딥러닝

 

로봇 프로세스 자동화(RPA) : sw 로봇을 이용하여 단순, 복잡한 활동을 사람 대신 수행

 

머신러닝 3요소

  • 데이터
  • 학습
  • 모델 : 머신러닝의 객체

데이터(Data) : 머신러닝의 출발점

-숫자, 텍스트, 이미지, 소리 등 모든 형태의 정보

-머신러닝 모델은 사람처럼 스스로 생각 x, 주어진 데이터에서 규칙과 패턴을 찾아 학습함

 

데이터의 중요성

-머신러닝의 성능은 데이터의 질에 따라 결정됨

 

좋은 데이터의 조건

- 충분한 양 : 너무 적으면 충분한 학습 불가

- 정확함 : 데이터의 오류가 많으면 모델도 잘못된 패턴 학습

- 다양함 : 편향된 데이터(특정 유형의 데이터만 포함)는 모델이 일반적인 예측을 못함


학습(Learning) : 데이터에서 패턴을 찾는 과정

- 모델이 데이터를 통해 패턴을 찾고, 새로운 데이터를 예측하도록 만드는 과정

- 사람이 가르쳐주지 않아도, 주어진 데이터를 분석하여 스스로 규칙을 찾음

 

학습 과정

  1. 데이터 입력 : 모델에 학습데이터 제공
  2. 특징 추출 : 의미있는 데이터 추출
  3. 패턴 학습 : 모델이 데이터를 분석 후 패턴 찾음
  4. 모델 평가 : 모델이 얼마나 정확한지 평가
  5. 최적화 : 성능 향상을 위해 추가 학습

모델(Model) : 데이터와 학습을 연결하는 핵심 요소

- 데이터에서 학습한 패턴을 기반으로 새로운 데이터를 예측하는 역할

 

모델의 역할

- 학습한 내용을 바탕으로 입력값을 분석하고 적절한 출력 생성

- 모델은 데이터를 입력받아 일정한 규칙을 적용하여 결과를 도출하는 역할

 

좋은 모델의 조건

- 일반화 능력(Generalization) : 새로운 데이터를 잘 예측해야함

- 과적합 방지(Overfitting Prevention)

: 학습한 데이터에만 과도하게 맞춰져서 새로운 데이터에서 성능이 떨어지지 않아야 함

- 효율성(Efficiency) : 너무 복잡하지 않고 빠르게 실행되어야 함

 


 데이터 분할

머신러닝 모델을 훈련하고 평가하기 위해 전체 데이터를 용도별로 나누는 과정

ex) 힌트(문제)데이터&정답데이터

 

목적 - 모델이 보지 못한 새로운 데이터에도 잘 작동하도록 일반화 성능 확보

  • 학습(train) : 모델이 패턴을 학습하는데 사용
  • 검증(validation) : 하이퍼파라미터 튜닝 및 성능 확인
  • 테스트(test) : 최종 성능 평가용

연속형 데이터 특징

  • 숫자로 표현, 연산 가능
  • 특정 범위에서 연속적인 값을 가짐
  • 평균, 표준편차 등 수학적 연산 가능

분할 방법 1

train data : test data = 8:2 or 7:3

분할 방법 2 

train data : valid data : test data

머신러닝에서는 보통 1번 방법 사용

 

실전에서는 train / test만 나누고 교차검증으로 validation을 대신하기도 함

출처 : https://velog.io/@lsmmay322/Model-Selection

 

 


train_test_split을 활용한 데이터 분할

힌트데이터(x) 독립변수

정답데이터(y) 종속변수 

y = f(x)

 

학습용

X_train(힌트) , y_train(정답)

 

테스트용

X_test(힌트) , y_test(정답)

 

라이브러리 불러오기

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split

예제 생성

# 가상의 데이터 생성
np.random.seed(42)  # 재현성을 위해 고정, 42는 규칙 고유번호
X = pd.DataFrame({
    'feature1': np.random.rand(100),
    'feature2': np.random.rand(100)
})
y = pd.Series(np.random.choice([0, 1], size=100))  # 0 또는 1 라벨

데이터 셋 살펴보기

display(X.head())
y.head()

 

# 기본적인 분할
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=1234 #stratify 비율 고정
)

# 분할 결과 확인
print(f" X_train shape: {X_train.shape}")
print(f" X_test shape: {X_test.shape}")
print(f" y_train label 분포:\n{y_train.value_counts()}")
print(f" y_test label 분포:\n{y_test.value_counts()}")

x , y 순서 중요

  • train_test_split은 머신러닝에서 가장 기초적이고 중요한 함수
  • 테스트 데이터는 반드시 훈련에 사용되지 않아야 함, 모델 평가를 위해 보존해야 함
  • 일반적인 분할 비율은 8:2 또는 7:3

머신러닝 학습 프로세스

  1. 데이터 수집
  2. 데이터 탐색 및 전처리
  3. 데이터 분할
  4. 모델 선택 및 학습
  5. 예측 및 평가

sckit-learn은 머신러닝 모델을 쉽게 구축, 학습할 수 있도록 도와주는 파이썬 라이브러리

모델 학습 과정

  1. 데이터 준비
  2. 데이터 분할 : model_selection.train_test_split
  3. 모델 선택
  4. 학습 : fit
  5. 평가

<사이킷런을 이용한 붓꽃데이터 품종 예측>

 

0.라이브러리 불러오기

import pandas as pd
import numpy as np
from sklearn.datasets import load_iris

 

1.데이터 불러오기

- 사이킷런에서 제공하는 붓꽃 데이터 사용

데이터 확인

import pandas as pd

# 붓꽃 데이터 세트를 로딩합니다.
iris = load_iris()

# iris.data는 Iris 데이터 세트에서 피처(feature)만으로 된 데이터를 numpy로 가지고 있습니다.
iris_data = iris.data # X

# iris.target은 붓꽃 데이터 세트에서 레이블(결정 값) 데이터를 numpy로 가지고 있습니다.
iris_label = iris.target #y
print('iris target값:', iris_label)
print('iris target명:', iris.target_names)

# 붓꽃 데이터 세트를 자세히 보기 위해 DataFrame으로 변환합니다.
iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names)
iris_df['label'] = iris.target
iris_df.head(3)

 

2.데이터 탐색 및 전처리(EDA & Preprocessing)

- 데이터 특징 파악, 결측치나 이상치 확인

- 범주형 데이터를 숫자로 바꾸거나, 스케일 조정이 필요한 경우 전처리

다양한 함수로 확인

# 결측지 확인 isnull()
iris_df.isnull().sum()

#데이터 살펴보기 : head(), shape, info(), isnull().sum()
iris_df.shape

iris_df.info()

 

3.데이터 분할(Train / Test Split)

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_label, test_size=0.3, random_state=1234)
print(X_train.shape)
print(X_test.shape)
print(y_train.shape)
print(y_test.shape)
print('-----------------------')

#iris_df
# X = iris_df.drop('label', axis = 1)
# y = iris_df['label']

# print(X.shape)
# print(y.shape)

# print('-----------------------')
# print(iris_data.shape)
# print(iris_label.shape)

 

4. 모델 선택 및 학습(Model Training)

- 사용할 알고리즘 선택 후 학습

- 의사결정나무(Decision Tree) 모델 적용 ->스무고개라 보면 됨

# 0. 모델 라이브러리를 불러오세요
from sklearn.tree import DecisionTreeClassifier

# 1. 모델을 객체화 하세요
model = DecisionTreeClassifier() #모델 객체화

# 2. 학습을 수행하세요
model.fit(X_train, y_train)

 

5. 예측 및 평가(Precition & Evaluation)

- 학습된 모델로 테스트 데이터 예측, 정확도 등의 지표로 성능평가

- 성능 측정 중 정확도를 기준으로 모델평가를 해보자

 -> sklearn.metrics.accuracy_score

pred = model.predict(X_test) #성능 예측

from sklearn.metrics import accuracy_score

score = accuracy_score(pred, y_test) # 결과값과 비교
print(score)

남들과 다르게 결과가 나온다면 데이터 분할 당시 test_size와 random_state 값을 다르게 설정했기 때문