Современная библиотека глубокого обучения для временных рядов и последовательностей.
tsai
— это пакет глубокого обучения с открытым исходным кодом, созданный на базе Pytorch и fastai и ориентированный на самые современные методы решения задач временных рядов, таких как классификация, регрессия, прогнозирование, вменение…
tsai
в настоящее время находится в стадии активной разработки компанией timeseriesAI.
Вот некоторые из наиболее значительных дополнений к tsai
за последние несколько выпусков:
tsai
:Вы можете установить последнюю стабильную версию из pip, используя:
pip install tsai
Если вы планируете разрабатывать tsai самостоятельно или хотите быть в курсе последних событий, вы можете использовать редактируемую установку. Сначала установите PyTorch, а затем:
git clone https : // github . com / timeseriesAI / tsai
pip install - e "tsai[dev]"
Примечание: начиная с tsai 0.3.0 tsai будет устанавливать только жесткие зависимости. Другие мягкие зависимости (которые необходимы только для выбранных задач) не будут установлены по умолчанию (это рекомендуемый подход. Если вам требуется какая-либо из неустановленных зависимостей, tsai предложит вам установить ее при необходимости). Если вы все еще хотите установить tsai со всеми его зависимостями, вы можете сделать это, запустив:
pip install tsai [ extras ]
Вы также можете установить tsai с помощью conda (обратите внимание, что если вы замените conda на mamba, процесс установки будет намного быстрее и надежнее):
conda install - c timeseriesai tsai
Вот ссылка на документацию.
Вот список некоторых современных моделей, доступных в tsai
:
а также другие пользовательские модели, такие как: TransformerModel, LSTMattention, GRUAttention,…
Чтобы познакомиться с пакетом tsai, мы рекомендуем вам начать с этого блокнота в Google Colab: 01_Intro_to_Time_Series_Classification. Он предоставляет обзор задачи классификации временных рядов.
Мы также разработали множество других учебных тетрадей.
Чтобы использовать tsai в своих блокнотах, единственное, что вам нужно сделать после установки пакета, — это запустить это:
from tsai . all import *
Это всего лишь несколько примеров того, как вы можете использовать tsai
:
Обучение:
from tsai . basics import *
X , y , splits = get_classification_data ( 'ECG200' , split_data = False )
tfms = [ None , TSClassification ()]
batch_tfms = TSStandardize ()
clf = TSClassifier ( X , y , splits = splits , path = 'models' , arch = "InceptionTimePlus" , tfms = tfms , batch_tfms = batch_tfms , metrics = accuracy , cbs = ShowGraph ())
clf . fit_one_cycle ( 100 , 3e-4 )
clf . export ( "clf.pkl" )
Вывод:
from tsai . inference import load_learner
clf = load_learner ( "models/clf.pkl" )
probas , target , preds = clf . get_X_preds ( X [ splits [ 1 ]], y [ splits [ 1 ]])
Обучение:
from tsai . basics import *
X , y , splits = get_classification_data ( 'LSST' , split_data = False )
tfms = [ None , TSClassification ()]
batch_tfms = TSStandardize ( by_sample = True )
mv_clf = TSClassifier ( X , y , splits = splits , path = 'models' , arch = "InceptionTimePlus" , tfms = tfms , batch_tfms = batch_tfms , metrics = accuracy , cbs = ShowGraph ())
mv_clf . fit_one_cycle ( 10 , 1e-2 )
mv_clf . export ( "mv_clf.pkl" )
Вывод:
from tsai . inference import load_learner
mv_clf = load_learner ( "models/mv_clf.pkl" )
probas , target , preds = mv_clf . get_X_preds ( X [ splits [ 1 ]], y [ splits [ 1 ]])
Обучение:
from tsai . basics import *
X , y , splits = get_regression_data ( 'AppliancesEnergy' , split_data = False )
tfms = [ None , TSRegression ()]
batch_tfms = TSStandardize ( by_sample = True )
reg = TSRegressor ( X , y , splits = splits , path = 'models' , arch = "TSTPlus" , tfms = tfms , batch_tfms = batch_tfms , metrics = rmse , cbs = ShowGraph (), verbose = True )
reg . fit_one_cycle ( 100 , 3e-4 )
reg . export ( "reg.pkl" )
Вывод:
from tsai . inference import load_learner
reg = load_learner ( "models/reg.pkl" )
raw_preds , target , preds = reg . get_X_preds ( X [ splits [ 1 ]], y [ splits [ 1 ]])
ROCKET (RocketClassifier, RocketRegressor, MiniRocketClassifier, MiniRocketRegressor, MiniRocketVotingClassifier или MiniRocketVotingRegressor) — это несколько разные модели. На самом деле они не являются моделями глубокого обучения (хотя и используют свертки) и используются по-другому.
pip install sktime
или используйте:
pip install tsai [ extras ]
Обучение:
from sklearn . metrics import mean_squared_error , make_scorer
from tsai . data . external import get_Monash_regression_data
from tsai . models . MINIROCKET import MiniRocketRegressor
X_train , y_train , * _ = get_Monash_regression_data ( 'AppliancesEnergy' )
rmse_scorer = make_scorer ( mean_squared_error , greater_is_better = False )
reg = MiniRocketRegressor ( scoring = rmse_scorer )
reg . fit ( X_train , y_train )
reg . save ( 'MiniRocketRegressor' )
Вывод:
from sklearn . metrics import mean_squared_error
from tsai . data . external import get_Monash_regression_data
from tsai . models . MINIROCKET import load_minirocket
* _ , X_test , y_test = get_Monash_regression_data ( 'AppliancesEnergy' )
reg = load_minirocket ( 'MiniRocketRegressor' )
y_pred = reg . predict ( X_test )
mean_squared_error ( y_test , y_pred , squared = False )
Вы можете использовать tsai для прогноза в следующих сценариях:
Вам необходимо: * подготовить X (ввод временных рядов) и целевой y (см. документацию) * выбрать PatchTST или одну из моделей tsai, заканчивающуюся на Plus (TSTPlus, InceptionTimePlus, TSiTPlus и т. д.). Модель автоматически настроит головку для получения выходного сигнала той же формы, что и целевой вход y.
Обучение:
from tsai . basics import *
ts = get_forecasting_time_series ( "Sunspots" ). values
X , y = SlidingWindow ( 60 , horizon = 1 )( ts )
splits = TimeSplitter ( 235 )( y )
tfms = [ None , TSForecasting ()]
batch_tfms = TSStandardize ()
fcst = TSForecaster ( X , y , splits = splits , path = 'models' , tfms = tfms , batch_tfms = batch_tfms , bs = 512 , arch = "TSTPlus" , metrics = mae , cbs = ShowGraph ())
fcst . fit_one_cycle ( 50 , 1e-3 )
fcst . export ( "fcst.pkl" )
Вывод:
from tsai . inference import load_learner
fcst = load_learner ( "models/fcst.pkl" , cpu = False )
raw_preds , target , preds = fcst . get_X_preds ( X [ splits [ 1 ]], y [ splits [ 1 ]])
raw_preds . shape
# torch.Size([235, 1])
В этом примере показано, как построить одномерный прогноз на 3 шага вперед.
Обучение:
from tsai . basics import *
ts = get_forecasting_time_series ( "Sunspots" ). values
X , y = SlidingWindow ( 60 , horizon = 3 )( ts )
splits = TimeSplitter ( 235 , fcst_horizon = 3 )( y )
tfms = [ None , TSForecasting ()]
batch_tfms = TSStandardize ()
fcst = TSForecaster ( X , y , splits = splits , path = 'models' , tfms = tfms , batch_tfms = batch_tfms , bs = 512 , arch = "TSTPlus" , metrics = mae , cbs = ShowGraph ())
fcst . fit_one_cycle ( 50 , 1e-3 )
fcst . export ( "fcst.pkl" )
Вывод:
from tsai . inference import load_learner
fcst = load_learner ( "models/fcst.pkl" , cpu = False )
raw_preds , target , preds = fcst . get_X_preds ( X [ splits [ 1 ]], y [ splits [ 1 ]])
raw_preds . shape
# torch.Size([235, 3])
Формат ввода для всех моделей временных рядов и моделей изображений в tsai одинаков. np.ndarray (или объект, подобный массиву, например zarr и т. д.) с тремя измерениями:
[# выборок x # переменных x длина последовательности]
Входной формат для табличных моделей в tsai (например, TabModel, TabTransformer и TabFusionTransformer) — это фрейм данных pandas. См. пример.
Мы приветствуем вклад любого рода. Разработка улучшений, исправлений ошибок, документации, учебных тетрадей и т. д.
Мы создали руководство, которое поможет вам начать вносить свой вклад в tsai. Вы можете прочитать это здесь.
Хотите максимально эффективно использовать таймсерии AI/tsai в профессиональной среде? Давайте поможем. Чтобы узнать больше, отправьте нам электронное письмо: [email protected].
Если вы используете tsai в своих исследованиях, используйте следующую запись BibTeX:
@Misc{tsai,
author = {Ignacio Oguiza},
title = {tsai - A state-of-the-art deep learning library for time series and sequential data},
howpublished = {Github},
year = {2023},
url = {https://github.com/timeseriesAI/tsai}
}