<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 如何使用 Python 對時間序列預測數據進行功率變換 > 原文: [https://machinelearningmastery.com/power-transform-time-series-forecast-data-python/](https://machinelearningmastery.com/power-transform-time-series-forecast-data-python/) 數據轉換旨在消除噪聲并改善時間序列預測中的信號。 對于給定的預測問題,選擇良好甚至最佳的變換可能非常困難。有許多變換可供選擇,每個變換都有不同的數學直覺。 在本教程中,您將了解如何使用 Python 探索不同的基于功能的變換以進行時間序列預測。 完成本教程后,您將了解: * 如何識別何時使用以及如何探索平方根變換。 * 如何識別何時使用和探索日志轉換以及對原始數據的期望。 * 如何使用 Box-Cox 變換執行平方根,記錄并自動發現數據集的最佳冪變換。 讓我們開始吧。 ## 航空公司乘客數據集 航空公司乘客數據集描述了一段時間內航空公司乘客的總數。 這些單位是數千名航空公司乘客的數量。從 1949 年到 1960 年,每月有 144 次觀察。 [了解更多信息并從數據市場](https://datamarket.com/data/set/22u3/international-airline-passengers-monthly-totals-in-thousands-jan-49-dec-60)下載數據集。 使用文件名“ _airline-passengers.csv_ ”將數據集下載到當前工作目錄。 下面的示例加載數據集并繪制數據。 ```py from pandas import Series from matplotlib import pyplot series = Series.from_csv('airline-passengers.csv', header=0) pyplot.figure(1) # line plot pyplot.subplot(211) pyplot.plot(series) # histogram pyplot.subplot(212) pyplot.hist(series) pyplot.show() ``` 運行該示例將創建兩個圖,第一個圖顯示時間序列作為線圖,第二個圖顯示觀察結果作為直方圖。 ![Airline Passengers Dataset Plot](https://img.kancloud.cn/c6/74/c674251a1b5cef7ba044da7d1f791bb0_800x600.jpg) 航空公司乘客數據集圖 數據集是非平穩的,意味著觀測值的均值和方差隨時間而變化。這使得難以通過 ARIMA 等經典統計方法和更復雜的機器學習方法(如神經網絡)進行建模。 這是由似乎既是增長趨勢又是季節性因素引起的。 此外,變化量或方差隨時間增加。當您查看季節性組件的大小時,這很明顯,并注意到從一個周期到下一個周期,振幅(從周期的底部到頂部)正在增加。 在本教程中,我們將研究可以在展示此屬性的時間序列數據集上使用的變換。 ## 平方根變換 具有二次增長趨勢的時間序列可以通過取平方根而成為線性的。 讓我們用一個快速設計的例子來證明這一點。 考慮一系列數字 1 到 99 的平方。該系列的線圖將顯示二次增長趨勢,值的直方圖將顯示具有長軌跡的指數分布。 下面的代碼片段創建并繪制了這個系列的圖表。 ```py from matplotlib import pyplot series = [i**2 for i in range(1,100)] # line plot pyplot.plot(series) pyplot.show() # histogram pyplot.hist(series) pyplot.show() ``` 運行該示例將該系列繪制為隨時間變化的線圖和觀察的直方圖。 ![Quadratic Time Series](https://img.kancloud.cn/dc/17/dc170e9d44b7ac06506a8383bf066eea_800x600.jpg) 二次時間序列 如果您在自己的時間序列中看到這樣的結構,則可能會出現二次增長趨勢。通過采用平方過程的平方根的逆運算,可以將其去除或變為線性。 因為該示例是完全二次的,我們期望變換數據的線圖顯示直線。因為平方序列的源是線性的,我們期望直方圖顯示均勻分布。 下面的示例對時間序列執行 _sqrt()_ 變換并繪制結果。 ```py from matplotlib import pyplot from numpy import sqrt series = [i**2 for i in range(1,100)] # sqrt transform transform = series = sqrt(series) pyplot.figure(1) # line plot pyplot.subplot(211) pyplot.plot(transform) # histogram pyplot.subplot(212) pyplot.hist(transform) pyplot.show() ``` 我們可以看到,正如預期的那樣,二次趨勢是線性的。 ![Square Root Transform of Quadratic Time Series](https://img.kancloud.cn/22/77/2277d1cd1e7000c0548e41f8967bbd87_800x600.jpg) 二次時間序列的平方根變換 航空公司乘客數據集可能顯示二次增長。如果是這種情況,那么我們可以期望平方根變換將增長趨勢減小為線性并且將觀測的分布改變為可能接近高斯。 下面的示例執行數據集的平方根并繪制結果。 ```py from pandas import Series from pandas import DataFrame from numpy import sqrt from matplotlib import pyplot series = Series.from_csv('airline-passengers.csv', header=0) dataframe = DataFrame(series.values) dataframe.columns = ['passengers'] dataframe['passengers'] = sqrt(dataframe['passengers']) pyplot.figure(1) # line plot pyplot.subplot(211) pyplot.plot(dataframe['passengers']) # histogram pyplot.subplot(212) pyplot.hist(dataframe['passengers']) pyplot.show() ``` 我們可以看到趨勢減少了,但沒有被刪除。 線圖仍顯示從周期到周期的變化增加。直方圖仍顯示分布右側的長尾,表明指數或長尾分布。 ![Square Root Transform of Airline Passengers Dataset Plot](https://img.kancloud.cn/02/45/024523451c051abdbb73d50885abd839_800x600.jpg) 航空旅客數據集地塊的平方根變換 ## 日志轉換 一類更極端的趨勢是指數級的,通常作為曲棍球棒。 通過取值的對數,可以使具有指數分布的時間序列成為線性。這稱為日志轉換。 與上面的方形和平方根情況一樣,我們可以通過一個簡單的例子來證明這一點。 下面的代碼通過將數字從 1 提高到 99 來創建指數分布 _e_ ,這是[自然對數](https://en.wikipedia.org/wiki/Natural_logarithm)或[歐拉數](https://en.wikipedia.org/wiki/E_(mathematical_constant))的基數( 2.718 ...)。 ```py from matplotlib import pyplot from math import exp series = [exp(i) for i in range(1,100)] pyplot.figure(1) # line plot pyplot.subplot(211) pyplot.plot(series) # histogram pyplot.subplot(212) pyplot.hist(series) pyplot.show() ``` 運行該示例將創建序列的線圖和觀察分布的直方圖。 我們看到線圖上的極端增加以及直方圖上同樣極端的長尾分布。 ![Exponential Time Series](https://img.kancloud.cn/85/ae/85ae6ed94ee5aeda63cef2d0684e65bc_800x600.jpg) 指數時間序列 同樣,我們可以通過獲取值的自然對數將此系列轉換回線性。 這將使串聯線性和分布均勻。以下示例說明了這一點的完整性。 ```py from matplotlib import pyplot from math import exp from numpy import log series = [exp(i) for i in range(1,100)] transform = log(series) pyplot.figure(1) # line plot pyplot.subplot(211) pyplot.plot(transform) # histogram pyplot.subplot(212) pyplot.hist(transform) pyplot.show() ``` 運行該示例會創建繪圖,顯示預期的線性結果。 ![Log Transformed Exponential Time Series](https://img.kancloud.cn/22/77/2277d1cd1e7000c0548e41f8967bbd87_800x600.jpg) 對數變換的指數時間序列 我們的航空公司乘客數據集有這種形式的分布,但也許不是這種極端。 以下示例演示了 Airline Passengers 數據集的日志轉換。 ```py from pandas import Series from pandas import DataFrame from numpy import log from matplotlib import pyplot series = Series.from_csv('airline-passengers.csv', header=0) dataframe = DataFrame(series.values) dataframe.columns = ['passengers'] dataframe['passengers'] = log(dataframe['passengers']) pyplot.figure(1) # line plot pyplot.subplot(211) pyplot.plot(dataframe['passengers']) # histogram pyplot.subplot(212) pyplot.hist(dataframe['passengers']) pyplot.show() ``` 運行該示例會導致趨勢看起來比上面的平方根變換更加線性。線圖顯示看似線性的增長和方差。 直方圖還顯示更均勻或壓扁的類高斯分布的觀測值。 ![Log Transform of Airline Passengers Dataset Plot](https://img.kancloud.cn/85/55/8555fec010fd7a28d6d1ca5d50af9729_800x600.jpg) 航空旅客數據集的日志變換 日志變換在時間序列數據中很受歡迎,因為它們在消除指數方差方面很有效。 重要的是要注意,此操作假定值為正且非零。通常通過添加固定常數來轉換觀察值以確保所有輸入值滿足此要求。例如: ```py transform = log(constant + x) ``` 當 _ 變換 _ 是變換序列時,_ 常數 _ 是一個固定值,它將所有觀測值提升到零以上, _x_ 是時間序列。 ## Box-Cox 變換 平方根變換和對數變換屬于稱為功率變換的一類變換。 [Box-Cox 變換](https://en.wikipedia.org/wiki/Power_transform#Box.E2.80.93Cox_transformation)是一種可配置的數據變換方法,支持平方根和對數變換,以及一套相關的變換。 更重要的是,它可以配置為自動評估一組變換并選擇最佳擬合。它可以被認為是一種電動工具,可以消除時間序列中基于功率的變化。得到的序列可能更線性,得到的分布更高斯或均勻,這取決于生成它的基礎過程。 _scipy.stats_ 庫提供了 Box-Cox 變換的實現。 [boxcox()](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.boxcox.html)函數接受一個名為 _lambda_ 的參數,它控制要執行的變換類型。 以下是 lambda 的一些常見值 * _lambda_ = -1。是一個互惠的變換。 * _lambda_ = -0.5 是倒數平方根變換。 * _lambda_ = 0.0 是對數變換。 * _lambda_ = 0.5 是平方根變換。 * _lambda_ = 1.0 是無變換。 例如,我們可以使用 _boxcox()_ 函數執行日志轉換,如下所示: ```py from pandas import Series from pandas import DataFrame from scipy.stats import boxcox from matplotlib import pyplot series = Series.from_csv('airline-passengers.csv', header=0) dataframe = DataFrame(series.values) dataframe.columns = ['passengers'] dataframe['passengers'] = boxcox(dataframe['passengers'], lmbda=0.0) pyplot.figure(1) # line plot pyplot.subplot(211) pyplot.plot(dataframe['passengers']) # histogram pyplot.subplot(212) pyplot.hist(dataframe['passengers']) pyplot.show() ``` 運行該示例將重現上一節中的日志轉換。 ![BoxCox Log Transform of Airline Passengers Dataset Plot](https://img.kancloud.cn/85/55/8555fec010fd7a28d6d1ca5d50af9729_800x600.jpg) BoxCox 日志變換的航空公司乘客數據集圖 我們可以將 lambda 參數設置為 None(默認值),并讓函數找到統計調整的值。 以下示例演示了此用法,返回已轉換的數據集和所選的 _lambda_ 值。 ```py from pandas import Series from pandas import DataFrame from scipy.stats import boxcox from matplotlib import pyplot series = Series.from_csv('airline-passengers.csv', header=0) dataframe = DataFrame(series.values) dataframe.columns = ['passengers'] dataframe['passengers'], lam = boxcox(dataframe['passengers']) print('Lambda: %f' % lam) pyplot.figure(1) # line plot pyplot.subplot(211) pyplot.plot(dataframe['passengers']) # histogram pyplot.subplot(212) pyplot.hist(dataframe['passengers']) pyplot.show() ``` 運行該示例發現 _lambda_ 值為 0.148023。 我們可以看到這非常接近λ值為 0.0,導致對數變換并且對于平方根變換更強(小于)0.5。 ```py Lambda: 0.148023 ``` 線和直方圖也與對數變換非常相似。 ![BoxCox Auto Transform of Airline Passengers Dataset Plot](https://img.kancloud.cn/02/31/0231b00fde678fdddddd9859082fbb0a_800x600.jpg) BoxCox 自動轉換航空公司乘客數據集圖 ## 摘要 在本教程中,您了解了如何使用 Python 識別何時使用以及如何對時間序列數據使用不同的電源變換。 具體來說,你學到了: * 如何識別二次變化并使用平方根變換。 * 如何識別指數變化以及如何使用日志變換。 * 如何使用 Box-Cox 變換執行平方根和對數變換,并自動優化數據集的變換。 您對電源變換或本教程有任何疑問嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看