본문 바로가기

Upstage AI Lab

Upstage AI Lab 3기 - ML 프로젝트 기본 이론 : 머신러닝

 

인공지능에 필수적인 파이썬 학습과 Statistics, 그리고 파이썬 EDA를 학습을 마치고 
본격적인 인공지능 학습, Machine Learning(기계학습)이 시작되었다.
패스트캠퍼스 인터넷 강의와 온라인 Zoom 실시간 강의가 9일간 하루 8시간씩 번갈아 진행된다.

머신러닝은 다양한 산업 분야에서 혁신을 주도하고 있으며, 데이터 기반 의사결정과 자동화의 핵심 기술이다.

머신러닝의 기본 개념부터 시작하여, 실제 프로젝트에 적용할 수 있는 실용적인 이론과 기법들을 기록하고자 한다.

- 머신러닝의 기본 개념: 머신러닝이란 무엇이며, 왜 중요한지
- 데이터 전처리: 데이터 수집, 정제, 변환 과정에서의 중요한 팁과 기법
- 모델 선택 및 평가: 다양한 머신러닝 알고리즘과 그 적용 방법을 설명하고, 모델 성능을 평가하는 방법
- 실제 프로젝트 예제: 이론을 실제 프로젝트에 어떻게 적용할 수 있는지 보여주는 실습 예제

나중에 복습할 수 있도록 머신러닝 프로젝트의 기본 이론에 대해 학습한 내용을 기록해 보자~.


사전지식

- 파이썬
- Statistics
- EDA

 

강사 : 이종혁
- 한방과 수학을 전공
- 독학과 부트캠프를 통해 머신러닝 직군에 종사

 

 

 


목차

 

1. 머신러닝 개론

01 머신러닝의 정의


    1.1 인공지능, 머신러닝 , 딥러닝 개념정리
    1.2 지도/비지도 학습
    1.3 정형/비정형 데이터
    1.4 현업에서의 머신러닝 사례 살펴보기 


02 머신러닝 성능 평가 방법론


    2.1 성능 평가 지표
    2.2 훈련 집합과 테스트 집합
    2.3 과대적합과 과소적합

 

03 머신러닝 모델의 학습원리 살펴보기(분류,회귀)

 

    3.1 머신러닝 모델의 학습원리
    3.2 경사하강법(Gradient Descent)
    3.3 연속형과 범주형 데이터
    3.4 분류와 회귀문제

 

2. 머신러닝과 분류(Classification) Task

01 분류 테스크 정의와 모델


    1.1 분류 테스크 살펴보기
    1.2 분류 테스크 모델 종류
    1.3 로지스틱 회귀 이론 및 구현
    1.4 의사결정 트리 이론 및 구현


02 데이터 분석 및 활용하기


    2.1 기본기 다지기
    2.2 EDA(Exploratory Data Analysis)


03 머신러닝 모델로 분류 예시문제 풀어보기


    3.1 손글씨(MNIST) 데이터 분류하기
    3.2 붓꽃(IRIS) 데이터 분류하기

 

3. 머신러닝과 회귀(Regression) 태스크

01 회귀 태스크 정의와 모델

 

    1.1 회귀 태스크 살펴보기
    1.2 회귀 태스크 모델 종류
    1.3 부스팅계열 모델 이론 및 구현

 

02 모델 성능 기록 및 향상시키기

 

    2.1 Weight and Bias 사용하기
    2.2 과대적합과 과소적합 해결하기
    2.3 Hyper Parameter Tunning

 

3 (실습) 머신러닝 모델로 회귀 예시문제 풀어보기

 

    3.1 캘리포니아 집값 예측하기
    3.2 자전거 수요 예측하기
    3.3 주가 예측하기

 

4. 머신러닝과 클러스터링(Clustering) 태스크

01 클러스터링 태스크 정의와 모델

 

    1.1 클러스터링 태스크 살펴보기
    1.2 클러스터링 태스크 모델 종류
    1.3 클러스터링 평가

 

02 모델 결과 서빙하기

 

    2.1 Streamlit 소개하기
    2.2 (실습) Streamlit 으로 모델 서빙하기
    2.3 (실습) Streamlit 으로 모델 배포하기

 

