머신러닝 (Machine Learning)
머신러닝은 인공지능의 핵심 기술로, 컴퓨터가 명시적으로 프로그래밍되지 않아도 데이터에서 패턴을 학습하고, 이를 기반으로 새로운 데이터를 예측하거나 결정을 내리는 기술이다. 현대의 많은 기술과 서비스가 머신러닝을 기반으로 작동하며, 데이터 과학과 AI 분야에서 필수적인 지식이다.
정말 간단하게 설명하자면, 컴퓨터에게 많은 예시를 보여주면 컴퓨터가 스스로 패턴을 찾아서 새로운 문제를 해결할 수 있게 만드는 기술이다. 마치 아이에게 사과와 바나나를 여러 번 보여주면 아이가 나중에 새로운 사과를 보고도 "이건 사과야"라고 알 수 있는 것과 비슷하다.
1. 인공지능의 분류
인공지능의 정의
인공지능(AI, Artificial Intelligence)은 컴퓨터나 기계가 인간처럼 생각하고 학습하며 문제를 해결하는 능력을 갖추도록 만드는 기술이다. AI는 컴퓨터 과학의 한 분야로, 데이터를 활용해 의사결정을 내리거나 예측하는 시스템을 개발하는 것을 목표로 한다.
1. 규칙 기반 알고리즘
Rule-based algorithms(규칙 기반 알고리즘)은 명시적으로 정의된 규칙(If-Then-Else 문법 등)을 사용하여 특정 문제를 해결하거나 작업을 수행하는 알고리즘이다. 이러한 알고리즘은 사람이 직접 작성한 논리와 조건에 따라 작동하며, 데이터를 학습하지 않고도 결과를 도출할 수 있다.
예시:
def calculate_discount(price, age):
if age >= 65:
return price * 0.8 # 20% 할인
elif age < 18:
return price * 0.9 # 10% 할인
else:
return price # 할인 없음
2. 머신러닝
머신러닝(Machine Learning)은 인공지능(AI)의 한 분야로, 컴퓨터가 명시적으로 프로그래밍되지 않아도 데이터에서 패턴을 학습하고, 이를 기반으로 새로운 데이터를 예측하거나 결정을 내리는 기술이다. 머신러닝은 AI의 핵심 기술로, 우리가 사용하는 많은 기술과 서비스의 기초가 된다.
3. 딥러닝
딥러닝(Deep Learning)은 머신러닝의 한 분야로, 사람의 뇌에서 영감을 받은 인공신경망(Artificial Neural Networks)을 사용하여 데이터를 학습하고 복잡한 문제를 해결하는 기술이다. 특히, 딥러닝은 대량의 데이터와 고성능 컴퓨팅 자원을 활용하여 뛰어난 성능을 발휘하며, 이미지, 음성, 자연어 처리 등에서 주로 사용된다.
인공지능의 관계
인공지능 (AI)
└── 머신러닝 (Machine Learning)
└── 딥러닝 (Deep Learning)
- 인공지능: 가장 넓은 개념
- 머신러닝: 인공지능의 한 분야, 데이터로부터 학습
- 딥러닝: 머신러닝의 한 분야, 신경망을 사용한 학습
2. 머신러닝을 먼저 공부해야 하는 이유
1. 기초 개념 없이 딥러닝은 어렵다
딥러닝은 머신러닝의 하위 분야로, 기본적인 개념(예: 과적합, 분산과 편향, 학습/검증/테스트 분리, 평가 지표 등)을 머신러닝에서 먼저 익히지 않으면 딥러닝 모델의 작동 원리나 결과를 해석하기 어렵다.
2. 작고 단순한 문제에는 머신러닝이 더 효과적
모든 문제에 딥러닝이 필요한 것은 아니다. 예를 들어, 고객 이탈 예측이나 단순한 이진 분류 문제에서는 로지스틱 회귀나 결정 트리 같은 머신러닝 모델이 빠르고 정확하며, 데이터도 적게 필요하다.
3. 머신러닝으로 할 수 있는 일
| 작업 유형 | 설명 | 예시 |
|---|---|---|
| 분류 (Classification) | 데이터를 미리 정의된 카테고리로 분류 | 스팸 메일 분류, 암 진단 (양성/악성), 고객 이탈 예측, 고장 여부 판단 |
| 회귀 (Regression) | 연속적인 수치를 예측 | 주택 가격 예측, 주가 예측, 광고 클릭률 예측, 날씨 온도 예측 |
| 군집화 (Clustering) | 유사한 데이터를 그룹으로 묶기 | 고객 세그먼트 분류, 상품 자동 그룹화, 이상 거래 탐지, 문서 주제 군집화 |
| 추천 시스템 | 사용자에게 맞는 항목 추천 | 영화, 음악, 상품 추천, 사용자 맞춤 콘텐츠 제공 |
| 자연어 처리 (NLP) | 텍스트 데이터 분석 및 생성 | 문장 감정 분석, 뉴스 기사 분류, 챗봇 응답 생성, 기계 번역 |
| 이미지 처리 (Computer Vision) | 이미지에서 정보 추출 | 얼굴 인식, 객체 탐지, 자율주행 자동차 인식, X-ray 진단 보조 |
| 이상 탐지 (Anomaly Detection) | 정상과 다른 패턴 찾기 | 금융 사기 탐지, 네트워크 이상 징후 감지, 공정 불량 탐지 |
| 강화 학습 (Reinforcement Learning) | 환경과 상호작용하며 학습 | 게임 AI (알파고 등), 로봇 제어, 스마트 팩토리 자동 제어 |
| 시계열 분석 | 시간에 따른 데이터 분석 | 수요 예측, 재고 관리, 에너지 사용량 예측 |
| 음성 인식 및 합성 | 음성 데이터 처리 | 음성 명령 인식, AI 스피커, 텍스트 음성 변환 (TTS) |
4. 머신러닝의 학습 방법
1. 지도학습 (Supervised Learning)
입력 데이터와 해당 데이터의 정답(레이블)이 제공되는 학습 방식이다. 주어진 입력에 대해 올바른 출력(레이블)을 예측하는 모델을 학습한다.
예시:
- 이메일이 스팸인지 아닌지 분류 (레이블: 스팸/정상)
- 집의 크기로 집값 예측 (레이블: 실제 집값)
2. 비지도학습 (Unsupervised Learning)
입력 데이터에는 레이블(정답)이 없으며, 데이터 자체의 구조나 패턴을 학습한다. 데이터 내에서 숨겨진 구조를 찾거나 그룹화를 수행한다.
예시:
- 고객을 유사한 특성으로 그룹화
- 이상 거래 패턴 탐지
3. 클러스터링 (Clustering)
데이터를 비슷한 그룹으로 묶는다. 데이터를 더 작은 차원으로 변환하여 시각화하거나 연산 효율성을 높인다.
예시:
- K-means 클러스터링
- 계층적 클러스터링
4. 강화학습 (Reinforcement Learning)
에이전트(Agent)가 환경(Environment)과 상호작용하며 보상(Reward)을 최대화하는 행동을 학습한다.
예시:
- 게임 AI (체스, 바둑)
- 자율주행 자동차
5. 반지도학습 (Semi-Supervised Learning)
데이터의 일부에만 레이블이 있고, 나머지는 레이블이 없는 상태에서 학습한다. 레이블링된 데이터가 적을 때 유용하다.
6. 자기 지도 학습 (Self-Supervised Learning)
데이터에서 레이블 없이 일부 정보를 예측하도록 학습한다. 데이터를 활용하여 자체적으로 레이블을 생성한다.
7. 온라인 학습 (Online Learning)
데이터를 순차적으로 제공하며, 실시간으로 학습하는 방식이다. 데이터가 점진적으로 들어오는 환경에 적합하다.
8. 트랜스퍼 러닝 (Transfer Learning)
사전 학습된 모델의 지식을 새로운 문제에 적용한다. 학습 시간이 단축되며, 적은 데이터로 성능 향상을 할 수 있다.
주요 개념
모델 (Model)
AI에서 "모델"은 주어진 데이터를 학습하여 패턴과 규칙을 찾아내고, 새로운 데이터에 대해 예측이나 결정을 내리는 수학적 구조 또는 알고리즘이다. 예를 들어, 사진 속 동물이 강아지인지 고양이인지 구분하거나, 다음에 올 단어를 예측하는 것이 AI 모델의 역할이다. 모델은 주로 데이터와 수학적 함수의 조합으로 구성되며, 학습(Training) 과정을 통해 최적의 매개변수(Weights, Biases)를 찾아간다.
학습 (Training)
AI에서 "학습"은 주어진 데이터로부터 패턴과 규칙을 찾아내어, 모델의 매개변수(가중치, 편향 등)를 최적화하는 과정이다. 이 과정에서 모델은 입력 데이터와 정답(레이블)을 비교하여 오류(오차)를 계산하고, 이를 최소화하기 위해 역전파(Backpropagation)와 최적화 알고리즘을 사용해 매개변수를 반복적으로 조정한다.
5. 머신러닝 프로세스
1. 문제 정의
문제 정의 단계는 머신러닝 프로젝트의 방향을 결정짓는 핵심 과정이다. 이 단계에서는 해결하고자 하는 문제의 유형을 분류, 회귀, 군집화 등으로 구체화하고, 예측할 대상(타깃)과 입력할 변수(피처)를 정의한다. 또한, 비즈니스 목적에 따라 성과 지표(KPI)를 설정하고, 데이터의 확보 가능성과 도메인 특성, 제약사항 등을 함께 고려하여 전체적인 목표와 전략을 설계한다.
2. 데이터 전처리
데이터 전처리는 수집된 원시 데이터를 머신러닝 모델이 학습할 수 있도록 정제하고 가공하는 과정이다. 이 단계에서는 결측치 처리, 이상치 제거, 범주형 데이터 인코딩, 정규화 또는 표준화, 불필요한 피처 제거 등 다양한 작업이 이루어진다. 데이터의 품질이 모델의 성능에 큰 영향을 미치기 때문에, 이 과정은 전체 머신러닝 프로세스에서 매우 중요한 단계이다.
3. 학습
학습 단계에서는 전처리된 데이터를 기반으로 머신러닝 알고리즘을 적용하여 모델을 훈련시킨다. 이 과정에서는 지도학습(예: 회귀, 분류) 또는 비지도학습(예: 군집화) 등의 방식으로 알고리즘을 선택하고, 하이퍼파라미터를 조정하면서 모델이 주어진 데이터를 잘 학습하도록 만든다. 반복적인 학습을 통해 모델은 입력과 출력 사이의 패턴을 파악하며, 이를 통해 새로운 데이터를 예측하거나 분류할 수 있는 능력을 갖추게 된다.
4. 모델 평가
모델 평가 단계에서는 학습된 모델의 성능을 검증용 데이터를 통해 측정하고, 실질적인 효과를 확인한다. 이때 정확도, 정밀도, 재현율, F1 점수, RMSE 등 문제 유형에 맞는 평가 지표를 사용하며, 과적합 여부도 확인한다. 평가 결과를 통해 모델이 실제 환경에서 얼마나 잘 작동할 수 있을지를 판단하며, 필요에 따라 다시 데이터 전처리나 학습 과정을 반복할 수 있다.
6. 머신러닝을 공부하기 위해 필요한 것들
1. 기초 수학
- 선형대수: 벡터, 행렬
- 통계·확률: 평균, 분산, 확률분포
- 미분: 경사 하강법 이해에 필요
2. 프로그래밍 (Python)
- 필수 라이브러리: NumPy, Pandas, Matplotlib, Scikit-learn
- 실습 환경: Jupyter Notebook 또는 Google Colab 사용
3. 데이터 전처리 능력
- 결측치/이상치 처리
- 범주형 인코딩, 정규화
- 시각화를 통한 데이터 이해
4. 머신러닝 알고리즘 이해
- 지도학습: 선형회귀, 로지스틱 회귀, 결정트리, 랜덤포레스트
- 비지도학습: K-means, PCA 등
5. 실습 경험
- Kaggle/Dacon 대회 참가
- 오픈데이터 프로젝트 수행
- 모델 성능 평가 및 개선 연습
6. 도메인 지식
데이터를 해석하고 모델을 잘 적용하려면 산업별 배경지식이 중요하다. 예를 들어, 의료 AI는 의학 지식, 금융 모델은 회계·경제 지식이 필요하다.
7. 윤리와 법률
개인정보 보호법, AI 윤리, 알고리즘 편향 등을 고려해야 한다. 예를 들어, 얼굴 인식 시스템은 사생활 침해 이슈가 발생할 수 있다.
8. AI 프로젝트 실무 경험
데이터 수집부터 배포까지의 전체 흐름을 이해해야 한다. 협업, 버전관리(Git), 모델 배포(Flask, FastAPI 등) 등 실전 역량이 필요하다.
9. 클라우드 & 환경 세팅
Google Colab, AWS, GCP 등에서 실습 및 배포 경험이 도움이 된다. 대규모 학습이나 GPU 자원이 필요할 때 필수이다.
7. 사이킷런 (Scikit-learn)
사이킷런의 정의
사이킷런(scikit-learn)은 파이썬(Python)으로 작성된 오픈소스 머신러닝 라이브러리로, 데이터 분석과 예측 모델 구축을 위해 널리 사용된다. 간단하고 일관된 인터페이스를 제공하며, 지도 학습(Supervised Learning)과 비지도 학습(Unsupervised Learning) 알고리즘을 모두 지원한다. 주로 분류(Classification), 회귀(Regression), 클러스터링(Clustering), 차원 축소(Dimensionality Reduction), 모델 선택(Model Selection), 전처리(Preprocessing)와 같은 다양한 작업을 수행할 수 있다.
정말 간단하게 설명하자면, 머신러닝을 쉽게 할 수 있게 해주는 파이썬 도구 상자라고 보면 된다. 복잡한 수학을 몰라도 몇 줄의 코드로 머신러닝 모델을 만들고 사용할 수 있다.
설치
pip install scikit-learn
주요 기능
- 분류: 로지스틱 회귀, SVM, 랜덤 포레스트 등
- 회귀: 선형 회귀, 릿지, 라쏘 등
- 클러스터링: K-means, DBSCAN 등
- 차원 축소: PCA, t-SNE 등
- 전처리: 정규화, 인코딩 등
- 모델 선택: 교차 검증, 그리드 서치 등
8. Iris 데이터셋 실습
Iris 데이터셋 소개
아이리스(Iris) 데이터셋은 머신러닝과 통계학에서 가장 널리 사용되는 대표적인 샘플 데이터셋이다. 이 데이터셋은 붓꽃(Iris)의 세 가지 품종(Setosa, Versicolor, Virginica)에 대한 정보를 포함하고 있다. 각 품종별로 꽃받침(Sepal)의 길이와 너비, 꽃잎(Petal)의 길이와 너비로 이루어진 4개의 특성(Features)이 제공되며, 총 150개의 샘플 데이터가 있다.
데이터셋의 정의
데이터셋(Dataset)은 머신러닝과 데이터 과학에서 모델을 학습, 검증, 테스트하기 위해 사용되는 데이터의 집합이다. 데이터셋은 일반적으로 입력 데이터(Features)와 정답 레이블(Labels)로 구성되며, 학습용 데이터셋(Training Dataset), 검증용 데이터셋(Validation Dataset), 테스트용 데이터셋(Test Dataset)으로 나누어 사용한다.
데이터 로드 및 확인
from sklearn.datasets import load_iris
import pandas as pd
# Iris 데이터셋 로드
iris = load_iris()
iris
# 데이터 설명 확인
print(iris['DESCR'])
# 특성 데이터
data = iris['data']
feature_names = iris['feature_names']
# DataFrame으로 변환
df_iris = pd.DataFrame(data, columns=feature_names)
df_iris
# 타겟 데이터 (품종)
target = iris['target']
df_iris['target'] = target
df_iris
특성 설명:
sepal length (cm): 꽃받침의 길이sepal width (cm): 꽃받침의 너비petal length (cm): 꽃잎의 길이petal width (cm): 꽃잎의 너비
데이터 분할
from sklearn.model_selection import train_test_split
# 학습 데이터와 테스트 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(
df_iris.drop('target', axis=1), # X: 입력 데이터 (특성)
df_iris['target'], # y: 출력 데이터 (정답)
test_size=0.2, # 테스트 데이터 비율 (20%)
random_state=2025 # 재현성을 위한 시드값
)
print(f'X_train shape: {X_train.shape}')
print(f'X_test shape: {X_test.shape}')
print(f'y_train shape: {y_train.shape}')
print(f'y_test shape: {y_test.shape}')
데이터 분할 설명:
- X_train: 공부할 데이터 (입력 특성)
- X_test: 테스트할 데이터 (입력 특성)
- y_train: 공부할 데이터의 답 (정답 레이블)
- y_test: 테스트할 데이터의 답 (정답 레이블)
모델 학습 및 예측
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# SVC 모델 생성 및 학습
svc = SVC()
svc.fit(X_train, y_train) # 모델 학습
# 예측
y_pred = svc.predict(X_test) # 테스트 데이터로 예측
print(f'예측 결과: {y_pred}')
# 정확도 평가
accuracy = accuracy_score(y_test, y_pred)
print(f'정답률: {accuracy:.4f}')
SVC (Support Vector Classifier)
SVC(Support Vector Classifier)는 서포트 벡터 머신(SVM, Support Vector Machine)을 사용한 분류(Classification) 알고리즘이다. 사이킷런(sklearn.svm.SVC)에서 제공되며, 이진 분류(Binary Classification)와 다중 클래스 분류(Multi-Class Classification) 문제를 해결할 수 있다.
서포트 벡터 머신(SVM)의 원리:
- 두 개 이상의 클래스를 구분하는 지도 학습 알고리즘
- 두 클래스 간의 경계를 가장 잘 구분하는 최적의 초평면(Hyperplane)을 찾는 것이 목표
- 초평면: 3차원 이상의 공간에서 값을 나누기 위해 사용하는 평면
Accuracy (정확도)
정확도(Accuracy)는 머신러닝과 통계학에서 모델의 성능을 평가하는 가장 기본적인 지표 중 하나로, 전체 예측 중에서 얼마나 많은 예측이 실제 정답과 일치했는지를 나타내는 비율이다.
계산 공식:
Accuracy = (올바르게 예측한 샘플 수) / (전체 샘플 수)
새로운 데이터 예측
# 새로운 데이터로 예측
new_data = pd.DataFrame([[6.3, 3.0, 5.6, 2.0]],
columns=['sepal length (cm)', 'sepal width (cm)',
'petal length (cm)', 'petal width (cm)'])
y_pred = svc.predict(new_data)
print(f'예측 품종: {y_pred[0]}')
# 0: Setosa, 1: Versicolor, 2: Virginica
9. 주택 임대료 예측 실습
데이터셋 소개
House Rent Prediction Dataset은 주택 임대료를 예측하기 위한 목적으로 사용되는 데이터셋이다. 이 데이터셋은 주로 머신러닝 및 데이터 분석 프로젝트에서 사용되며, 주택의 다양한 특성과 위치 정보를 기반으로 임대료를 예측하는 모델을 학습하는 데 활용된다.
데이터셋 컬럼 설명
- BHK: 주택에 포함된 침실, 거실, 주방의 총 개수
- Rent: 주택(아파트/플랫)의 월 임대료
- Size: 주택(아파트/플랫)의 면적을 평방피트(Square Feet)로 나타냄
- Floor: 주택이 위치한 층수와 건물의 총 층수 (예: 2층 중 1층, 5층 중 3층 등)
- Area Type: 주택의 면적이 어떤 방식으로 계산되었는지 (예: 전체 면적, 실사용 면적, 건축 면적 등)
- Area Locality: 주택(아파트/플랫)이 위치한 구체적인 지역이나 동네 정보
- City: 주택(아파트/플랫)이 위치한 도시
- Furnishing Status: 주택이 가구가 완비되었는지(Furnished), 부분적으로 갖추어졌는지(Semi-Furnished), 아니면 비어 있는지(Unfurnished)
- Tenant Preferred: 집주인 또는 중개인이 선호하는 임차인 유형 (예: 가족, 싱글, 직장인 등)
- Bathroom: 주택에 있는 욕실의 개수
- Point of Contact: 주택(아파트/플랫)에 대한 추가 정보를 얻기 위해 연락해야 할 담당자나 중개인의 정보
데이터 로드 및 탐색
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 데이터 로드
rent_df = pd.read_csv('House_Rent_Dataset.csv')
rent_df
# 데이터 정보 확인
rent_df.info()
rent_df.describe()
# 결측치 확인
rent_df.isna().sum()
데이터 시각화
# 분포 확인
sns.displot(rent_df['BHK'])
sns.displot(rent_df['Rent'])
sns.displot(rent_df['Size'])
# 박스플롯으로 이상치 확인
sns.boxplot(rent_df['Rent'])
sns.boxplot(rent_df['Size'])
sns.boxplot(rent_df['BHK'])
Boxplot 설명:
Boxplot은 데이터의 중앙값, 사분위수, 이상치 등을 시각적으로 표현하는 통계 그래프이다.
- 중앙값 (Median, Q2): 데이터를 크기 순으로 정렬했을 때 중간에 위치한 값
- Q1 (제1사분위수, 25%): 하위 25%에 해당하는 값
- Q3 (제3사분위수, 75%): 상위 25%에 해당하는 값
- IQR (Interquartile Range): Q3 - Q1, 데이터의 중간 50% 범위
- 이상치: Q1 - 1.5 × IQR 이하 또는 Q3 + 1.5 × IQR 이상의 값
데이터 전처리
# 불필요한 컬럼 제거
rent_df.drop(['Floor', 'Area Locality', 'Posted On'], axis=1, inplace=True)
# 범주형 변수를 더미 변수로 변환
rent_df = pd.get_dummies(rent_df, columns=['Area Type', 'City',
'Furnishing Status',
'Tenant Preferred',
'Point of Contact'])
rent_df.head()
# 입력 데이터와 출력 데이터 분리
X = rent_df.drop('Rent', axis=1)
y = rent_df['Rent']
데이터 분할
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,
random_state=2026
)
print(f'X_train shape: {X_train.shape}')
print(f'X_test shape: {X_test.shape}')
선형 회귀 모델
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, root_mean_squared_error
# 선형 회귀 모델 학습
lr = LinearRegression()
lr.fit(X_train, y_train)
# 예측
pred = lr.predict(X_test)
# 평가
mse = mean_squared_error(y_test, pred)
rmse = root_mean_squared_error(y_test, pred)
print(f'MSE: {mse:.2f}')
print(f'RMSE: {rmse:.2f}')
로그 변환으로 성능 개선
주택 임대료 데이터셋은 한 쪽으로 치우친 분포를 가지고 있다. 값이 큰 임대료(Outliers)가 평균과 모델 예측 결과에 큰 영향을 미치기 때문에 로그 변환을 통해 값의 범위를 축소하고, 분포를 정규 분포(Normal Distribution)에 가깝게 만든다.
정규 분포 (Normal Distribution):
정규 분포는 데이터가 평균을 중심으로 좌우 대칭을 이루며 종 모양(Bell Curve)으로 퍼져 있는 통계적 분포이다. 대부분의 값은 평균 근처에 몰려 있고, 평균에서 멀어질수록 값의 빈도가 급격히 감소한다.
# 로그 변환 적용
y_train_log = np.log1p(y_train) # log(1 + x)
y_test_log = np.log1p(y_test)
# 모델 재학습
lr = LinearRegression()
lr.fit(X_train, y_train_log)
# 예측 및 역변환
y_pred_log = lr.predict(X_test)
y_pred = np.expm1(y_pred_log) # exp(x) - 1
y_test_original = np.expm1(y_test_log)
# 평가
rmse = root_mean_squared_error(y_test_original, y_pred)
print(f'RMSE (로그 변환 후): {rmse:.2f}')
로그 변환의 효과:
- 이상치의 영향을 줄여줌
- 분포를 정규 분포에 가깝게 만듦
- RMSE 감소
앙상블 모델 적용
앙상블 모델(Ensemble Model)은 여러 개의 머신러닝 모델을 조합하여 하나의 강력한 예측 모델을 만드는 방법이다. 각 개별 모델(약한 학습기, Weak Learner)이 가진 장점을 결합하고 약점을 보완함으로써 예측 정확도와 안정성을 향상시킨다.
랜덤 포레스트 (Random Forest)
랜덤 포레스트(Random Forest)는 다수의 결정 트리(Decision Tree)를 결합해 예측을 수행하는 앙상블 학습 방법이다. 각각의 트리는 무작위로 선택된 데이터 샘플과 특성(feature)을 사용해 학습되며, 분류 문제에서는 다수결 투표, 회귀 문제에서는 평균을 통해 최종 예측값을 도출한다.
XGBoost
XGBoost (eXtreme Gradient Boosting)는 그레디언트 부스팅(Gradient Boosting) 알고리즘을 기반으로 한 강력한 머신러닝 앙상블 모델이다. 여러 개의 약한 학습기(Weak Learner), 주로 결정 트리(Decision Tree)를 순차적으로 학습시키며, 이전 트리의 오차를 보정해 예측 성능을 점진적으로 개선한다.
from sklearn.ensemble import RandomForestRegressor
from xgboost import XGBRegressor
# 여러 모델 비교
models = {
'Linear Regression': LinearRegression(),
'Random Forest': RandomForestRegressor(n_estimators=100, random_state=2026),
'XGBoost': XGBRegressor(n_estimators=100, random_state=2026)
}
results = {}
for model_name, model in models.items():
# 로그 변환된 데이터로 학습
model.fit(X_train, y_train_log)
y_pred_log = model.predict(X_test)
# 원래 스케일로 변환
y_pred = np.expm1(y_pred_log)
y_test_original = np.expm1(y_test_log)
# 평가
rmse = np.sqrt(mean_squared_error(y_test_original, y_pred))
results[model_name] = rmse
print(f'{model_name} RMSE: {rmse:.2f}')
# 최고 성능 모델 찾기
best_model = min(results, key=results.get)
print(f'\nBest Model: {best_model} RMSE: {results[best_model]:.2f}')
하이퍼파라미터:
모델에서 받는 파라미터는 하이퍼파라미터(Hyperparameter)라고 한다. 이는 모델 학습 전에 설정해야 하는 값으로, 모델의 성능에 큰 영향을 미친다.
실습 요약
Iris 데이터셋 분류 문제
- 데이터 로드: 사이킷런에서 제공하는 Iris 데이터셋 사용
- 데이터 분할: train_test_split으로 학습/테스트 데이터 분리
- 모델 학습: SVC를 사용한 분류 모델 학습
- 평가: accuracy_score로 정확도 측정
주택 임대료 예측 회귀 문제
- 데이터 탐색: 시각화를 통한 데이터 분포 확인
- 전처리: 범주형 변수 인코딩, 불필요한 컬럼 제거
- 로그 변환: 이상치 영향을 줄이기 위한 데이터 변환
- 앙상블 모델: 랜덤 포레스트, XGBoost 등 다양한 모델 비교
결론
머신러닝은 현대 AI의 핵심 기술이며, 사이킷런을 통해 쉽게 시작할 수 있다.
- 분류 문제가 있다면 → SVC, 랜덤 포레스트
- 회귀 문제가 있다면 → 선형 회귀, XGBoost
- 데이터 전처리가 필요하다면 → 로그 변환, 인코딩
- 모델 성능을 개선하려면 → 앙상블 모델, 하이퍼파라미터 튜닝
기초 개념을 이해하고 실습을 통해 경험을 쌓으면 더욱 복잡한 문제도 해결할 수 있다.
'AI·머신러닝 > 딥러닝·비전' 카테고리의 다른 글
| Multi-class Weather 이미지 분류 실습 - ImageFolder, DataLoader, 완전연결 신경망 (0) | 2025.12.22 |
|---|---|
| 논리 회귀부터 손글씨 숫자·퍼셉트론까지 - 분류, DataLoader, 데이터 증강, MLP 실습 (0) | 2025.12.20 |
| 파이토치로 시작하는 딥러닝 - 텐서, 선형 회귀, 논리 회귀 실습 (0) | 2025.12.20 |
| 슈퍼스토어 마케팅 캠페인과 K-Means 클러스터링 - 고객 세그먼트 실습 (0) | 2025.12.17 |
| 서울 자전거 · 호텔 예약 수요 예측 실습 - 결정 트리, 랜덤 포레스트, 로지스틱 회귀, 교차 검증 (0) | 2025.12.16 |