Sktime:用於時間序列機器學習的Python庫

2020-12-09 讀芯術

全文共4701字,預計學習時長12分鐘

圖源:unsplash

在Python中使用時間序列來解決數據科學問題是非常有挑戰性的,現有的工具並不適合時間序列任務,也不容易集成。

Scikiti -learn包中的方法假設數據是表格格式結構,每一列為獨立同分布——這些假設不適用於時間序列數據。包含時間序列學習模塊的程序包,例如狀態模型,不能很好地集成。此外,現有的Python包不支持許多基本的時間序列操作,比如將數據分成不同時間的訓練集和測試集。

Sktime就是為了解決這一問題應運而生的。Sktime是一個使用時間序列進行機器學習的開源Python工具箱。這是一個由英國經濟與社會研究理事會、消費者數據研究中心和艾倫·圖靈研究所資助的社區驅動的基金項目。

Sktime將Scikit-learn應用程式接口擴展到時間序列任務。它提供了必要的算法和轉換工具,能有效地解決時間序列回歸、預測和分類任務。該庫包括其他通用類庫沒有的、專用的時間序列學習算法和轉換方法。

Sktime的設計可以與Scikiti -learn互操作,輕鬆適應相關時間序列任務的算法,並構建複合模型。具體怎麼操作呢?許多時間序列任務是相關聯的,能夠解決一項任務的算法通常可以用來解決相關的任務,這個概念叫做還原。

例如,時間序列回歸模型(使用序列來預測輸出值)可用於時間序列預測任務(預測的輸出值是終值)。

sktime庫標誌 | 圖源:Github

其宗旨是:「Sktime使可理解和可組合的機器學習具有時間序列,為支持清晰學習任務分類Scikiti -learn兼容算法和模型組合工具提供了具有啟發性的文檔和友好的社群。」

本文將重點介紹sktime的一些特性。

適合時間序列的數據模型

Sktime針對pandas數據幀中的時間序列使用了嵌套數據結構。

典型數據框架中的每一行都包含獨立同分布觀測值,列代表不同的變量。對於Sktime方法,Pandas數據幀中的每個單元格包含整個時間序列。這種格式對於多變量、面板和異構數據很靈活,允許重用Pandas和Scikit-learn中的方法。在下表中,每一行都是一個觀察值,X列中包含一個時間序列數組,y列包含一個組值。

本機時間序列數據結構,與sktime兼容

在下表中,按照Scikit-learn的方法要求,X列中的每個元素被分為單個列,251列的維數非常高。此外,表格學習算法忽略了列的時間順序(但用於時間序列分類和回歸算法)。

scikit-learn所需時間序列數據結構

對於建模多個同時出現的系列的問題,本機系列數據結構兼容的Sktime顯然是最好的,Scikiti -learn表格格式數據結構訓練的模型會淹沒在眾多特性中。

sktime能做什麼?

根據Github頁面介紹,sktime目前提供:

· 模型調優。

· 轉換器和模型流水線技術。

· 最先進的時間序列分類、回歸和預測算法(來自基於java的tsml工具包)。

· 用於時間序列的轉換器:單序列變換(例如去趨勢或去周期),序列作為特徵變換(例如特徵提取器),以及組成不同轉換器的工具。

· 模型集合——例如用於時間序列分類和回歸的可完全定製的隨機森林;多變量問題的集合。

sktime應用程式接口

如上所述,Sktime遵循基本的Scikit-learn應用程式接口以及擬合、預報和變換類方法。對於估計量(即模型)類,Sktime提供了一個擬合方法用於模型訓練,以及一個預報方法用於生成新的預測;Sktime中的估計量將Scikit-learn的回歸器和分類器擴展到對應的時間序列;Sktime還包括特定於時間序列任務的新的估計器。

圖源:unsplash

對於轉換器類,sktime提供了擬合和轉換方法來轉換系列數據。有幾種可用的類型轉換:

· 表格式數據轉換器,例如PCA,可以在獨立同分布實例上操作。

· 序列到基元轉換器,將每一行的時間序列轉換為基元數字(例如,特徵事務)。

