본문 바로가기

분류 전체보기75

[캐글] Tabular Playground Series - April 회고 2022년 다시 참가한 TPS 4월이 끝났다. 106/816 (13%) Multivariable Time Series Classification 문제였고, 처음에는 CNN, LSTM 모델 만들어보고, 나중에 XGBoost, LGBM 모델 만들어서 대회 끝나기 이틀 전부터 앙상블했다. 앙상블은 그냥 점수보면서 weighted averaging했다. 모델은 xgboost, lgbm, bi-lstm, lstm, cnn-lstm 이렇게 다섯개 사용했다. 이번 대회에서 가장 많이 시간을 쓴건 LSTM인데, 전에 코세라 딥러닝에서 내용만 들어봤고 써보는건 처음이였다. 그 외에, - Pandas가 복잡해지면 어려웠음. ➡️ kaggle course Pandas - EDA할 때 통계적인 부분이 모자란게 FE까지 영향을.. 2022. 5. 1.
[LSTM] LSTM + Fully Connected Layer 두가지 방법 LSTM return_sequences LSTM의 return_sequences=True는 아웃풋 시퀀스 전체를 다음 layer로 넘긴다. return_sequences=False는 마지막 아웃풋만 다음 layer로 넘긴다. 따라서 더 적은 정보를 담고있기 때문에, accuracy가 떨어진다. y3 = LSTM(128, return_sequences=True)(y2) x2 = Dense(64, activation='swish')(y3) # ValueError: Shapes (None, 60) and (None, 1) are incompatible y3 = LSTM(128, return_sequences=False)(y2) x2 = Dense(64, activation='swish')(y3) return_.. 2022. 4. 23.
[CNN] Conv1D의 causal padding이란 convolution 연산은 인풋에 커널을 곱해서 feature map을 만든다. 연산을 거칠 때마다 feature map의 크기가 인풋의 크기보다 작아지는데, 이 문제를 해결하는 것이 padding이다. padding을 통해서 인풋의 크기 (spatial dimension)를 유지할 수 있고, 또 인풋의 모든 파트를 feature map에 반영할 수 있게된다. (padding이 없으면 2D 이미지의 중간 부분만 커널이 여러번 지나가게됨) causal padding 시계열 데이터를 다룰 때, 위의 사진처럼 4개의 인풋이 한개의 타겟에 영향을 미친다고 하자. 커널 사이즈를 4로 정해서 인풋과 아웃풋을 매핑할 수 있다. 하지만 2, 3, 4의 값은 4개의 인풋이 전부 존재하지 않는다. causal paddi.. 2022. 4. 22.
[cv] 시계열 데이터 Cross Validation - GroupKFold GroupKFold is a variation of k-fold which ensures that the same group is not represented in both testing and training sets. For example if the data is obtained from different subjects with several samples per-subject and if the model is flexible enough to learn from highly person specific features it could fail to generalize to new subjects. GroupKFold makes it possible to detect this kind of ov.. 2022. 4. 16.
[FE] 시계열 데이터 lag feature 추가하기 EDA를 통해서 어떤 feature들을 선택하거나 추가할지 정할 수 있다. 시계열 데이터를 다룰 때 lag feature을 추가할 수 있다. lag feature는 이전 타임스텝의 데이터를 뜻한다. lag value가 1이면 한개 전 타임스텝의 데이터, 2이면 두개 전 타임스텝의 데이터이다. 타임스텝별로 어떤 트렌드가 있다면 그만큼을 lag value로 정해준다. 예를들어 일주일마다 어떤 트렌드가 있으면 lag value을 7로 정해줄 수 있다. 또 이전 타임스텝의 데이터가 존재하지 않을 때 Nan값이 들어가기 때문에 pandas fillna()를 이용해서 0으로 바꿔준다. # lag value = 1 # sequence라는 컬럼을 groupby df[feature + '_lag1'] = df.group.. 2022. 4. 15.
[Algorithm] Bucket Sort + 347. Top K Frequent Elements Bucket Sort INPUT: 길이가 n인 리스트 (array), 키값이 균등하게 분포한다고 가정 1. 구간을 n등분한 버킷을 만든다. 2. array[i]를 인덱스가 n * array[i]인 버킷의 위치에 추가한다. 3. 각각의 버킷에 여러개의 요소가 있으면 insertion sort로 정렬한다. 리트코드 347. Top K Frequent Elements - Bucket Sort를 이용한 풀이 - n이 인풋 리스트의 길이일 때, 빈도는 1에서 n까지 분포. (가장 작은 빈도수 = 1, 가장 큰 빈도수 = n) - 빈도수는 collections.Counter()로 센다. Counter()은 소를 key로, 빈도수를 value로 가진 딕셔너리를 리턴. INPUT: 숫자를 요소로 가진 리스트 1. 길이.. 2022. 4. 14.
[LSTM] LSTM unit, cell, layer에 대한 이해 LSTM unit (num_units), cell? LSTM cell은 3개의 게이트로 구성되어있고, 이를 통해서 기존 RNN보다 긴 시퀀스를 학습할 수 있게된다. 아래 사진은 한개의 cell에 대한 설명이다. keras LSTM의 인풋 중 하나인 num_units는 hidden state (output)의 차원이다. 위 사진의 빨간색 동그라미의 개수가 num_units이다. 따라서 위의 그림은 2개의 units를 가진 하나의 LSTM cell이다. 그리고 다음 cell이 전 hidden state (units, ht)와 input (xt)를 더하고 세개의 게이트를 지나서, 다음 hidden state (units, ht+1)를 계산한다. (= layer의 num_units에 지정해준 개수) 반복되는 L.. 2022. 4. 13.
[LSTM] keras.layers.LSTM()의 input_shape LSTM의 첫번째 layer에는 input_shape를 넣어줘야한다. LSTM 모델의 input은 항상 3D이다. = (# of samples, timestep, # of features) 3D로 넣어주기 위해서 기존 데이터를 형식에 맞게 reshape해줘야 한다. 예를 들어서 train.shape가 (1558080, 13) test.shape가 (733080, 13)일 때 train = train.reshape(int(len(train)/60), 60, 13) test = test.reshape(int(len(test)/60), 60, 13) print(f'train reshape: {train.shape}') print(f'test reshape: {test.shape}') # train reshap.. 2022. 4. 10.