4

2 x n 配列を指定して、データセットの線形回帰方程式 (y = mx + c) を見つける最も効率的な方法を見つけようとしています。

基本的に、たとえば X が 50 のときの Y の値を知りたいです。

私の現在の方法には、多くのことが望まれています。

inputData は 2 行 n 列の配列で、最初の列に X があり、2 番目の列に 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 の値を見つけようとして、平均を取得するだけです。これは恐ろしい方法であり、さらに処理にはかなりの時間がかかります。

私が本当に必要としているのは、方程式 y = mx + c... を通じて値を見つけることができるように、X と Y の線形回帰を計算するための堅牢な方法です。

PS。上記の方法では、実際にメモリを事前に割り当て、最後に末尾のゼロを削除しますが、簡単にするためにこの部分を削除しました。

4

1 に答える 1

4

Polyfit は問題ありませんが、問題は少し単純だと思います。2 xn のデータ配列があります。列 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')

あなたを得る必要があります: 推定Y対実際のY

于 2012-02-16T17:57:59.967 に答える