KNN, 서포트 벡터 머신, 의사결정 트리

사전지식 : Python, Iris Dataset, Iris Dataset 블로그 글 링크

머신러닝 알고리즘은 데이터에서 패턴을 찾아내어 예측을 하거나 분류하는 등의 문제를 해결합니다. 지도학습은 레이블이 있는 데이터 셋을 통해 알고리즘으로 데이터를 구별하는 판별식을 만든 후 새로운 데이터가 어떠한 결과를 출력하는지 알아내는 학습 모델 입니다. 즉, 지도학습은 과거의 데이터를 학습해서 결과를 예측하는 방법 입니다. 그럼 ‘지도학습’ 에 해당되는 세 가지 머신러닝 알고리즘 – KNN(K-Nearest Neighbors), 서포트 벡터 머신(Support Vector Machine), 의사결정 트리(Decision Tree) 에 대하여 알아볼까요?

1. KNN(K-Nearest Neighbors)

KNN은 ‘가장 가까운 이웃들이 나를 가장 잘 정의한다’는 간단한 아이디어에서 시작합니다. 새로운 데이터가 들어오면, KNN 알고리즘은 기존 데이터 중에서 가장 가까운 ‘K’개의 데이터를 찾아, 그들의 레이블을 참조하여 새 데이터의 레이블을 예측합니다. 이는 쇼핑몰에서 ‘이 상품을 선택한 다른 고객들이 선택한 상품’을 추천하는 시스템에 비유할 수 있습니다. KNN의 원리는 데이터 포인트의 클래스를 그 주변 K개의 가장 가까운 이웃의 클래스로 예측하는 것입니다.

출처: Towards Data Science

from sklearn.neighbors import KNeighborsClassifier
from sklearn import datasets
from sklearn.model_selection import train_test_split

# 데이터 불러오기
iris = datasets.load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)

# KNN 모델 학습
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# 모델 평가
print("Test Accuracy: ", knn.score(X_test, y_test))

2. 서포트 벡터 머신(Support Vector Machine)

서포트 벡터 머신(SVM)은 머신러닝의 가장 강력한 알고리즘 중 하나로 데이터를 분류하거나 회귀 분석하기 위한 지도 학습 모델입니다. 이는 데이터를 고차원 공간에 매핑하고, 이 공간에서 결정 경계(decision boundary)를 정의합니다. 이 결정 경계는 클래스 간의 마진을 최대화하는 방향으로 설정됩니다. 이 ‘결정 경계’는 서로 다른 분류를 가장 잘 구분하도록 설계되어 있습니다. 쉬운 예로써 공항 검색에서 찾아낸 위험한 물건과 안전한 물건을 구분하는 과정에 비유할 수 있습니다.

출처: Towards Data Science
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn import svm
from sklearn.datasets import load_iris

iris = load_iris()

X = iris.data
y = iris.target

# 데이터를 학습 세트와 테스트 세트로 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1234)

# 데이터 스케일링
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# SVM 모델 학습
svm_model = svm.SVC(kernel='linear')
svm_model.fit(X_train, y_train)

# 예측 및 정확도 확인
print('Train accuracy:', svm_model.score(X_train, y_train))
print('Test accuracy:', svm_model.score(X_test, y_test))

3. 의사결정 트리(Decision Tree)

의사결정 트리(Decision Tree)는 머신러닝에서 가장 직관적인 방법 중 하나로 분류와 회귀 문제를 해결하는데 사용되는 모델 입니다. 각각의 ‘노드’에서 데이터의 특성에 따라 분기를 만들고, 최종적으로 ‘리프 노드’에서 결정을 내리는 구조 즉, 데이터의 특징을 기반으로 결정을 내리는데, 이 결정 과정을 나무 구조로 표현합니다. 일상생활에서 의사결정을 내리는 과정을 나무 구조로 표현한 것에 비유할 수 있으며 뿌리에서 시작하여 조건에 따라 갈라져 나가며 최종적으로 잎 노드에서 예측값을 결정합니다.

출처: Towards Data Science
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris

iris = load_iris()

X = iris.data
y = iris.target

# 데이터를 학습 세트와 테스트 세트로 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1234)

# 의사결정트리 모델 학습
dt = DecisionTreeClassifier(random_state=1234)
dt.fit(X_train, y_train)

# 예측 및 정확도 확인
print('Train accuracy:', dt.score(X_train, y_train))
print('Test accuracy:', dt.score(X_test, y_test))

사실, 머신러닝은 더 깊게 들어가면 어려운 책 몇권 이상으로도 설명이 필요한 영역이지만 세 가지 모델 모두가 머신러닝을 이해하기 위한 기초적인 모델이기 때문에 간단하게 개념적으로 블로그에 올리게 되었습니다. 이론적인 배경 지식도 중요하지만, 각각의 알고리즘을 실제 데이터셋에 적용해보면서 실제로 코딩하면서 느끼는 경험을 하면 머신러닝에 좀더 쉽게 다가갈 수 있지 않을까요?

Leave a Comment