MATLAB:线性回归

MATLAB:线性回归,matlab,linear-regression,Matlab,Linear Regression,我正试图找出一种最有效的方法来找到一个数据集的线性回归方程(y=mx+c),给定一个2×n数组 基本上我想知道当X是,例如,50时Y的值是多少 我目前的方法还有很多需要改进的地方: inputData是我的2×n数组,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

我正试图找出一种最有效的方法来找到一个数据集的线性回归方程(y=mx+c),给定一个2×n数组

基本上我想知道当X是,例如,50时Y的值是多少

我目前的方法还有很多需要改进的地方:

inputData是我的2×n数组,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=50
对于i=1:inputData数组中每行的大小(inputData,1)%
如果(输入数据(i,1)x-5)%
ArrayOfCloseyValue(i)=输入数据(i,2);%将另一个位置添加到数组中
结束
结束
y=平均值(arrayOfCloseYValues)%取平均值以找到y
正如您所看到的,我上面的方法只是试图找到Y的值,该值在给定X值的5范围内,并获得平均值。这是一个可怕的方法,而且它需要绝对的时间来处理

我真正需要的是一个稳健的方法来计算X和Y的线性回归,这样我就可以通过方程Y=mx+c找到值


在我上面的方法中,我确实预先分配了内存,并在最后删除了尾随的零,但为了简单起见,我删除了这一部分。

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')
你应该得到:

您是否阅读了有关线性回归的Matlab文档?我有,但我看不出“polyfit”实际返回的是什么-它给出了两个值,但文档没有说明它们是否预测了输入数据的第一个或第二个值..?我将假设这两个值是“m”和“c”,作用于提供的第二个变量,即“y”。因此,如果我想找到“x”,我需要x=my+c,在polyfit()函数中反转“x”和“y”…事实上,这也不起作用。如果有人能帮忙,我将非常感激!这是给出y=Ax+b还是y=bx+c?另外,c包含三个值。我相信你知道你在这里做了什么,但我无法计算出变量与什么有关:(好的,这给出了
y=c(1)*x+c(2)
所以
m=c(1)
b=c(2)
作为变量。抱歉,我希望我有更多的意义。我也会尝试添加到我以前的帖子中