개발 실습 및 프로젝트

머신 러닝 기초: 파이썬을 사용한 Scikit-Learn 실습

코드로 칼퇴하기 2024. 5. 22. 15:17

머신 러닝 기초: 파이썬을 사용한 Scikit-Learn 실습

머신 러닝이란?

머신 러닝(Machine Learning)은 인공지능(AI)의 한 분야로, 컴퓨터가 명시적인 프로그래밍 없이 데이터를 통해 학습하고 예측을 수행할 수 있도록 하는 기술입니다. 머신 러닝은 패턴 인식, 데이터 마이닝, 예측 분석 등에 활용됩니다.

머신 러닝의 주요 개념

  1. 훈련 데이터와 테스트 데이터
    • 데이터를 훈련 데이터(training data)와 테스트 데이터(test data)로 분리하여 모델을 학습하고 평가합니다.
    • 훈련 데이터는 모델을 학습시키는 데 사용되고, 테스트 데이터는 모델의 성능을 평가하는 데 사용됩니다.
  2. 지도 학습과 비지도 학습
    • 지도 학습(Supervised Learning): 입력 데이터와 함께 정답(레이블)이 주어지는 학습 방식입니다. 예: 회귀, 분류.
    • 비지도 학습(Unsupervised Learning): 입력 데이터만 주어지고 정답이 없는 학습 방식입니다. 예: 클러스터링, 차원 축소.
  3. 평가 지표
    • 모델의 성능을 평가하기 위한 지표입니다. 예: 정확도(accuracy), 정밀도(precision), 재현율(recall), F1-score 등.

Scikit-Learn 소개

Scikit-Learn은 파이썬에서 가장 널리 사용되는 머신 러닝 라이브러리 중 하나로, 다양한 머신 러닝 알고리즘을 제공하며, 간단하고 일관된 API를 통해 쉽게 사용할 수 있습니다.

Scikit-Learn 실습

  1. 필수 라이브러리 설치
    pip install numpy pandas scikit-learn

  2.  데이터 로드 및 전처리
    import numpy as np
    import pandas as pd
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    
    # 데이터 로드 (예제 데이터 사용)
    from sklearn.datasets import load_iris
    data = load_iris()
    X = pd.DataFrame(data.data, columns=data.feature_names)
    y = pd.Series(data.target)
    
    # 데이터 분리 (훈련 데이터와 테스트 데이터)
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
    
    # 데이터 스케일링 (표준화)
    scaler = StandardScaler()
    X_train_scaled = scaler.fit_transform(X_train)
    X_test_scaled = scaler.transform(X_test)

  3. 모델 학습
    from sklearn.linear_model import LogisticRegression
    from sklearn.metrics import accuracy_score, classification_report
    
    # 모델 초기화 및 학습
    model = LogisticRegression()
    model.fit(X_train_scaled, y_train)
    
    # 예측
    y_pred = model.predict(X_test_scaled)
    
    # 성능 평가
    accuracy = accuracy_score(y_test, y_pred)
    report = classification_report(y_test, y_pred)
    
    print(f'Accuracy: {accuracy}')
    print(f'Classification Report:\n{report}')

  4. 결과 해석
    Accuracy: 0.9777777777777777
    Classification Report:
                  precision    recall  f1-score   support
    
               0       1.00      1.00      1.00        16
               1       1.00      1.00      1.00        19
               2       0.92      1.00      0.96        10
    
        accuracy                           0.98        45
       macro avg       0.97      1.00      0.98        45
    weighted avg       0.98      0.98      0.98        45

  5. 결과 시각화
    import matplotlib.pyplot as plt
    from sklearn.decomposition import PCA
    
    # PCA를 사용하여 데이터 시각화
    pca = PCA(n_components=2)
    X_pca = pca.fit_transform(X_test_scaled)
    
    plt.figure(figsize=(8, 6))
    scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y_test, cmap='viridis')
    legend1 = plt.legend(*scatter.legend_elements(), title="Classes")
    plt.gca().add_artist(legend1)
    plt.title('PCA of Iris Dataset')
    plt.xlabel('PCA Component 1')
    plt.ylabel('PCA Component 2')
    plt.savefig("pca_iris.png")
    plt.show()

전체 코드

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

# 데이터 로드 (예제 데이터 사용)
from sklearn.datasets import load_iris
data = load_iris()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = pd.Series(data.target)

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

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

# 모델 초기화 및 학습
model = LogisticRegression()
model.fit(X_train_scaled, y_train)

# 예측
y_pred = model.predict(X_test_scaled)

# 성능 평가
accuracy = accuracy_score(y_test, y_pred)
report = classification_report(y_test, y_pred)

print(f'Accuracy: {accuracy}')
print(f'Classification Report:\n{report}')

# PCA를 사용하여 데이터 시각화
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_test_scaled)

plt.figure(figsize=(8, 6))
scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y_test, cmap='viridis')
legend1 = plt.legend(*scatter.legend_elements(), title="Classes")
plt.gca().add_artist(legend1)
plt.title('PCA of Iris Dataset')
plt.xlabel('PCA Component 1')
plt.ylabel('PCA Component 2')
plt.savefig("pca_iris.png")
plt.show()

이 코드는 다음과 같은 순서로 진행됩니다:

  1. Iris 데이터셋 로드 및 분리
  2. 데이터 표준화
  3. Logistic Regression 모델 학습 및 예측
  4. 모델 성능 평가
  5. PCA 시각화 및 저장

 

시각 자료

  1. Iris 데이터셋의 PCA 시각화
  2. Classification Report
    Precision Recall F1-Score Support
    1.00 1.00 1.00 16
    1.00 1.00 1.00 19
    0.92 1.00 0.96 10
    Accuracy     0.98
    Macro Avg 0.97 1.00 0.98
    Weighted Avg 0.98 0.98 0.98

 
이 실습을 통해 머신 러닝의 기초 개념과 Scikit-Learn을 사용한 간단한 모델 학습 과정을 이해할 수 있습니다. 머신 러닝 모델의 성능을 평가하고, 실제 데이터에 적용해 보세요. 추가적인 질문이나 도움이 필요하시면 언제든지 댓글로 남겨주세요. 감사합니다!