03 (실습)머신러닝 모델로 클러스터링 예시문제 풀어보기

 

    3.1 붓꽃 분류하기
    3.2 신용카드 고객 세분화하기
    3.3 와인 분류하기

 

 


01 머신러닝의 정의

 

1.1 인공지능, 머신러닝 , 딥러닝 개념정리

 

 

인공지능(AI)

  • 인공적으로 지능을 만든 것!

 

머신러닝

  • 기계가 인간의 개입없이 스스로 학습하는 기술
  • 피쳐를 사람이 지정해줘야 함.

딥러닝

  • 머신러닝 중에 Neural Network을 통해 학습하는 기술
  • 데이터 특성 지정 불필요

1.2 지도/비지도 학습

 

지도학습

  • 입력 데이터와 정답데이터를 사용하여 모델을 훈련

 

비지도 학습

  • 입력데이터에 대한 정답이 없이 모델을 훈련하여 데이터의 패던이나 구조를 발견하는 방법

 

1.3 정형/비정형 데이터

 

정형 데이터 : 테이블 형태의 데이터

비정형 데이터 : 이미지, 동영상, 텍스트, 음성 등

 

1.4 현업에서의 머신러닝 사례 살펴보기 

 

어뷰징 탐지(이메일 스팸 필터링, 공정 관리, 로그인보안)

넷플릭스(Netflix)의 추천 시스템

클러스터링(예시 : 쟁점별 판례검색)

 

 

02 머신러닝 성능 평가 방법론


2.1 성능 평가 지표

 

Confusion matrix

 

 

 

 

 

혼동행렬과 평가지표

 

2.2 훈련 집합과 테스트 집합

from sklearn.model_selection import train_test_split


2.3 과대적합과 과소적합

과대 적합

    : 모델이 과하게 훈련(train) 집합에 학습되어, 훈련 집합에 정확히 일치하게 되는 현상.
그로 인해 테스트(test) 집합을 못 맞춤.

    : 일반화 성능 부족현상

 

과소 적합

    : 모델이 훈련(train) 집합에 대해서 충분히 학습되지 않아, 훈련 집합을 잘 맞추지 못하는 현상.

 

출처 : https://vitalflux.com/overfitting-underfitting-concepts-interview-questions/

 

출처 : https://vitalflux.com/overfitting-underfitting-concepts-interview-questions

 

03 머신러닝 모델의 학습원리 살펴보기(분류,회귀)

 

    3.1 머신러닝 모델의 학습원리

출처 : 패스트캠퍼스 실시간 강의 이종혁


3.2 경사하강법(Gradient Descent)

경사하강법은 비용 함수의 기울기를 사용하여 파라미터를 반복적으로 업데이트하면서 최적의 값을 찾는 알고리즘.


3.3 연속형과 범주형 데이터

연속형 데이터 : 연속적이고 특정 범위 내의 모든 값을 가질 수 있음. 주로 측정값

범주형 데이터 : 값이 명확하게 구분됨.
   

3.4 분류와 회귀문제

 

분류(Classification)

입력 데이터: 분류 모델은 연속형(continuous) 또는 범주형(categorical) 데이터를 모두 입력으로 받을 수 있음

예시 : 환자의 나이(연속형)와 성별(범주형) 모두 입력 데이터

출력 데이터: 범주형 데이터로 결과를 출력

회귀(Regression)

입력 데이터: 회귀 모델도 연속형 및 범주형 데이터를 모두 입력으로 받을 수 있다. 하지만 대부분의 경우 연속형 데이터가 많이 사용됨.

출력 데이터: 연속형 데이터로 결과를 출력

 

출처 : 패스트캠퍼스 실시간 강의 이종혁

 

2. 머신러닝과 분류(Classification) Task

01 분류 테스크 정의와 모델


1.1 분류 테스크 살펴보기

입력 데이터를 미리 정의된 범주(label) 중 하나 또는 여러 개로 분류하는 작업

 

1.2 분류 테스크 모델 종류
로지스틱 회귀(Logistic Regression)

k-최근접 이웃 알고리즘(k-Nearest Neighbors, k-NN)

서포트 벡터 머신(Support Vector Machine, SVM)

의사결정 트리(Decision Tree)

 

