我有兩個向量x和y,我想爲這些向量計算滾動迴歸,例如(x(1:4),y(1:4)), (x(2:5),y(2:5)), ...
是否已有一個函數?我想到的最好的算法是O(n),但在每個子陣列上應用單獨的線性迴歸將是O(n^2)。 我正在使用Matlab和Python(numpy)。滾動線性迴歸的有效方法
回答
不,沒有任何功能可以進行滾動迴歸,返回您希望的所有統計數據,並高效地執行。
這並不意味着你不能寫這樣的功能。這樣做意味着多次調用工具,如conv或filter。這就是Savitsky-Golay工具的工作原理,它可以完成你想要的大部分工作。爲每個迴歸係數打個電話。
使用上溯測量工具和下溯測量工具來使用/修改以前的迴歸估計值不會像調用調用那樣高效,因爲當您隨後用conv進行工作時,只需要將線性系統分解一次即可。無論如何,只要點在系列中均勻間隔,就不需要進行更新。這就是Savitsky-Golay工作的原因。
「你需要的大部分」是什麼意思?我能得到什麼? – 2013-03-26 14:08:38
您可以從conv得到每個迴歸係數。因此預測是簡單的代數運算,所以殘差的計算以及使用它們的任何事情都是微不足道的。但沒有單一的工具可以給你所需要的東西。您需要編寫代碼。 – 2013-03-26 14:23:40
import numpy as np
# y=x*alpha+beta
# window_size - integer, x-numpy array, y-numpy array
x2=np.power(x,2)
xy=x*y
window = np.ones(int(window_size))
a1=np.convolve(xy, window, 'full')*window_size
a2=np.convolve(x, window, 'full')*np.convolve(y, window, 'full')
b1=np.convolve(x2, window, 'full')*window_size
b2=np.power(np.convolve(x, window, 'full'),2)
alphas=(a1-a2)/(b1-b2)
betas=(np.convolve(y, window, 'full')-alphas*np.convolve(x, window, 'full'))/float(window_size)
alphas=alphas[:-1*(window_size-1)] #numpy array of rolled alpha
betas=betas[:-1*(window_size-1)] #numpy array of rolled beta
請不要只是轉儲代碼沒有一些感嘆號。 – Class 2013-11-13 22:34:07
- 1. 線性迴歸分析 - 滾動行
- 2. 線性迴歸方程ř
- 3. Java線性迴歸
- 4. 線性迴歸scala.MatchError:
- 5. R線性迴歸
- 6. 具有線性迴歸的Gnuplot
- 7. 自迴歸線性迴歸data.frame
- 8. Seaborn:註釋線性迴歸方程
- 9. 2個可變線性迴歸方程
- 10. theano中的線性迴歸
- 11. 無法從Sklearn導入線性迴歸
- 12. 使用遞歸返回無效方法
- 13. 線性迴歸COEF結果有R
- 14. 線性迴歸,Tensorflow,非線性方程,tf.contrib.learn
- 15. 有沒有辦法在ImageJ中繪製線性迴歸?
- 16. 多列滾動迴歸
- 17. 線性迴歸係數
- 18. 多元非線性迴歸
- 19. 線性迴歸與日期
- 20. 線性迴歸問題statsmodel
- 21. python線性迴歸實現
- 22. fminsearch非線性迴歸Matlab?
- 23. 多元非線性迴歸
- 24. 多元線性迴歸
- 25. R中的線性迴歸:變量的無效類型(列表)
- 26. 哪個python迴歸函數用於線性迴歸曲線
- 27. 有迴歸線的Seaborn barplot
- 28. 迴歸中的自定義滾動修復效果
- 29. 分組的迴歸量在方差分析表對多元線性迴歸
- 30. RANSAC線性迴歸(魯棒線配合)
也許搜索Savitzky-Golay過濾器。 – seberg 2013-03-26 12:27:18
我可能會誤解,但是並沒有進行單獨的線性迴歸,也只是'O(n)'?你需要做迴歸的次數:'O(n)',在每次迴歸中都要完成:'O(1)'(假設窗口大小不變) – 2013-03-26 12:35:55
這就是說,如果你使用前面迴歸的結果計算下一個,這是我想要做的,而不是我的意思是單獨的迴歸。 – 2013-03-26 12:56:20