· 序列到序列轉換器將序列轉換為不同的序列(如序列的傅立葉變換)。

· 去趨勢轉換器返回與輸入序列在同一域中的去趨勢時間序列(例如去周期)。

代碼示例

時間序列預測

下面的例子改編自Github上的預測教程,本例中的系列(博克思-詹金斯法航空數據集)顯示了1949-1960年期間每月國際航空公司乘客的數量。

首先,加載數據並將其分為訓練集、測試集和圖表。sktime提供了兩個方便的函數來輕鬆完成此任務——temporal_train_test_splitfor按時間分割數據集,plot_ys用於繪製訓練和測試序列值。

from sktime.datasets import load_airline

fromsktime.forecasting.model_selection import temporal_train_test_split

fromsktime.utils.plotting.forecasting import plot_ys

y =load_airline()

y_train,y_test =temporal_train_test_split(y)

plot_ys(y_train,y_test, labels=["y_train", "y_test"])

在創建複雜的預測之前,將預測與一個簡單的基線進行比較會很有幫助——一個好的模型必須超過這個值。sktime提供NaiveForecaster方法,採用不同的「策略」生成基線預測。

下面的代碼和圖表展示了兩個天真預測。strategy = " last "預測器會預測序列的最後觀察值。strategy = " seasonal_last "預測器預測給定季節中觀察到的序列最後一個值。本例中的周期指定為「sp=12」,即12個月。

from sktime.forecasting.naive importNaiveForecaster

naive_forecaster_last =NaiveForecaster(strategy="last")

naive_forecaster_last.fit(y_train)

y_last=naive_forecaster_last.predict(fh)

naive_forecaster_seasonal =NaiveForecaster(strategy="seasonal_last",sp=12)

naive_forecaster_seasonal.fit(y_train)

y_seasonal_last=naive_forecaster_seasonal.predict(fh)

plot_ys(y_train,y_test, y_last, y_seasonal_last, labels=["y_train", "y_test", "y_pred_last", "y_pred_seasonal_last"]);

smape_loss(y_last, y_test)

>>0.231957

下一個預測片段顯示了如何用最小的工作量輕鬆、正確地調整現有的sklearn回歸器來完成預測任務。下方,Sktime的ReducedRegressionForecaste方法使用sklearnRandomForestRegressor模型對序列進行預測。在內部,Sktime將訓練數據分割成長度為12的窗口,以便回歸器進行訓練。

from sktime.forecasting.compose importReducedRegressionForecaster

fromsklearn.ensemble importRandomForestRegressor

fromsktime.forecasting.model_selection import temporal_train_test_split

fromsktime.performance_metrics.forecasting import smape_loss

regressor =RandomForestRegressor()

forecaster=ReducedRegressionForecaster(regressor,window_length=12)

forecaster.fit(y_train)

y_pred= forecaster.predict(fh)

plot_ys(y_train,y_test, y_pred, labels=['y_train', 'y_test', 'y_pred'])

smape_loss(y_test, y_pred)

sktime還包含本地預測方法,如AutoArima。

from sktime.forecasting.arima importAutoARIMA

forecaster=AutoARIMA(sp=12)

forecaster.fit(y_train)

y_pred = forecaster.predict(fh)

plot_ys(y_train,y_test, y_pred, labels=["y_train", "y_test", "y_pred"]);

smape_loss(y_test, y_pred)

>>0.07395319887252469

想要更全面地了解Sktime的預測功能,請查看Sktime預測教程。

時間序列的分類

最後,Sktime可以用於將時間序列劃分為不同的序列組。在下面的代碼示例中,單個時間序列的分類和scikit-learn中的分類一樣簡單,唯一的區別在於上面討論的嵌套時間序列數據結構。

from sktime.datasets import load_arrow_head

fromsktime.classification.compose importTimeSeriesForestClassifier

fromsklearn.model_selection import train_test_split

from sklearn.metricsimport accuracy_score

X, y =load_arrow_head(return_X_y=True)

X_train, X_test, y_train,y_test =train_test_split(X, y)

