모바일은 화면을 돌려 가로화면으로 보시는 게 읽으시기 편할 수 있습니다. 돌려서 보시는 걸 추천드릴게요!!
🚩 원본 데이터를 인공지능 모델이 인식할 수 있는 방향으로 데이터 전처리를 해주었습니다.
🚩 이번 포스팅에서는 그 데이터 전처리 과정을 다루겠습니다.
🏆 1. 라이브러리 임포트
import torch
import numpy as np
import random
import matplotlib.pyplot as plt
import pandas as pd
from torch import nn
from torch.utils.data import Dataset, DataLoader
import torch, gc
gc.collect()
torch.cuda.empty_cache()
🚩 GPU 사용 확인
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
device
>> device(type='cpu')
🏆 2. 데이터 불러오기
▪ 데이터를 d라는 이름으로 불러왔습니다.
▪ 초기 label이 [1,2,3,4,5] 로 구성되어 있기 때문에 학습 연산을 위해 전체적으로 1을 빼 [0,1,2,3,4] 로 만들어줍니다.
▪ 케이스를 합쳐주기 위해서 0과 1은 그대로 두고, [2,3,4] 를 하나의 label인 2로 합쳐주었습니다.
# 데이터 임포트
d = pd.read_csv('C:\\Users\\mingu\\Desktop\\data.csv')
d = d.drop('column_a',axis = 1)
# 레이블 전처리
d['y'] = d['y']-1
d.loc[(d['y'] != 0) & (d['y'] != 1) , 'y'] = 2
d
🏆 3. 데이터 분포 확인
▪ 학습을 위해 train set과 test set으로 나눠줘야 합니다.
▪ label의 비율을 반영하여 나눠주기 위해서 각 label의 개수를 확인해 보겠습니다.
print(len(d[d['y']==0]))
print(len(d[d['y']==1]))
print(len(d[d['y']==2]))
>>
2300
2300
6900
🏆 4. Train Set / Validation Set 나누기 및 정규화
▪ 데이터의 label 분포가 <0> : <1> : <2> = 1 : 1 : 3 이기 때문에 이 비율을 고려하여 나눠야 합니다.
▪ 따라서 label [0,1]에 대해서는 각각 1800 : 500 으로 train set과 test set을 만들었습니다.
▪ label [2]에 대해서는 5400 : 1500으로 train set과 test set을 구성했습니다.
▪ train set, test set 끼리 합치고 난 후 label만을 추출해서 각 경우에 대한 label을 생성해주겠습니다.
# 1.label이 0인 데이터들에 대한 전처리
d_0 = d[d['y']==0].copy()
d_0_train = d_0[:1800].copy()
d_0_test = d_0[1800:].copy()
# 2.label이 1인 데이터들에 대한 전처리
d_1 = d[d['y']==1].copy()
d_1_train = d_1[:1800].copy()
d_1_test = d_1[1800:].copy()
# 3.label이 2인 데이터들에 대한 전처리
d_2 = d[d['y']==2].copy()
d_2_train = d_2[:5400].copy()
d_2_test = d_2[5400:].copy()
# 1,2,3 각 경우를 합쳐 train set, validation set 형성
train = pd.concat([d_0_train, d_1_train, d_2_train])
test = pd.concat([d_0_test, d_1_test, d_2_test])
# train set을 feature와 label로 나눔
train_x = train.drop(['y'], axis = 1).copy()
train_y = train['y'].copy()
# validation set을 feature와 label로 나눔
test_x = test.drop(['y'], axis = 1).copy()
test_y = test['y'].copy()
# training set과 validation set의 shape 확인
print("Training shape : ", train_x.shape, train_y.shape)
print("Test shape : ",test_x.shape, test_y.shape)
>>
Training shape : (9000, 178) (9000,)
Test shape : (2500, 178) (2500,)
# 사이킷런의 StandardScaler 라이브러리를 사용해 특유의 노이즈가 많은 EEG신호를 정규화
# 데이터의 분포가 다양하기에 정규분포로 정규화
# 평균이 0, 분산이 1 인 구간으로 데이터들이 옮겨감
## 이에 따라 원래 데이터보다 데이터 분포 파악이 용이할 것이라 예상됨
from sklearn.preprocessing import StandardScaler
standard = StandardScaler()
train_x_st = standard.fit_transform(train_x)
test_x_st = standard.fit_transform(test_x)
🚩 이렇게 해서 인공지능 모델이 학습하기 편한 방식으로 데이터를 전처리해 주었습니다.
🚩 다음 포스팅에서는 모델에서 데이터를 가져오는 함수인 data_iter를 정의하고, 실제 모델을 학습시키는 과정을 다루겠습니다.
'🐍 파이썬 데이터 분석 프로젝트 > 🧠 EEG 뇌전증 분석 LSTM' 카테고리의 다른 글
🧠 EEG 뇌전증 분석 LSTM 05. Inference (0) | 2023.02.10 |
---|---|
🧠 EEG 뇌전증 분석 LSTM 04. 결과 해석 (0) | 2023.02.09 |
🧠 EEG 뇌전증 분석 LSTM 03. 모델 정의 학습 (0) | 2023.02.09 |
🧠 EEG 뇌전증 분석 LSTM 01. readme (0) | 2023.02.08 |