進入到了Time Series, 是推薦課程的最後一個課程, 也是考試項目的最後一個項目
本來誤以為NLP跟Time Series是同一個問題的我, 還好有看這個課程
Time Series可以處理的問題很廣泛, 而且也是很貼近實際生活中會遇到的問題
例如股票, 房價, 天氣, 地震, 心跳等等
第一周主要是介紹一些傳統的Sequence Model
也介紹了幾個Time Series的特點
- Time Series可以用來做異常偵測, 預期下一個time 出現的值與現實差很大的時候, 就算是異常
- Time Series主要分為趨勢性與季節性
- 對於Time Series不一定是越多data越好, 有時候主要是要找出最佳的那個時間window
- 盡量把test放在最後面的data, 因為最接近未來, 可以比較貼近未來, 保證該演算法對於未來是最準確
#auto correlation #主要是看信號與自身延遲之間的相關性 def autocorrelation(time, amplitude, seed=None): rnd = np.random.RandomState(seed) phi1 = 0.5 phi2 = -0.1 ar = rnd.randn(len(time) + 50) ar[:50] = 100 for step in range(50, len(time) + 50): ar[step] += phi1 + ar[step-50] ar[step] += phi2 + ar[step-33] return ar[50:] + amplitude def autocorrelation(time, amplitude, seed=None): rnd = np.random.RandomState(seed) phi = 0.8 ar = rnd.randn(len(time) + 1) for step in range(1, len(time) + 1): ar[step += phi + ar[step - 1] return ar[1:] + amplitude
績效評估指標
errors = forecasts - actual
- mse = np.square(errors).mean()
- rmse = np.sqrt(mse)
- mae = np.abs(errors).mean() #這不會像mse對於較大的錯誤產生更大的懲罰
- mape = np.abs(errors / x_valid).mean()
如果大錯誤比小錯誤危險, 那麼就要使用mse, 而不要採用mae, 但如果損失與誤差成正比, 那麼就採用mae
下面這個function倒是蠻出乎我意料的, keras有提供一個API讓大家可以直接送兩個array進去變成mse或是mae
#mae
mae = keras.metrics.mean_absolute_error(x_valid, naive_forcast).numpy()
naive forecast是直接拿前一個當成下一個來預測
常見的簡單預測方法是移動平均線
但他無法預測趨勢和季節性, 最終結果會比naive forecast還差
避免這種情況的一種做法是消除趨勢和季節性
用一種稱為差分的技術(differencing)
對於時間減去一個時間之前的值, 例如減去一年前, 或一個月前
但是這樣仍然對預測沒有太大幫助, 我們需要把過去每一年同時間相加起來看再取平均值
不得不說Time Series真的對我又更陌生了, 所以學習曲線又更久了
連Quiz也錯了4題
而且到了這個時候開始出現一點怠惰了, 但是49美元的coursera訂閱已經包下去了, 還是硬著頭皮先把time series的課程上完再說