본문 바로가기
프로그래밍/Python

[Python] 14. Python의 "머신러닝"

by iwbap 2024. 6. 18.
728x90

Python 학습: 머신러닝

Python은 강력한 머신러닝 라이브러리를 제공하여 데이터 분석과 모델링을 쉽게 수행할 수 있게 합니다. 이번 글에서는 Scikit-Learn을 사용한 기본 머신러닝 알고리즘과 모델 훈련 및 평가, TensorFlow/Keras를 사용한 딥러닝 기초에 대해 알아보겠습니다.


1. Scikit-Learn: 기본 머신러닝 알고리즘, 모델 훈련과 평가

Scikit-Learn은 Python에서 널리 사용되는 머신러닝 라이브러리로, 다양한 알고리즘과 도구를 제공합니다. Scikit-Learn을 사용하면 데이터 준비, 모델 선택, 훈련, 평가를 쉽게 할 수 있습니다.

 

Scikit-Learn 설치 : pip install scikit-learn

 

기본 머신러닝 알고리즘 예제 : 아래 예제에서는 Scikit-Learn을 사용하여 간단한 분류 작업을 수행합니다. Iris 데이터셋을 사용하여 K-최근접 이웃(K-Nearest Neighbors, KNN) 알고리즘을 적용합니다.

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# 데이터 로드
iris = load_iris()
X, y = iris.data, iris.target

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

# 모델 선택 및 훈련
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# 예측
y_pred = knn.predict(X_test)

# 모델 평가
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy * 100:.2f}%")
 

위의 예제에서 Iris 데이터셋을 로드하고, 데이터를 훈련 세트와 테스트 세트로 분할합니다. KNN 알고리즘을 사용하여 모델을 훈련시키고, 테스트 세트에 대한 예측을 수행하여 정확도를 평가합니다.

 

 

기타 Scikit-Learn 기능 : Scikit-Learn은 다양한 머신러닝 알고리즘 외에도 데이터 전처리, 모델 선택, 하이퍼파라미터 튜닝 등의 기능을 제공합니다.

from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import GridSearchCV

# 데이터 표준화
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 하이퍼파라미터 튜닝
param_grid = {'n_neighbors': [3, 5, 7, 9]}
grid_search = GridSearchCV(KNeighborsClassifier(), param_grid, cv=5)
grid_search.fit(X_train_scaled, y_train)

# 최적의 모델 선택 및 평가
best_model = grid_search.best_estimator_
y_pred_best = best_model.predict(X_test_scaled)
accuracy_best = accuracy_score(y_test, y_pred_best)
print(f"Best Accuracy: {accuracy_best * 100:.2f}%")
 

위의 예제에서 데이터 표준화를 수행하고, 그리드 서치를 통해 KNN 알고리즘의 최적 하이퍼파라미터를 찾습니다. 최적 모델을 선택하여 정확도를 평가합니다.


2. TensorFlow/Keras: 딥러닝 기초

TensorFlow와 Keras는 딥러닝 모델을 쉽게 구축하고 훈련할 수 있는 라이브러리입니다. Keras는 TensorFlow 위에서 동작하는 고수준 API로, 직관적이고 사용하기 쉽습니다.

 

TensorFlow/Keras 설치 : pip install tensorflow

 

딥러닝 기초 예제 : 아래 예제에서는 TensorFlow/Keras를 사용하여 간단한 신경망 모델을 구축하고, MNIST 데이터셋을 사용하여 숫자 이미지를 분류합니다.

import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.utils import to_categorical

# 데이터 로드
(X_train, y_train), (X_test, y_test) = mnist.load_data()

# 데이터 전처리
X_train = X_train / 255.0
X_test = X_test / 255.0
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

# 모델 구성
model = Sequential([
    Flatten(input_shape=(28, 28)),
    Dense(128, activation='relu'),
    Dense(10, activation='softmax')
])

# 모델 컴파일
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

# 모델 훈련
model.fit(X_train, y_train, epochs=5, batch_size=32, validation_split=0.2)

# 모델 평가
test_loss, test_acc = model.evaluate(X_test, y_test)
print(f"Test Accuracy: {test_acc * 100:.2f}%")
 

위의 예제에서 MNIST 데이터셋을 로드하고, 이미지를 0과 1 사이의 값으로 정규화합니다. Sequential 모델을 구성하여 입력층, 은닉층, 출력층을 정의하고, 모델을 컴파일한 후 훈련합니다. 마지막으로 테스트 데이터를 사용하여 모델의 성능을 평가합니다.

 

 

더 복잡한 딥러닝 모델 : TensorFlow/Keras를 사용하면 더 복잡한 딥러닝 모델도 쉽게 구축할 수 있습니다. 예를 들어, 합성곱 신경망(CNN)을 사용하여 이미지 분류 성능을 높일 수 있습니다.

from tensorflow.keras.layers import Conv2D, MaxPooling2D

# 데이터 로드 및 전처리
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(-1, 28, 28, 1) / 255.0
X_test = X_test.reshape(-1, 28, 28, 1) / 255.0
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

# CNN 모델 구성
cnn_model = Sequential([
    Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
    MaxPooling2D((2, 2)),
    Conv2D(64, (3, 3), activation='relu'),
    MaxPooling2D((2, 2)),
    Flatten(),
    Dense(128, activation='relu'),
    Dense(10, activation='softmax')
])

# 모델 컴파일
cnn_model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

# 모델 훈련
cnn_model.fit(X_train, y_train, epochs=5, batch_size=32, validation_split=0.2)

# 모델 평가
test_loss, test_acc = cnn_model.evaluate(X_test, y_test)
print(f"Test Accuracy: {test_acc * 100:.2f}%")
 

위의 예제에서 Conv2D와 MaxPooling2D 레이어를 사용하여 CNN을 구성하고, MNIST 데이터셋에 대해 훈련합니다. CNN 모델은 일반적인 신경망보다 이미지 분류 성능이 뛰어납니다.


이 글에서는 Python을 사용한 머신러닝과 딥러닝에 대해 알아보았습니다. Scikit-Learn을 사용한 기본 머신러닝 알고리즘과 모델 훈련 및 평가, TensorFlow/Keras를 사용한 딥러닝 기초를 이해하고 활용하면 데이터 분석과 모델링을 더 효과적으로 수행할 수 있습니다. Happy Coding!

728x90