데이터 과학,기계 학습
ROCKET : 빠르고 정확한 시계열 분류
Python을 사용한 시계열 분류를위한 최신 알고리즘
"시계열 분류 작업은 관련 클래스와 관련된 시계열 내에서 신호 또는 패턴을 학습하거나 감지하는 것과 관련이 있다고 생각할 수 있습니다." —Dempster, et al 2020, ROCKET 논문 저자
최첨단 (SOTA) 정확도를 가진 대부분의 시계열 분류 방법은 계산 복잡성이 높고 확장 성이 떨어집니다. 즉, 작은 데이터 세트에서는 학습 속도가 느리고 대규모 데이터 세트에서는 효과적으로 사용할 수 없습니다.
ROCKET (RandOM Convolutional KErnal Transform)은 컨볼 루션 신경망을 포함하여 경쟁 SOTA 알고리즘과 동일한 수준의 정확도를 단 몇 분만에 달성 할 수 있습니다. 알고리즘은 다음의 벤치 마크 데이터 세트에서 평가되었습니다.UCR 아카이브.
ROCKET은 먼저 CNN에서 사용되는 것과 같은 임의의 컨벌루션 커널을 사용하여 시계열 데이터 세트를 변환 한 다음 이러한 기능으로 선형 분류기를 훈련합니다.
ROCKET은 얼마나 빠릅니까? 85 개의 벤치 마크 데이터 세트에서 ROCKET을 순차적으로 학습하고 테스트하는 데 1 시간 40 분이 걸렸습니다. 동일한 작업에서 다음으로 빠른 SOTA 알고리즘 (cBOSS)은 19 시간 33 분이 걸렸습니다. 속도에 대한 자세한 비교는종이.
이 기사의 나머지 부분에서는 다음을 수행합니다.
- 대체 시계열 분류기 토론
- ROCKET의 작동 원리 설명
- Python 코드 예제 제공
대안은 무엇입니까?
시계열 분류를위한 다른 방법은 일반적으로 모양, 빈도 또는 분산과 같은 특정 시리즈 표현에 의존합니다. ROCKET의 컨볼 루션 커널은이 엔지니어링 된 기능 추출을 동일한 기능을 많이 캡처 할 수있는 단일 메커니즘으로 대체합니다.
시계열 분류 조사
시계열 변환은 시계열 분류의 기본 아이디어입니다.많은 시계열 특정 알고리즘은 변환 된 시계열과 기존 분류 알고리즘의 구성입니다., scikit-learn에있는 것과 같은.
시계열 분류 알고리즘에 대한 입문 조사는 이전 기사를 참조하십시오.
경쟁 SOTA 방법
다음 방법은에 설명 된 알고리즘의 속도와 정확성을 개선하기 위해 노력합니다.서베이위.
- 근접 숲탄력적 거리 측정으로 분할되는 의사 결정 트리의 앙상블입니다.
- TS-CHIEF사전 기반 및 간격 기반 분할 기준을 사용하여 Proximity Forest를 확장합니다.
- InceptionTimeInception 아키텍처를 기반으로하는 5 개의 deep CNN의 앙상블입니다.
- 미스터 씰시계열 (SAX, SFA)의 기호 표현으로 추출 된 특징에 선형 분류기를 적용합니다.
- cBOSS 또는 계약 가능한 BOSS는 SFA 변환을 기반으로하는 사전 기반 분류기입니다.
- catch22분류기에 전달할 수있는 22 개의 미리 선택된 시계열 변환 집합입니다.
ROCKET은 어떻게 작동합니까?
ROCKET은 먼저 컨볼 루션 커널을 사용하여 시계열을 변환하고 두 번째는 변환 된 데이터를 선형 분류기에 전달합니다.
컨볼 루션 커널
컨벌루션 신경망에서 발견 된 것과 동일한 컨볼 루션 커널은 임의의 길이, 가중치, 편향,팽창, 패딩. 보다종이랜덤 매개 변수가 샘플링되는 방법에 대해 설명합니다. ROCKET의 일부이며 샘플링을 조정할 필요가 없습니다. 보폭은 항상 하나입니다. ROCKET은 결과 기능에 ReLU와 같은 비선형 변환을 적용하지 않습니다.
ROCKET은 매우 많은 수의 커널을 사용합니다. 기본값은 10,000입니다. 컨볼 루션 계산 비용이 매우 낮기 때문에 너무 많이 사용할 수 있습니다. 이는 커널 가중치가 "학습"되지 않고 단일 회선 레이어 만 있다는 사실 때문입니다.
일반적인 CNN과 달리 ROCKET은 다양한 커널을 사용합니다. 임의의 길이, 확장, 패딩, 가중치 및 편향을 통해 ROCKET은 광범위한 정보를 캡처 할 수 있습니다. 특히 다양한 커널 확장을 통해 ROCKET은 다양한 주파수와 스케일에서 패턴을 캡처 할 수 있습니다.
이러한 랜덤 커널을 조합하여 시계열 분류와 관련된 기능을 캡처 할 수 있습니다. 단독으로 단일 랜덤 컨벌루션 커널은 시계열에서 유용한 기능을 약하게 캡처 할 수 있습니다.
컨볼 루션 커널 변환
각 커널은 각 시계열과 컨볼 루션되어 기능 맵을 생성합니다. 커널의 기능 맵은 통합되어 커널 당 두 가지 기능을 생성합니다.최대 값과양수 값의 비율.
그만큼최대 값기능은 글로벌 최대 풀링과 유사합니다.
그만큼양수 값의 비율커널이 캡처 한 패턴의 보급에 가중치를 부여하는 방법을 나타냅니다. 이 값은 높은 정확도에 기여하는 ROCKET의 가장 중요한 요소입니다.
선형 분류
더 작은 데이터 세트의 경우, 저자는능선 회귀 분류기정규화 매개 변수의 빠른 교차 검증과 다른 초 매개 변수가 없기 때문입니다.
정규화는 작은 데이터 세트의 경우와 같이 특성 수가 학습 예제 수를 초과 할 때 중요합니다. (기본적으로 ROCKET은 10,000 개의 커널을 사용하고 커널 당 2 개의 기능을 생성하므로 20,000 개의 기능이 생성됩니다.)
대규모 데이터 세트의 경우, 저자 추천로지스틱 회귀확장 성으로 인해 확률 적 경사 하강 법을 사용합니다.
"대규모"데이터 세트에서 훈련 예제의 수는 추출 된 특징의 수보다 훨씬 큽니다.
ROCKET을 Python과 함께 사용하는 방법은 무엇입니까?
ROCKET 변환은sktime
파이썬 패키지.
다음 코드 예제는 sktime에서 수정되었습니다.ROCKET Transform 데모.
먼저 필요한 패키지를로드합니다.
import numpy as np
from sklearn.linear_model import RidgeClassifierCV
from sktime.datasets import load_arrow_head # univariate dataset
from sktime.transformers.series_as_features.rocket import Rocket
다음으로 훈련 및 테스트 데이터를 설정합니다.이 경우에는 단 변량을 사용합니다.화살촉편의를 위해 시리즈 데이터 세트.Rocket 변환은 다변량 데이터에도 적용 할 수 있습니다.
X_train, y_train = load_arrow_head(split="test", return_X_y=True)
X_test, y_test = load_arrow_head(split="train", return_X_y=True)
print(X_train.shape, X_test.shape)
>> (175, 1) (36, 1)
Rocket 변환을 사용하여 훈련 데이터를 변환합니다. 기본적으로 ROCKET은 10,000 개의 커널을 사용합니다.일반적으로 커널이 많을수록 분류 정확도가 높아집니다. 그러나 정확도 증가와 계산 시간 사이에는 상충 관계가 있습니다. 많은 수의 커널이 있어도 ROCKET은 여전히 매우 빠릅니다.
rocket = Rocket(num_kernels=10,000, random_state=111)
rocket.fit(X_train)
X_train_transform = rocket.transform(X_train)
X_train_transform.shape
>> (175, 20000)
scikit-learn에서 선형 분류기를 초기화하고 훈련합니다. 저자sktime
사용 권장RidgeClassifierCV
for smaller datasets (<20k training examples). For larger datasets, use logistic regression trained with stochastic gradient descent SGDClassifier (loss = 'log')
.
classifier = RidgeClassifierCV(alphas=np.logspace(-3, 3, 10), normalize=True)
classifier.fit(X_train_transform, y_train)
마지막으로 훈련 된 모델의 점수를 매기고 예측을 생성하려면 Rocket을 사용하여 테스트 데이터를 변환하고 훈련 된 모델을 호출합니다.
X_test_transform = rocket.transform(X_test)
classifier.score(X_test_transform, y_test)
>> 0.9167
소환
Dempster, A., Petitjean, F. & Webb, G.I. ROCKET : 랜덤 컨볼 루션 커널을 사용한 매우 빠르고 정확한 시계열 분류.데이터 최소 지식 디스크 34,1454–1495 (2020).https://doi.org/10.1007/s10618-020-00701-z
'Data Analytics(ko)' 카테고리의 다른 글
7 Python Tricks You Should Know -번역 (0) | 2020.10.22 |
---|---|
Advanced Python: Consider These 10 Elements When You Define Python Functions -번역 (0) | 2020.10.21 |
The Beginner’s Guide to Pydantic -번역 (0) | 2020.10.19 |
7 Commands in Python to Make Your Life Easier -번역 (0) | 2020.10.18 |
Don’t Choose Python as Your First Programming Language -번역 (0) | 2020.10.17 |