데이터 분석/머신러닝

Scikit-learn으로 머신러닝 모델 만들기: 분류 예측

Family in August 2023. 3. 30. 21:51
반응형

Scikit-learn은 머신러닝의 다양한 분야에서 널리 사용되는 라이브러리입니다.

Scikit-learn을 사용하면 지도학습(Supervised Learning)과 비지도학습(Unsupervised Learning)을 비롯하여, 다양한 머신러닝 모델을 쉽게 구현하고 테스트할 수 있습니다.

이번 포스팅에서는 Scikit-learn을 사용하여 분류(Classification)와 회귀 예측(Regression)을 수행하는 방법에 대해 다룰 예정입니다.

 

분류(Classification)

분류는 머신러닝에서 가장 기본적인 문제 중 하나입니다. 분류 문제는 미리 정의된 카테고리(또는 클래스) 중 하나에 데이터 포인트를 할당하는 문제입니다.

예를 들어, 이메일이 스팸 메일인지 아닌지를 판단하는 문제나, 고객이 제품을 구매할지 말지 예측하는 문제 등이 이에 해당됩니다.

 

분류 예제

아래는 Scikit-learn의 load_iris 데이터셋을 사용한 붓꽃(Iris) 분류 문제 예제입니다. 이 문제에서는 붓꽃의 꽃잎과 꽃받침의 크기를 기반으로 붓꽃의 종류를 분류합니다.

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 데이터 로드
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.3, random_state=42)

# 모델 학습
model = DecisionTreeClassifier()
model.fit(X_train, y_train)

# 모델 예측
y_pred = model.predict(X_test)

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

 

분류 알고리즘

Scikit-learn에서 제공하는 분류 알고리즘으로는 Decision Tree, Random Forest, K-Nearest Neighbor(KNN), Support Vector Machine(SVM), Neural Network 등이 있습니다.

이 중에서 Decision Tree 알고리즘을 사용한 분류 모델을 위 예제에서 구현했습니다.

 

분류 알고리즘은 지도 학습(Supervised Learning) 방법 중 하나로, 입력 데이터와 출력 데이터 사이의 관계를 학습하여 새로운 입력 데이터에 대한 출력 값을 예측하는 모델을 만드는 방법입니다.

Scikit-learn은 분류 알고리즘을 구현한 다양한 모듈과 함수를 제공합니다.

이번 포스팅에서는 Scikit-learn의 분류 알고리즘 중에서 대표적인 몇 가지를 살펴보고, 간단한 샘플 코드와 함께 설명하겠습니다.

 

K-최근접 이웃 알고리즘 (K-Nearest Neighbors, KNN)

KNN 알고리즘은 가장 간단하고 직관적인 분류 알고리즘 중 하나입니다.

KNN은 새로운 데이터가 들어왔을 때 가장 가까운 거리에 있는 K개의 데이터를 찾아 이들의 클래스 중 가장 많은 것으로 새로운 데이터의 클래스를 결정하는 방법입니다.

이때 거리 측정 방법으로는 유클리드 거리(Euclidean Distance)가 일반적으로 사용됩니다.

from sklearn.neighbors import KNeighborsClassifier

# KNN 모델 객체 생성
knn = KNeighborsClassifier(n_neighbors=5)

# 모델 학습
knn.fit(X_train, y_train)

# 모델 예측
y_pred = knn.predict(X_test)

 

의사결정나무 알고리즘 (Decision Tree)

의사결정나무는 분류 및 회귀 분석에 사용되는 모델로, 스무고개 게임과 비슷한 방식으로 동작합니다.

의사결정나무는 주어진 데이터를 가장 잘 구분할 수 있는 변수를 찾아 이를 기준으로 하위 분기를 생성하며, 이 과정을 반복하여 최종적으로 데이터를 분류합니다.

from sklearn.tree import DecisionTreeClassifier

# 의사결정나무 모델 객체 생성
dt = DecisionTreeClassifier()

# 모델 학습
dt.fit(X_train, y_train)

# 모델 예측
y_pred = dt.predict(X_test)

 

로지스틱 회귀 알고리즘

로지스틱 회귀는 이진 분류(binary classification) 모델로, 주어진 입력 변수에 대해 이진 결과를 출력하는 모델입니다.

먼저 필요한 라이브러리와 데이터셋을 불러옵니다.

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=42)

 

데이터셋은 iris 데이터셋을 사용합니다. 데이터셋을 로드하고, train_test_split 함수를 사용하여 데이터를 train set과 test set으로 나눕니다.

이제 로지스틱 회귀 모델을 학습시켜보겠습니다.

logreg = LogisticRegression()
logreg.fit(X_train, y_train)

 

로지스틱 회귀 모델은 선형 회귀 모델과 비슷하게 동작하지만, 예측 결과를 0과 1 사이의 값으로 제한합니다. 따라서 이진 분류 문제에 적합합니다.

학습된 모델을 사용하여 예측을 수행해보겠습니다.

y_pred = logreg.predict(X_test)

 

마지막으로, 예측 결과를 평가해보겠습니다.

from sklearn.metrics import accuracy_score

accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")

 

Accuracy를 출력해보면, 이 모델의 정확도가 97% 정도라는 것을 알 수 있습니다.

이처럼 scikit-learn 모듈을 사용하여 간단하게 머신 러닝 모델을 구현할 수 있습니다.

이외에도 다양한 알고리즘과 기능들이 제공되므로, 적절한 알고리즘과 하이퍼파라미터를 선택하여 모델을 구현하면 됩니다.

 

랜덤 포레스트(Random Forest)

의사결정나무(Decision Tree) 모델을 여러 개 결합한 앙상블(Ensemble) 모델로, 대표적인 분류 모델 중 하나입니다.

Scikit-learn에서 제공하는 RandomForestClassifier를 사용하여 랜덤 포레스트 모델을 구현할 수 있습니다.

이전의 분류 모델과 마찬가지로, 먼저 데이터를 로드하고 전처리합니다.

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
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=42)

 

다음으로, RandomForestClassifier를 정의하고 모델을 학습합니다.

# 랜덤 포레스트 모델 정의
rfc = RandomForestClassifier(n_estimators=100, random_state=42)

# 모델 학습
rfc.fit(X_train, y_train)

 

RandomForestClassifier의 가장 중요한 하이퍼파라미터는 n_estimators로, 앙상블에 사용할 의사결정나무의 개수를 지정합니다.

random_state는 의사결정나무에서와 마찬가지로 모델의 랜덤 시드를 지정하는 파라미터입니다.

모델을 학습한 후, 예측을 수행하고 정확도를 계산할 수 있습니다.

# 모델 예측
y_pred = rfc.predict(X_test)

# 정확도 계산
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

 

랜덤 포레스트 모델은 다양한 하이퍼파라미터를 조정하여 성능을 개선할 수 있습니다.

대표적으로, max_depth는 각 의사결정나무의 최대 깊이를 지정하는 파라미터이며, max_features는 각 노드에서 분할에 사용될 특징 변수의 개수를 지정하는 파라미터입니다.

이 외에도 다양한 하이퍼파라미터를 조정할 수 있습니다.

반응형