2017-04-19 458 views
0

所以我试图在MATLAB上为线性最小二乘模型拟合一个自定义函数。我的数据叫做logprice_hour_seas,看起来像一个复杂的非线性函数,我想用我自定义的函数seasonMatrix来适应,但是要理解MATLAB的MLE是如何工作的,我这样做是愚蠢的,因为seasonMatrix只是一个线性函数。帮助我理解这个代码,这是我从MATLAB的站点复制,以及逻辑(阅读以下)MATLAB简单的MLE解决方案

Times = [0:1/8760:8712/8760]; 
% Calibrate parameters for the seasonality model 
seasonMatrix = @(t) [t]; 
C = seasonMatrix(Times); 
seasonParam = C\logprice_hour_seas; 

现在,我应该有我的模型的一些错误(不少呢!)。但我做logprice_hour_seas-C*seasonParam,这是全零!那么,MLE使用logprice_hour_seas=C*seasonParam来解决,所以这并不奇怪。我不明白什么?

+0

您缺少信息。你不需要有错误,有些模型可以完全适合数据,它只取决于数据。你刚刚说过你使用相同的数据创建数据logprice_hour_seas吗?我的意思是,如果你使用模型创建数据,然后解决它,你显然会得到数据,对吗?没有噪音。你是否犯了[反犯罪](https://arxiv.org/abs/math-ph/0401050)? –

+0

@AnderBiguri没有我使用的模型不适合数据。事实上,如果我选择任何其他模型,就会发生同样的问题。我没有创建数据。 – bissi

+0

您需要向我们展示一个完整的示例,然后 –

回答

0

正如在评论中提到的,你正在搞乱矩阵大小。

你创建你的值的方式seasonParam变成5x26矩阵。和C a 1x26矩阵。你正在模拟一个不确定的方程组,它可以有多种解决方案。

在这种情况下,算法幸运的是,C的一些值为1!这意味着在解决方案(seasonParam)中的所有26 5x1向量中,只需将乘以1的那些向量设置为结果值(logprice_hour_seas)即可完美匹配!因此,您的解决方案seasonParam

0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
5.2560 5.2151 5.2324 5.2224 5.2292 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 
0   0   0   0   0 

整个模型是没有意义的,所以我假定你是刚刚搞乱了尺寸。 请尝试以下操作:

logprice_hour_seas=[5.2560 5.2151 5.2324 5.2224 5.2292]'; 
PriceTimes = [0:1/8760:4/8760]'; 
seasonMatrix = @(t) [sin(2.*pi.*t) cos(2.*pi.*t) sin(4.*pi.*t) cos(4.*pi.*t) t ones(size(t, 1), 1)]; 
C = seasonMatrix(PriceTimes); 
seasonParam = C\logprice_hour_seas; 
+0

是的,尺寸被转置。谢谢。 – bissi

相关问题