statemodels 笔记: lowess
機器學習筆記:局部加權回歸 LOESS_UQI-LIUWJ的博客-CSDN博客
1 基本使用方法
statsmodels.nonparametric.smoothers_lowess.lowess(endog, exog, frac=0.6666666666666666, it=3, delta=0.0, xvals=None, is_sorted=False, missing='drop', return_sorted=True)LOWESS (Locally Weighted Scatterplot Smoothing) 局部加權回歸
2 參數說明
| endog | 一維ndarray 觀測點的y值 |
| exog | 一維ndarray 觀測點的x值 |
| frac | 0到1之間的float型數據 估計每個 y 值時使用的數據比例。(用這個范圍內的點進行局部加權回歸) |
| it | 進行幾輪局部加權回歸 |
| delta | float型數據 間隔多少進行一次局部參數回歸(中間的點使用線性插值) |
| is_sorted | 布爾型數據 如果為 False(默認),則數據將在計算 lowess 之前按 exog 排序。 如果為 True,則假定數據已按 exog 排序。 如果指定了 xvals,那么如果 is_sorted 為 True,則也必須對其進行排序。 |
| missing | 可用選項為“none”、“drop”和“raise”。 如果為“none”,則不進行 nan 檢查。 如果“drop”,則任何帶有 nan?的觀察都將被刪除。 如果“raise”,則nan會引發錯誤。 默認為“drop”。 |
| return_sorted | 布爾型變量 如果為 True(默認),則返回的數組按 exog 排序,并刪除了缺失的(nan 或無限)觀察。 如果為 False,則返回的數組與輸入數組具有相同的長度和相同的觀察序列。 |
3 返回值
如果 return_sorted 為 True,則返回的數組是二維的,如果 return_sorted 為 False,則返回的數組是一維的。
如果 return_sorted 為 False,則僅返回估計值,并且觀察值將與輸入數組的順序相同。(雖然我實驗出來的也是二維)
4? 工作原理
????????假設輸入數據有 N 個點。 該算法通過根據 x 值,用?frac*N個 最接近的點 (x_i,y_i) ,并使用加權線性回歸估計 y_i 。
???????? (x_j,y_j) 的權值函數是應用于 的三次函數。
????????如果it?> 1,則執行多輪加權局部線性回歸,其中權值函數是二次函數。
????????每次迭代花費的時間與原始擬合大致相同,因此這些迭代很昂貴。
????????當噪聲具有極重的尾部分布時(例如柯西噪聲),多輪迭代是很有用的。
? ? ? ? 對于 具有較少重尾的噪聲,例如 自由度>2 的 t 分布,問題較少。
????????delta 可用于節省計算。 對于每個 x_i,對于比 delta 更近的點,都會跳過回歸。
????????下一個局部加權回歸擬合 x_i 的 delta 范圍內內的最遠點,并且通過在兩個回歸擬合之間進行線性插值來估計其間的所有點。
????????對于大數據(N > 5000),明智地選擇 delta 可以顯著減少計算時間。 一個不錯的選擇是 delta = 0.01 * range(exog)。
5 使用舉例
import numpy as np import statsmodels.api as sm lowess=sm.nonparametric.lowess###數據集 x = np.random.uniform(low = -2*np.pi, high = 2*np.pi, size=500) #[-2Π,2Π]之間的均勻分布,一共500個點 x=np.sort(x) y = np.sin(x) + np.random.normal(size=len(x)) #sin(x),外加一些噪聲z=lowess(y,x,is_sorted=True) z1=lowess(y,x,is_sorted=True,frac=1/3) z2=lowess(y,x,is_sorted=True,it=0) #進行局部加權回歸 擬合import matplotlib.pyplot as plt plt.figure(figsize=(13,5)) plt.plot(y) plt.plot(z[:,-1]) plt.plot(z1[:,-1]) plt.plot(z2[:,-1]) plt.legend(['origin','default(frac=2/3,it=3,delta=0)','(frac=1/3,it=3,delta=0)','(frac=2/3,it=0,delta=0)'])可以發現,frac越大,越平滑
在這種噪聲不具有長尾的情況下,迭代幾輪影響不大
?
總結
以上是生活随笔為你收集整理的statemodels 笔记: lowess的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习笔记:时间序列分解(滑动平均)
- 下一篇: 论文代码解读 Hierarchical