1.3 로지스틱 회귀 이론 및 구현
선형 회귀의 확장으로, 출력값이 연속적인 값이 아니라 특정 클래스에 속할 확률을 예측

1.4 의사결정 트리 이론 및 구현

데이터의 특성과 목표 변수를 기반으로 분할 규칙을 만드는 트리 구조의 모델


02 데이터 분석 및 활용하기


2.1 기본기 다지기

> 넘파이

np.array() : 넘파이 배열 생성

np.zeros() : 모든 요소가 0인 배열 생성

np.ones() : 모든 요소가 1인 배열 생성

np.arange() : 주어진 범위 내의 값 배열 생성

np.linspace() : 주어진 범위내 균등 값 배열 생성

np.reshape() : 배열 형태 변경

np.ravel() : 1차원으로 평면화

np.transpose():배열의 축 교환

 

> 판다스


2.2 EDA(Exploratory Data Analysis)

데이터분석 과정의 단계

데이터 수집 -> 데이터 전처리 -> EDA -> 모델링 -> 모델평가 및 해석

 

EDA 

  • 데이터 요약
  • 데이터 시각화
  • 데이터 정제
  • 상관관계 분석

 


03 머신러닝 모델로 분류 예시문제 풀어보기


    3.1 손글씨(MNIST) 데이터 분류하기(실습)
    3.2 붓꽃(IRIS) 데이터 분류하기(실습)

 

1) 라이브러리 import

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report, accuracy_score, confusion_matrix
import seaborn as sns

 

2) 데이터 셋 로드 및 전처리

# Iris 데이터셋 로드
iris = load_iris()
X,y = iris.data , iris.target
# 데이터 정규화
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 훈련 데이터와 테스트 데이터 분리
X_train, X_test ,y_train ,y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

 

3) 모델로드

# 의사결정 트리 모델 로드
model = DecisionTreeClassifier()

 

4) 모델 학습

# 모델 훈련
model.fit(X_train, y_train)

 

5) 모델 평가 및 예측

# 테스트 세트를 사용하여 예측 수행
y_pred = model.predict(X_test)

# 모델 평가
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

# 분류 보고서 출력
print(classification_report(y_test, y_pred))

# 혼동 행렬 출력
conf_matrix = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(8, 6))
sns.heatmap(conf_matrix, annot=True, cmap="Blues", fmt='g', xticklabels=iris.target_names, yticklabels=iris.target_names)
plt.xlabel('Predicted')
plt.ylabel('True')
plt.title('Confusion Matrix')
plt.show()

 

 

6) 시각화

# 몇 가지 예측 결과 시각화
def plot_iris_predictions(X, y_true, y_pred, features):
    plt.figure(figsize=(12, 6))
    for i, feature in enumerate(features):
        plt.subplot(1, len(features), i+1)
        plt.scatter(X[:, i], y_true, color='blue', marker='o', label='True')
        plt.scatter(X[:, i], y_pred, color='red', marker='x', label='Predicted')
        plt.xlabel(feature)
        plt.ylabel('Class')
        plt.legend(loc='best')
    plt.tight_layout()
    plt.show()

# 테스트 세트의 예측 결과 시각화
features = iris.feature_names
plot_iris_predictions(X_test, y_test, y_pred, features)

 

 

 

3. 머신러닝과 회귀(Regression) 태스크

01 회귀 태스크 정의와 모델

 

1.1 회귀 태스크 살펴보기

회귀는 종속 변수(타겟 변수)와 하나 이상의 독립 변수(설명 변수) 간의 관계를 모델링하고 분석하는 기법

 

머신러닝에서 회귀  6가지 형태
○ 선형 회귀 (Linear Regression)
○ 다항 회귀 (Polynomial Regression)
○ 정규화 회귀 (Regularized Regression)
○ 회귀 트리 (Decision Tree Regression)
○ 앙상블 방법 (Ensemble Methods)
○ 기타 회귀 방법

 

회귀 평가 지표


    1.2 회귀 태스크 모델 종류

선형회귀

다항 회귀

릿지 회귀

- L2 penelty

다중 공선성(Multicollinearity) : 독립변수들간의 강한 상관관계로 발생하는 문제.

 

라쏘 회귀

- L1 penelty

 

SVR

- 고차원 공간과 변수 간의 관계가 복잡한 비선형인 경우 효과적

 

