2012-02-16 2 views
4

2 x n 배열을 사용하여 데이터 집합에 대한 선형 회귀 방정식 (y = mx + c)을 찾는 가장 효율적인 방법을 찾으려고합니다. ,MATLAB : Linear regression

inputData 제 2 n 개의 배열입니다 :

는 기본적으로 나는 50

내 현재의 방법은 원하는 수 많은 나뭇잎, X는, 예를 들면, 때 Y의 값이 무엇인지 알고 싶어 첫 번째 열에 X가 있고 두 번째 열에 Y가 있습니다.

x = 50 

for i = 1 : size(inputData,1) % for every line in the inputData array 
    if (inputData(i,1) < x + 5) | (inputData(i,1) > x - 5) % if we're within 5 of the specified X value 
     arrayOfCloseYValues(i) = inputData(i, 2); % add the other position to the array 
    end 
end 
y = mean(arrayOfCloseYValues) % take the mean to find Y 

위에서 볼 수 있듯이 위의 방법은 주어진 X 값 중 5 개 이내의 Y 값을 찾고 해당 값을 얻으려고 시도합니다. 이것은 끔찍한 방법이며, 처리하는 데 절대적으로 오래 걸립니다. I는 식 Y = MX + C를 통해 값 ...

PS를 찾을 수 있도록 정말 필요한 것은

는 X 및 Y에 대한 선형 회귀 계산을위한 강력한 방법이다. 위의 방법에서는 실제로 메모리를 미리 할당하고 끝에 0을 제거하지만이 부분을 단순화하기 위해 제거했습니다.

+0

당신이 선형 회귀에 대한 Matlab의 문서를 읽을 수 있나요? http://www.mathworks.co.uk/help/techdoc/data_analysis/f1-5937.html –

+0

'polyfit'이 실제로 반환하는 것을 볼 수는 없지만 두 값을 제공하지만 문서는 그렇지 않습니다. 그들이 입력 데이터의 첫 번째 또는 두 번째 값을 예측하는지 여부를 말하십시오. – CaptainProg

+0

두 값이 'm'과 'c'라고 가정하고, 두 번째 변수에 'y'가 작용한다고 가정합니다. 따라서 'x'를 찾고 싶다면 polyfit() 함수에서 'x'와 'y'를 반대로하여 x = my + c가 필요합니다 ... – CaptainProg

답변

4

Polyfit은 문제가 없지만 조금 더 간단하다고 생각합니다. 데이터의 배열은 2 x n입니다. 열 1이 y이고 열 2가 x라고 가정 해 봅시다 :

y = inputData(:,1); 
x = inputData(:,2); 
b = ones(size(inputData)); 
A = [x b]; 
c = A\y 

기울기와 오프셋에 대한 최소 제곱 회귀를 제공해야합니다.

여기를 테스트하는 또 다른 방법이있다 :

x = transpose(0:10); 
y = 0.5*x + 1 + 0.1*randn(size(x)); % as a test, m = 0.5, b=1, and add some noise 
A = [x ones(size(x))]; 
c = A\y; 
yest = c(1)*x + c(2); 
plot(x,yest,x,y) 
legend('y_{est}','y') 

당신에게 얻을해야 : Estimated Y v Actual Y

+0

y = Ax + b 또는 y = bx + c입니까? – CaptainProg

+0

또한 c는 세 개의 값을 포함합니다. 나는 당신이 여기서 한 일을 알고있을 것이라고 확신하지만, 변수들과 관련된 것들을 해결할 수는 없다 : ( – CaptainProg

+2

이것은'y = c (1) * x + c (2)'를 준다. 그래서'm = c (1)'와'b = c (2)'를 변수로 사용합니다. 혼란스러워서 더 이해하기 쉽도록 노력하겠습니다. – macduff