- 시계열 데이터
- 시계열 데이터: 연속된 시간 동안 순차적으로 측정한 데이터
- 일반적인 데이터는 서로 독립적인데 반해, 시계열 데이터는 데이터 간에 시간적으로 상관관계가 있다.
- 시계열 데이터를 분석하려면 과거의 데이터들이 미래에 미치는 영향의 패턴을 알아내는 것이 중요
EX) 일년 동안의 기온, 주가, 자연어, 비디오
- 시계열 데이터의 이용
EX)
- Many to many
- 기온 예측
- 번역
- One to many
- 이미지 캡셔닝
- Many to one
- 자동 완성
- 출력 전압 예측
- 전압 파형 데이터
- 회로에 인가한 입력 전압과 그에 따른 5가지 출력 전압 값을 picosecond 단위로 기록
=> 훈련데이터: 452,283개/ 테스트 데이터: 193,836개
- txt파일 형태로 저장
=> ,로 구분/ 시간, 입력 전압, 출력 전압 A~E
- 데이터 저장 위치
=> ./dataset
- 데이터 파일 이름
=> SKHY_train.txt
=> SKHY_test_answer.txt
=> SKHY_test_noanswer.txt
- 학습용 데이터 중 일부는 학습에, 일부는 검증에 사용
- 실무에서 테스트용 데이터는 일반적으로 label이 없음.
- 본 프로젝트에서는 성능 평가를 위해 label이 있는 테스트용 데이터 활용
- 전압 파형 데이터 읽기
- pandas의 read_csv 함수를 활용
import pandas as pd # pandas 라이브러리 불러오기
train_data_path = ‘./dataset/SKHY_train.txt’ # 학습 data 위치를 변수로 저장
test_data_path = ‘./dataset/SKHY_testanswer.txt’ # 테스트 data 위치를 변수로 저장
df_train = pd.read_csv(train_data_path, delimiter = ',', header = 0) # 학습 data 읽기
df_test = pd.read_csv(test_data_path, delimiter = ',', header = 0) # 테스트 data 읽기
delimiter: csv파일을 불러올 때 각각의 데이터가 어떤 값로 분리가 되는지를 나타내는 변수
header: 데이터 셋에서 몇 번째부터 데이터를 활용을 할 건지를 의미
- pandas의 여러 함수 및 인덱싱을 사용하여 데이터 내부 확인
df_test.shape # 테스트 data의 행과 열의 개수 출력
df_test.head(5) # 테스트 data 중 첫 다섯 행만 출력
df_test.tail(5) # 테스트 data 중 마지막 다섯 행만 출력
df_test.describe() # 테스트 data의 통계값 출력
df_test.columns # 테스트 data의 header (열 이름) 출력
df_test.values # dataframe을 numpy ndarray로 변환
# df_test.to_numpy()
df_test.loc[0:4] # 테스트 data의 첫 5개 행을 반환
df_test.loc[0:4, ['Input_V', 'A']] # 첫 다섯 행을 반환하되, Input_V와 A열만 반환
df_test.iloc[-4:, 0:2] # 마지막 4개 행을 반환하되, 첫 2개 열만 반환
- 결측 치 존재여부 확인
- 데이터에 결측 치(NaN)가 존재할 수 있음.
- 결측 치: 관찰되지 않은 데이터로, 빈칸을 의미
is_null = df_train.isnull() # dataframe을 구성하는 각 element가 빈칸이면 True
Is_null_np = is_null.values # is_null을 numpy ndarray로 변환
exists_null = is_null_np.any() # data에 빈칸이 하나라도 존재하면 True, 아니면 False
print('학습 data에 NaN 포함 여부:', exists_null)
print('테스트 data에 NaN 포함 여부:', df_test.isnull().values.any())
- 데이터 시각화
from matplotlib import pyplot as plt # matplotlib 라이브러리 불러오기
matplotlib inline # 출력된 그래프가 브라우저에서 보이도록 함
fig = plt.figure(figsize = (10,5)) # 가로 10, 세로 5 사이즈의 figure 생성
plt.xlabel('Time (picoseconds)') # x축 레이블 지정
plt.ylabel('Values) # y축 레이블 지정
picoseconds = df_train.iloc[10000:20000, 0] * 10e+12 # 1만~2만 행의 시간 값 (첫번째열)
for i in range(1, len(df_train.columns)):
plt.plot(picoseconds, df_train.iloc[10000:20000, i], label = df_train.columns[i])
# 1만~2만 행의 입력 및 출력 전압 값 (2번째 열~마지막 열)
plt.legend(loc = 'upper right') # 범례가 오른쪽 위에 위치
plt.show()
- 학습용 데이터와 검증용 데이터를 분리
- 학습용 데이터 중 앞 90%는 학습에, 나머지 10%는 검증에 사용
- 딥러닝 모델 학습 시, 모델의 에폭 별 성능을 평가하기 위해 학습용 데이터를 이용하는 것은 적절치 않다.
=> 모델이 학습용 데이터에 overfitting 되어있을 수 있기 때문
에폭(Epoch): 전체 학습 데이터셋을 모델이 한 번 학습하는 것을 의미
- 모델 학습에 사용되지 않은 검증용 데이터를 모델 평가에 사용
train_valid_ratio = 0.9 # 학습용 데이터와 검증용 데이터의 비율을 9:1로 설정
train_len = int(df_train.shape[0] * train_valid_ratio) # 학습 데이터의 개수
valid_len = df_train.shape[0] - train_len # 검증용 데이터의 개수
Test_len = df_test.shape[0] # 테스트용 데이터의 개수
print('#train: {}, #valid: {}, #test: {}'.format(train_len, valid_len, test_len))
- 각 dataframe을 numpy ndrray로 변환하여 학습데이터, 검증데이터, 테스트 데이터를 dictionary로 저장
train_data = {
'time': df_train.iloc[:, 0].values[:train_len],
'X': df_train.iloc[:, 1].values[:train_len],
'y': df_train.iloc[:, 2:].values[:train_len]
}
valid_data = {
'time': df_train.iloc[:, 0].values[train_len:],
'X': df_train.iloc[:, 1].values[train_len:],
'y': df_train.iloc[:, 2:].values[train_len:]
}
test_data = {
'time': df_test.iloc[:, 0].values,
'X': df_test.iloc[:, 1].values,
'y': df_test.iloc[:, 2:].values
}
- 데이터 정규화
- 데이터 정규화: 데이터의 범위를 적당하게 (e.g., -1~1 사이) 맞춰주는 것을 의미
- 일반적으로, 머신러닝 모델은 정규화 된 데이터에서 더 잘 학습됨
- 이번 프로젝트에서는 데이터의 각 변수를 표준화 (평균을 뺀 후 표준편차로 나누어 줌) 하여 정규분포를 따르도록 하는 정규화를 수행
X_mean = train_data['X'].mean() # 학습데이터의 입력 전압 평균
X_std = train_data['X'].std() # 학습데이터의 입력 전압 표준 편차
X_train = (train_data['X'] - X_mean) / X_std # 학습데이터 정규화
X_valid = (valid_data['X'] - X_mean) / X_std # 검증데이터 정규화
X_test = (test_data['X'] - X_mean) / X_std # 테스트 데이터 정규화
'SK AI Data Academy 1기 중급 > [SK하이닉스] DRAM 내부 회로의 파형 예측' 카테고리의 다른 글
05. Transformer 모델을 통한 파형 예측 (0) | 2024.07.21 |
---|---|
04. 시계열 모델을 통한 파형 예측 (2) | 2024.07.21 |
03. 회귀 분석을 통한 파형 예측 (1) | 2024.07.14 |
01. 프로젝트 소개 (0) | 2024.07.13 |