Вы когда-нибудь задумывались, как Fitbit или любой другой гаджет определяет, когда вы идете или бегаете, и автоматически определяет каждый раз, когда вы тренируетесь? Это лишь одно из многих применений данных временных рядов.
Данные временного ряда представляют собой набор записей, полученных с течением времени. Эти данные всегда будут иметь последовательность, и изменение порядка может привести к возникновению или изображению совершенно другой ситуации.
В настоящее время в реальном мире применение временных рядов бесконечно, начиная от здравоохранения, распознавания человеческой деятельности, кибербезопасности, финансов, маркетинга, автоматического обнаружения заболеваний, обнаружения аномалий и т. д. Из-за обильной доступности временных данных существует вызывает большой интерес к приложениям, основанным на временных рядах, и было предложено множество алгоритмов классификации.
Как мы классифицируем временные ряды?
Существует множество методов классификации данных временных рядов. Некоторые из стандартных хорошо известных методов используют K-ближайших соседей с различными мерами упругого расстояния, такими как динамическая деформация времени (DTW), редактирование деформации времени (TWE) или расстояние, не зависящее от сложности (CID), для идентификации классов в данных.
У нас также есть методы глубокого обучения, которые демонстрируют потенциал в прогнозировании временных рядов с помощью таких методов, как автоматическое изучение временной зависимости. Однако из-за высокой размерности данных временных рядов эти методы оказываются дорогостоящими с точки зрения времени обучения и требований к памяти. Учитывая высокую вычислительную нагрузку при использовании традиционных алгоритмов, Йе и Кио предложили концепцию, известную как Shapelets.
Что такое шейплеты?
Поскольку большинство данных временных рядов демонстрируют межклассовые различия в подпоследовательностях, а не в полных рядах, шейплеты предназначались для представления этих отличительных подпоследовательностей данных временных рядов. Проще говоря, мы идентифицируем форму в серии, которая отличает ее от других классов в этой области. Пример Shapelet показан ниже.
На приведенном выше рисунке показано одномерное представление листа во временном ряду. Выделенный раздел показывает подпоследовательность, которая лучше всего представляет этот лист. Существуют различные способы идентификации форм с помощью методов, которые оптимизируют время обнаружения и классификации. Некоторыми из хорошо известных алгоритмов шейплета являются Быстрые шейплеты и Шейплеты обучения временных рядов.
Реализации Shapelet
Большинство реализаций шейплета было выполнено на C++ или Java, и в стандартной библиотеке Python нет официальных реализаций этих алгоритмов. В настоящее время я также работаю над репозиторием GitHub на python, чтобы идентифицировать шейплеты и классифицировать их. Некоторые из реализаций шейплетов с открытым исходным кодом на Python, доступных прямо сейчас, упомянуты ниже:
Learning Time-Series Shapelets by mohaseeb
Источник: shaplets-python
Установка
git clone [email protected]:mohaseeb/shaplets-python.git cd shaplets-python pip install .
Использование
from shapelets_lts.classification import LtsShapeletClassifier # create an LtsShapeletClassifier instance classifier = LtsShapeletClassifier( K=20, R=3, L_min=30, epocs=50, lamda=0.01, eta=0.01, shapelet_initialization='segments_centroids', plot_loss=True ) # train the classifier. # train_data.shape -> (# train samples X time-series length) # train_label.shape -> (# train samples) classifier.fit(train_data, train_label, plot_loss=True) # evaluate on test data. # test_data.shape -> (# test samples X time-series length) prediction = classifier.predict(test_data) # retrieve the learnt shapelets shapelets = classifier.get_shapelets() # and plot sample shapelets from shapelets_lts.util import plot_sample_shapelets plot_sample_shapelets(shapelets=shapelets, sample_size=36)
Sktime от Института Алана Тьюринга
Источник: sktime
Sktime — это унифицированная структура, разработанная Институтом Алана Тьюринга для машинного обучения с данными временных рядов. Этот пакет содержит преобразование шейплета, которое можно использовать для извлечения шейплетов из данных.
Установка
pip install sktime
or
conda install -c conda-forge sktime
Использование
from sktime.transformers.series_as_features.shapelets import ContractedShapeletTransform # How long (in minutes) to extract shapelets for. time_contract_in_mins = <time to search> # The initial number of shapelet candidates to assess per training series. initial_num_shapelets_per_case = <no of shapelets> ShapeletTransformer = ContractedShapeletTransform( time_contract_in_mins=time_contract_in_mins, num_candidates_to_sample_per_case=initial_num_shapelets_per_case) ShapeletTransformer.fit(train_x, train_y) #Plot the shapelets for i in range(0,min(len(ShapeletTransformer.shapelets),5)): s = ShapeletTransformer.shapelets[i] # summary info about the shapelet print("#"+str(i)+": "+str(s)) # overlay shapelets plt.plot( list(range(s.start_pos,(s.start_pos+s.length))), train_x.iloc[s.series_id,0][s.start_pos:s.start_pos+s.length] ) plt.show()
Заключение
В этой статье я представил шейплеты во временных рядах и их преимущества перед традиционными методами. Я намерен написать свою следующую статью, чтобы подробно рассказать об алгоритмах извлечения шейплетов и о том, как их можно использовать для задач классификации.
Большое спасибо за чтение! Дайте мне знать, если у вас есть какие-либо вопросы или комментарии.
Об авторе:
Рохит Винсент — консультант по аналитике данных здесь, в версии 1.