classifier=TimeSeriesForestClassifier()

classifier.fit(X_train, y_train)

y_pred= classifier.predict(X_test)

accuracy_score(y_test, y_pred)

>>0.8679245283018868

來源: https://pypi.org/project/sktime/

數據傳輸至TimeSeriesForestClassifier.

關於時間序列和sktime的基本介紹就到這裡啦,如果想要更全面地了解時間序列分類,請查看sktime單變量和多變量分類教程。

留言點讚關注

我們一起分享AI學習與發展的乾貨

如轉載,請後臺留言,遵守轉載規範

相關焦點

  • python數據挖掘常用工具有哪幾種?
    python數據挖掘常用工具有哪幾種? python有強大的第三方庫,廣泛用於數據分析,數據挖掘、機器學習等領域,下面小編整理了python數據挖掘的一些常用庫,希望對各位小夥伴學習python數據挖掘有所幫助。
  • 20個超棒的Python 庫集合分享
    Pandas (Commits: 17144, Contributors: 1165) 官網:https://pandas.pydata.org/ Pandas 是一個 Python 庫,提供高級的數據結構和各種各樣的分析工具。這個軟體包的主要特點是能夠將相當複雜的數據操作轉換為一兩個命令。Pandas包含許多用於分組、過濾和組合數據的內置方法,以及時間序列功能。
  • NeuralProphet:基於神經網絡的時間序列建模庫
    NeuralProphet是一個python庫,用於基於神經網絡對時間序列數據進行建模。它建立在PyTorch之上,並受到Facebook Prophet和AR-Net庫的極大啟發。
  • 良心整理15個超級Python庫,不要錯過!
    它在開發人員中流行的原因有很多,最重要的一點就是它有大量的庫供用戶使用。Python 的易用性、靈活性吸引了許多開發人員為機器學習創建新的庫。有一個庫大家必都會介紹,就是TensorFlow,這裡就不多說了。
  • 序列比對在biopython中的處理
    序列比對是生物信息學分析中的常見任務,包含局部比對和全局比對兩大算法,局部比對最經典的代表是blast, 全局比對則用於多序列比對。在biopython中,支持對序列比對的結果進行讀寫,解析,以及運行序列比對的程序。
  • 手把手:用Python搭建機器學習模型預測黃金價格
    新年第一天,讓我們嘗試用python搭建一個機器學習線性回歸模型,預測金價!自古以來,黃金一直作為貨幣而存在,就是在今天,黃金也具有非常高的儲藏價值,那麼有沒有可能預測出黃金價格的變化趨勢呢?答案是肯定的,讓我們使用機器學習中的回歸算法來預測世界上貴重金屬之一,黃金的價格吧。
  • 數據科學 | 十大最受歡迎的Python庫
    Python作為最流行的程式語言之一,擁有豐富的數據科學庫集。Python主要用於數據挖掘、數據處理和建模、數據可視化和數據提取。因此,我們列出了數據科學中使用的10個最流行的Python庫。獻給所有的數據愛好者和數據科學家,我們希望這篇清單體文章能為你帶來價值!
  • 幾行代碼搞定ML模型,低代碼機器學習Python庫正式開源
    機器之心機器之心報導機器之心編輯部PyCaret 庫支持在「低代碼」環境中訓練和部署有監督以及無監督的機器學習模型,提升機器學習實驗的效率。想提高機器學習實驗的效率,把更多精力放在解決業務問題而不是寫代碼上?低代碼平臺或許是個不錯的選擇。最近,機器之心發現了一個開源低代碼機器學習 Python 庫 PyCaret,它支持在「低代碼」環境中訓練和部署有監督以及無監督的機器學習模型。
  • 手把手教您Python機器學習項目
    學習機器學習的最佳方式是通過設計和完成小型項目。入門時,Python可能會令人生畏Python是一種流行的、功能強大的解釋語言。與R不同,Python是一種完整的語言和平臺,可以用於研究和開發以及開發生產系統。
  • Python真的值得學習嗎
    最初是用來編寫自動化腳本,隨著版本的不斷更新和語言新功能的添加,越來越多的時候,被用於獨立或者大型項目的開發。 1989年,Guido van Rossum在參加設計ABC(一種教學語言)後,萌生了想要開發一種新的計算機高級語言的想法。他綜合了ABC語言的優點,並且結合了Unix shell和C的習慣,創造出了一種新的語言——Python。
  • Python最佳經典學習路線
    如何學習Python python語言基礎:(帶你熟悉python語言的特性,學會使用python開發環境,使用python開發一些簡單的案例) (1)Python3入門,數據類型,字符串 (2)判斷/循環語句,函數,
  • java和python哪個更好用?
    但是沒有人給出「 java和python哪個更好用?」的明確理由。我們都知道,如今Python正在與幾乎每種程式語言競爭。甚至它還在與世界上最強大的程式語言-Java競爭,Java是創建桌面應用程式的最佳程式語言之一。同時它也用於數據科學領域。因此,這兩種程式語言在各個行業中都在相互競爭。在進行比較之前,讓我們看一下這兩種語言的概述。
  • PyTorch-Transformers:最先進的自然語言處理庫(附帶python代碼)
    utm_source=blog&utm_medium=pytorch-transformers-nlp-pythonPyTorch-Transformers是什麼?PyTorch-Transformers是一個最先進的自然語言處理預訓練模型庫。我從PyTorch-Transformers的文檔中選取了這一部分。
  • Python開發簡單爬蟲【學習資料總結】
    > DOM樹 Beautiful Soup Python第三方庫,用於從HTML或XML中提取數據 官網:https://www.crummy.com/software/BeautifulSoup/ 中文文檔:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html 安裝測試
  • 如何在Visual Studio開發工具安裝python庫
    >技術pythonDjango在python語言開發工具的pycharm中,可以安裝第三方庫。那麼,在Visual Studio開發工具中,如何安裝python第三方庫呢?下面利用實例說明:操作步驟:1、打開Visual Studio 2019開發工具,創建python項目
  • Python中random庫的使用
    random庫是計算機中用於生成隨機數的標準庫。)、getrandbits( )、uniform( )、 randrange( )、choice( )、shuffle( )基本隨機數函數seed(a = None):初始化給定的隨機數種子,默認為當前系統時間
  • Python中的時間序列數據可視化的完整指南
    時間序列數據在許多不同的行業中都非常重要。它在研究、金融行業、製藥、社交媒體、網絡服務等領域尤為重要。對時間序列數據的分析也變得越來越重要。在分析中有什麼比一些好的可視化效果更好呢?沒有一些視覺效果,任何類型的數據分析都是不完整的。因為一個好的情節比20頁的報告更能讓你理解。因此,本文是關於時間序列數據可視化的。
  • 乾貨|時間序列預測類問題下的建模方案探索實踐
    隨著機器學習和深度學習的興起,時間序列預測類問題越來越多的被抽象為回歸問題,從而可以使用機器學習和深度學習的相關模型,不需要受到基本假設的限制,適用範圍更廣,更受到人們青睞。時間序列的自相關性可以理解為時間序列自己與自己(不同滯後項)之間的相關性,本文使用時滯圖來觀察時間序列的自相關性,時滯圖是把時間序列的值及相同序列在時間軸上後延的值放在一起展示,如圖3所示。
  • Python機器學習的迷你課程(14天教學)
    這取決於你有多少時間和你的熱情程度。下面是14課,將讓你開始和高效的機器學習在Python:第1課:下載並安裝Python和SciPy生態系統第2課:使用Python、NumPy、Matplotlib和panda。第3課:從CSV加載數據。
  • 機器學習實戰-sklearn介紹
    最近幾年,機器學習算是很火的一個方向,但是有一點問題,這個方向需要研究生畢業的的敲門磚,但是如果自己想學,又不知道從何入手?從本篇開始,將會給各位看官介紹怎麼入手這個東西,並且怎麼去應用。Sklearn原稱是Scikit learn,是機器學習領域中最知名的python模塊之一,是基於Python語言的機器學習的工具。