의사결정트리 회귀

 

랜덤 포레스트 회귀

- 과적합을 방지하며 정확도를 높이기 위한 의사결정 트리의 앙상블 모델이다

 

1.3 부스팅계열 모델 이론 및 구현

 

Adaptive Boosting

- 가중치를 조정하여 가장 분류하기 어려운 샘플에 중점을 두는 형태로 동작

 

Gradient Boosting

- 미분 가능한 손실함수를 최적화하는 형태로 동작

 

XGBoost

- 성능과 속도를 위해 설계된 그래디언트 부스팅의 최적화된 구현

 

LightGBM

- 대규모 데이터셋의 경우 빠르고 효율적으로 동작하도록 설계

    

 

02 모델 성능 기록 및 향상시키기

 

2.1 Weight and Bias 사용하기

Weights & Biases(줄여서 W&B, 한국인은 완디비)는 머신러닝과 딥러닝 실험을 추적하고 관리하는 플랫폼

 

주요 기능

  • 실험 추적
  • 하이퍼 파라미터 튜닝
  • 모델 시각화 및 분석
  • 협업 및 공유

2.2 과대적합과 과소적합 해결하기

Feature Selection - 불필요 특성 제거

Filter Methods

Wrapper Methods

Embedded Methods

 

Cross Validation 


2.3 Hyper Parameter Tunning

 

3 (실습) 머신러닝 모델로 회귀 예시문제 풀어보기

 

    3.1 캘리포니아 집값 예측하기
    3.2 자전거 수요 예측하기
    3.3 주가 예측하기

 

1) 라이브러리 import

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

from sklearn.ensemble import RandomForestRegressor

 

2) 데이터 로드

import gdown
file_id = "13W9laYG90nF5aPLwbjsTHeHKyQuUei57"
output = "/content/SeoulBikeData.csv" # 저장 위치 및 저장할 파일 이름
gdown.download(id=file_id, output=output, quiet=False)
# 데이터 불러오기
try:
    data = pd.read_csv('/content/SeoulBikeData.csv',encoding='utf-8') # 여기에 데이터셋의 경로를 지정해주세요.
except UnicodeDecodeError:
    # UTF-8로 실패할 경우 CP949로 재시도
    data = pd.read_csv('/content/SeoulBikeData.csv',encoding='cp949')

 

3) 데이터 전처리

# 누락된 값 처리
data.fillna(method='ffill', inplace=True)

# 'Date' 컬럼을 datetime 타입으로 변환하고, 연, 월, 일로 분리
data['Date'] = pd.to_datetime(data['Date'],dayfirst=True)
data['Year'] = data['Date'].dt.year
data['Month'] = data['Date'].dt.month
data['Day'] = data['Date'].dt.day
# 원본 'Date' 컬럼은 이제 제거
data.drop('Date', axis=1, inplace=True)

# 범주형 변수 원-핫 인코딩
data = pd.get_dummies(data, columns=['Seasons', 'Holiday', 'Functioning Day'])

# 정규화가 필요한 수치형 컬럼 선택
numerical_features = ['Rented Bike Count', 'Hour', 'Temperature(kyung)', 'Humidity(%)',
                      'Wind speed (m/s)', 'Visibility (10m)', 'Dew point temperature(kyung)',
                      'Solar Radiation (MJ/m2)', 'Rainfall(mm)', 'Snowfall (cm)']

# MinMaxScaler를 사용하여 정규화
scaler = MinMaxScaler()
data[numerical_features] = scaler.fit_transform(data[numerical_features])
X = data.drop('Rented Bike Count',axis=1) # 'Rented Bike Count' 열을 제외한 모든 특성을 사용
y = data['Rented Bike Count'] # 예측 목표 변수

# 데이터를 훈련 세트와 테스트 세트로 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

 

 

4) 모델 로드 및 학습

# 랜덤 포레스트 회귀 모델을 생성합니다.
model = RandomForestRegressor(
    n_estimators=100,
    random_state=42
)
# 모델을 훈련 데이터에 적합시킵니다.
model.fit(X_train, y_train)

 

 

5) 모델 평가 및 예측

