2017-04-19 21 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을 수행하며 이것은 모두 0입니다! 음, 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입니다. 즉, 솔루션의 벡터에있는 모든 벡터의 5x1 (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