LDA Practice

[ML] LDA을 활용한 분류 문제

Week#7 / Reference: Prof.Choi / based on Colab, Kaggle

Overview

원자력발전소 상태 판단

본 문제는 주어진 데이터를 이용하여 원자력발전소의 상태를 예측하는 문제이며, 세종대학교 최유경 교수님의 원자력발전소 상태 판단 kaggle competition를 출처로 둔다.

Description

  1. Data

    본 competition에서는 한국수력원자력(주)에서 제공받은 원자력 발전소 모사 데이터가 제공된다. 주어진 데이터 내에서 발전소의 상태가 변하며 변하기 전 발전소 상태를 상태 A, 변한 후 상태를 상태 B_라고 할 때 데이터를 기반으로 상태 _B_를 판단하는 것이 대회의 목적이다. 모든 데이터는 같은 상태 (상태 _A)에서 시작한다.

    데이터는 0초에서 15초 사이에 상태가 변하기 시작하며, 모든 데이터가 숫자로 이루어져 있다. train 데이터로는 약 10분 데이터가 주어지며 test 데이터로는 1분 간 데이터가 주어진다. 즉, 1분 데이터만 사용하여 평가한다.

    훈련데이터와 학습데이터는 모두 원할한 실습 진행을 위해서 256으로 차원 축소되었다.

  2. File

    • pca_train.csv(9.81GB) : 훈련 데이터가 포함된 csv 파일

    • pca_test.csv(879MB) : 테스트 데이터가 포함된 csv 파일

      train과 test의 id는 중복되지 않는다.

    • train_label.csv(6.78KB) : 훈련데이터의 id (파일 이름)에 해당되는 상태_B를 정리한 파일
    • sample_submission.csv(283KB) : 제출 형식과 동일한 샘플 데이터

Preparation

  • kaggle install

    1
    2
    3
    !pip uninstall -y kaggle
    !pip install --upgrade pip
    !pip install kaggle==1.5.6
    
  • API token upload

    1
    2
    3
    !mkdir -p ~/.kaggle
    !cp kaggle.json ~/.kaggle/
    !chmod 600 ~/.kaggle/kaggle.json
    
  • Import libraries

    1
    2
    import numpy as np
    import pandas as pd
    

Data Loading

Competition의 Data 탭에서 필요한 데이터를 가져온다.

  • Import dataset from Kaggle

    1
    2
    !kaggle competitions download -c 2021-ml-p5
    !unzip 2021-ml-p5.zip
    
  • Input data

    1
    2
    3
    4
    5
    6
    train = pd.read_csv('pca_train.csv')
    label = pd.read_csv('train_label.csv')
    test = pd.read_csv('pca_test.csv')
      
    X = train
    y = label.drop('id', axis = 1)
    

Data Modeling

  • Fitting

    다양한 parameters를 조절해 봤지만, tol 값을 조절했을 때 성능이 가장 잘 나왔다.

    여기서 tol이란 수렴 허용 오차를 뜻한다. solver='svd'인 경우만 사용되며, default value는 1.0e-4, 즉 0.0001이다.

    1
    2
    3
    4
    from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
    lda = LinearDiscriminantAnalysis(tol=0.008)
    lda.fit(X, y)
    pred = lda.predict(test)
    
  • Submission

    1
    2
    submit = pd.read_csv('sample_submission.csv')
    submit['label'] = pred
    
    1
    submit.to_csv('submit.csv',index=False)
    
    1
    !kaggle competitions submit -c 2021-ml-p5 -f submit.csv -m "Message"
    

Result

score

parameters를 적절히 조절하는 것에는 특정한 공식이 있는 것도 아니고, 이것 참. 추후 Grid Search를 공부하면 조금 수월하겠지만 아직까지는 실험적인 시도가 어느 정도 필요한 법이다.