# 예측
y_pred_train = model.predict(X_train)
y_pred_test = model.predict(X_test)
# 성능 평가
train_mse = mean_squared_error(y_train, y_pred_train)
test_mse = mean_squared_error(y_test, y_pred_test)
train_r2 = r2_score(y_train, y_pred_train)
test_r2 = r2_score(y_test, y_pred_test)

print(f'Train MSE: {train_mse}, Train R^2: {train_r2}')
print(f'Test MSE: {test_mse}, Test R^2: {test_r2}')

 

6) 시각화

 

 

4. 머신러닝과 클러스터링(Clustering) 태스크

01 클러스터링 태스크 정의와 모델

 

1.1 클러스터링 태스크 살펴보기

클러스터링은 주어진 데이터 집합을 여러 개의 군집으로 나누는 비지도 학습 방법

 

클러스터링 거리 측정방법

Euclidean Distance : 두 점 사이의 직선 거리

Manhattan Distance :  도시 블록 간의 거리를 계산하는 방식( 절대값을 합산하는 방식)

출처 : https://blog.naver.com/winddori2002/221872726043

Minkowski Distance : 유클리드와 맨하탄 거리를 일반화한 거리 측정 방식

Chebyshev Distance : 두 점 사이의 좌표 차이의 최대값으로 측정하는 방식

Mahalanobis Distance : 변수의 분산과 상관성을 고려한 거리 측정 방식

출처 : https://uiandwe.tistory.com/96#comment3748844

데이터 유사도

Jaccard Similarity : 두 집합의 교집합 크기를 합집합 크기로 나눈 유사도

cosine Similarity : 코사인 각도를 이용한 유사도 

Correlation Coefficient : 두 변수간 선형 관계


1.2 클러스터링 태스크 모델 종류

K-means Clustering

- 데이터 셋을 K개의 군집으로 나누는 알고리즘

Hierarchical Clustering : 데이터 간의 계층적 구조를 형성, dendrogram 트리 구조로 표

Spectral clustering - 그래프 based clustering
DBSCAN - Density based Clustering, epsilon 필요(거리)
HDBSCAN - epsilon이 필요없음, 계층
- spanning tree, cluster hierarchy, minimum cluster size

1.3 클러스터링 평가

Elbow Method : 군집 내 거리의 총합 그래프를 그리고, 급격히 감소하는 지점(Elbow)을 찾음.

Silhouette Coefficient: 1에 가까울 수록 군집화 잘됨

 

02 모델 결과 서빙하기

 

2.1 Streamlit 소개하기

-파이썬으로 웹 애플리케이션을 쉽게 만들 수 있는 라이브러리

-한두줄의 코드로 서빙 및 자체적으로 배포 가능

2.2 (실습) Streamlit 으로 모델 서빙하기
2.3 (실습) Streamlit 으로 모델 배포하기

 

03 (실습)머신러닝 모델로 클러스터링 예시문제 풀어보기

 

3.1 붓꽃 분류하기
3.2 신용카드 고객 세분화하기
3.3 와인 분류하기

 

 

 

 

 

 

머신러닝 학습을 시작하여 깊이 있게 공부하려니 수학적 수식에서 많이 막힌다.

강사님 왈 " 머신러닝은 학습할 게 너무 많으니 수학보다는 어떻게 활용할 것인가에 초점을 맞춰라" 라고 한다.

수학을 다시 공부하기에는 시간이 너무 없다는 것이다.

더구나 나처럼 나이먹고 시작하는 사람은 더 없이 시간이 부족하다.

어찌 되었던 최대한 배워보자.

 

2016년 Top 10 words
1) 딥러닝이 전부가 아니다.
2) 상황에 맞는 평가 지표를 활용해라.
3) Model tuning 하는데 있어서 시간을 많이 투자하지 마라( 프로젝트에서 5%만, 데이터 퀄리티 높여라)
4) Ensembles almost always work better
5) 개인화 혹인 초개인화가 트렌드
6) 널리 알려진 컨텐츠들은 아직도 잘 먹힌다. ???
7) 차원의 저주를 피해라, 오버피팅
8) 잘 알려진 혹은 유명한 BP 사례를 배워라. ???
9) 오픈 소스를 잘 활용해라.
10) 프로젝트를 진행하기 전 경영진의 지원이 있는지 확인해라.