머신러닝과 딥러닝 라이브러리
해당 챕터는 실습하는 챕터가 아닙니다. 이 챕터에서는 머신러닝과 딥러닝을 위한 대표적인 라이브러리인 사이킷런(scikit-learn)과 텐서플로우(TensorFlow)에 대해 간단히 소개하고, 각 라이브러리를 사용하면 어떤 작업을 수행할 수 있는지 살펴보겠습니다.
1. 사이킷런(scikit-learn)
사이킷런은 NumPy와 pandas로 준비한 데이터를 바탕으로 머신러닝 모델을 쉽게 구현하고 평가할 수 있게 해줍니다. 데이터 과학과 머신러닝을 시작하는 데 있어 필수적인 도구로, 다양한 분야에서 활용되고 있습니다.
1.1 머신러닝이란?
머신러닝은 컴퓨터가 데이터로부터 학습하여 특정 작업을 수행하는 능력을 향상시키는 인공지능의 한 분야입니다. 예를 들어, 이메일이 스팸인지 아닌지 자동으로 분류하거나, 주택 가격을 예측하는 등의 작업을 수행할 수 있습니다.
학습이 무엇인지, 어떻게 학습하는지, 데이터와 모델의 관계는 무엇인지, 머신러닝은 무엇인지, 딥러닝은 무엇인지 등의 과정은 아래 강의를 참고해주세요. 30분 요약강좌로 쉽게 구성해두었습니다.
초급자를 위한 딥러닝1.2 사이킷런(scikit-learn)이란?
사이킷런은 파이썬에서 머신러닝을 쉽게 구현할 수 있게 해주는 오픈소스 라이브러리입니다. 다양한 머신러닝 알고리즘과 데이터 처리 도구를 제공하여, 데이터 분석과 예측 모델 생성을 간편하게 만들어줍니다.
1.3 사이킷런으로 할 수 있는 주요 작업
-
데이터 전처리
- 데이터를 머신러닝 알고리즘에 적합한 형태로 변환합니다.
- 예: 범주형 데이터를 숫자로 변환, 데이터 스케일 조정
-
모델 훈련 및 예측
- 다양한 머신러닝 알고리즘을 사용하여 모델을 훈련하고 예측을 수행합니다.
- 주요 알고리즘: 선형 회귀, 로지스틱 회귀, 결정 트리, 랜덤 포레스트 등
-
모델 평가
- 훈련된 모델의 성능을 평가합니다.
- 정확도, 정밀도, 재현율 등 다양한 평가 지표 제공
-
데이터 분할
- 데이터를 훈련용과 테스트용으로 나눕니다.
- 교차 검증을 통해 모델의 일반화 성능을 평가합니다.
-
차원 축소
- 데이터의 특성(feature)을 줄여 분석을 용이하게 합니다.
- 주성분 분석(PCA) 등의 기법 제공
-
파이프라인 구축
- 데이터 전처리부터 모델 훈련까지의 과정을 하나의 워크플로우로 구성합니다.
1.4 간단한 사용 예시
사이킷런은 기본설치 모듈이 아니기 때문에, 별도로 설치해야 합니다. 다만 코랩은 설치가 되어 있으며, 그 외 환경에서 실행할 경우 아래 명령어로 설치할 수 있습니다.
pip install scikit-learn
pip install scikit-learn
사이킷런을 사용하여 간단한 예측 작업을 수행하는 예시를 살펴보겠습니다.
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 모델 생성 및 훈련
model = LogisticRegression()
model.fit(X_train, y_train)
# 예측
y_pred = model.predict(X_test)
# 정확도 평가
accuracy = accuracy_score(y_test, y_pred)
print(f"모델 정확도: {accuracy:.2f}")
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 모델 생성 및 훈련
model = LogisticRegression()
model.fit(X_train, y_train)
# 예측
y_pred = model.predict(X_test)
# 정확도 평가
accuracy = accuracy_score(y_test, y_pred)
print(f"모델 정확도: {accuracy:.2f}")
이 예시는 로지스틱 회귀 모델을 사용하여 분류 작업을 수행하는 기본적인 과정을 보여줍니다.
2. 텐서플로우(TensorFlow)
텐서플로우는 구글에서 개발한 오픈소스 머신러닝 라이브러리로, 특히 딥러닝 모델을 구축하고 훈련하는 데 널리 사용됩니다. NumPy와 pandas로 준비한 데이터를 바탕으로 복잡한 신경망 모델을 구현하고 학습시킬 수 있으며, 대규모 데이터셋과 고성능 하드웨어를 활용한 딥러닝 작업에 적합합니다.
2.1 딥러닝이란?
딥러닝은 머신러닝의 한 분야로, 인간의 뇌의 신경망 구조에서 영감을 받아 설계된 인공신경망을 사용합니다. 딥러닝은 복잡한 패턴을 학습할 수 있어 이미지 인식, 자연어 처리, 음성 인식 등 다양한 분야에서 뛰어난 성능을 보입니다.
2.2 텐서플로우(TensorFlow)란?
텐서플로우는 데이터 흐름 그래프를 사용하여 수치 연산을 수행하는 오픈소스 소프트웨어 라이브러리입니다. 복잡한 신경망 모델을 쉽게 구현하고 학습시킬 수 있으며, GPU를 활용한 고속 연산을 지원합니다.
2.3 텐서플로우로 할 수 있는 주요 작업
-
신경망 모델 구축
- 다양한 층(layer)을 조합하여 복잡한 신경망 구조를 설계할 수 있습니다.
- 컨볼루션 신경망(CNN), 순환 신경망(RNN) 등 다양한 모델 구현 가능
-
모델 훈련 및 최적화
- 대규모 데이터셋을 사용한 모델 훈련을 지원합니다.
- 다양한 최적화 알고리즘을 제공하여 모델의 성능을 향상시킬 수 있습니다.
-
전이 학습
- 사전 훈련된 모델을 활용하여 새로운 작업에 적용할 수 있습니다.
-
데이터 전처리 및 증강
- 이미지, 텍스트 등 다양한 형태의 데이터를 전처리하고 증강하는 도구를 제공합니다.
-
모델 배포
- 훈련된 모델을 다양한 플랫폼에 배포할 수 있습니다.
- TensorFlow Serving, TensorFlow Lite 등을 통해 서버, 모바일, 웹 등에서 모델을 실행할 수 있습니다.
-
시각화
- TensorBoard를 통해 학습 과정과 모델 구조를 시각화할 수 있습니다.
2.4 간단한 사용 예시
텐서플로우는 기본 설치 모듈이 아니기 때문에, 별도로 설치해야 합니다. 코랩에서는 이미 설치되어 있지만, 그 외 환경에서 실행할 경우 아래 명령어로 설치할 수 있습니다.
pip install tensorflow
pip install tensorflow
텐서플로우를 사용하여 간단한 신경망 모델을 구현하고 훈련하는 예시를 살펴보겠습니다.
import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist
# MNIST 데이터셋 로드
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
# 데이터 전처리
train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1)).astype('float32') / 255
# 모델 구축
model = models.Sequential([
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.Flatten(),
layers.Dense(64, activation='relu'),
layers.Dense(10, activation='softmax')
])
# 모델 컴파일
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 모델 훈련
model.fit(train_images, train_labels, epochs=5, batch_size=64, validation_split=0.2)
# 모델 평가
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print(f'\n테스트 정확도: {test_acc:.2f}')
import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist
# MNIST 데이터셋 로드
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
# 데이터 전처리
train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1)).astype('float32') / 255
# 모델 구축
model = models.Sequential([
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.Flatten(),
layers.Dense(64, activation='relu'),
layers.Dense(10, activation='softmax')
])
# 모델 컴파일
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 모델 훈련
model.fit(train_images, train_labels, epochs=5, batch_size=64, validation_split=0.2)
# 모델 평가
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print(f'\n테스트 정확도: {test_acc:.2f}')
이 예시는 MNIST 데이터셋을 사용하여 간단한 컨볼루션 신경망(CNN)을 구축하고 훈련하는 과정을 보여줍니다. 이 모델은 손글씨 숫자를 인식하는 작업을 수행합니다.