2017-04-19 3 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マトリックスになります。およびC1x26マトリックス。あなたは、複数のソリューションを持つことができる、未定義の方程式系をシミュレートしています。

この場合、幸いにもアルゴリズムのために、Cの値のいくつかは1です!つまり、ソリューション内のすべてのベクトル(seasonParam)のうち、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

関連する問題