首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >概率密度函数的最小二乘回归但我得到了不正确的维数误差

概率密度函数的最小二乘回归但我得到了不正确的维数误差
EN

Stack Overflow用户
提问于 2022-06-02 21:16:56
回答 1查看 36关注 0票数 0

我试图对这个概率密度函数进行最小二乘回归,但我被提示在matlab中执行.*操作,而不是在计算Astar时执行标准的*操作。当我这样做的时候,我会在我的情节的底部得到奇怪的平行线。

守则:

代码语言:javascript
复制
N = 10000;
mu = 5; sigma = 2;
r = randn(N,1);
x = mu+sigma*r;
bin=mu-6*sigma:0.5:mu+6*sigma;
f=hist(x,bin);
plot(bin,f,'bo'); hold on;
xlabel('bin');
ylabel('f');

y_ = f;
x_ = bin;


H = [ones(length(y_),1),x_'];
Astar = inv(H'*H)*H'.*y_;        % Line in Question
% Astar = inv(H'*H)*H'*y_;       % Initial form, but Matlab prompts to perform .* instead
Ytilde = H*Astar;
plot(x_,Ytilde, 'r-','LineWidth',1)

导致的阴谋:

可能是什么原因?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-04 07:21:56

无论好坏,MATLAB的一些命令返回行向量,还有一些返回列向量。通常(或者几乎总是)统计是以观测向量为列向量进行的。据我所知,这只是一个人在使用某些命令时必须注意的事情。

您的问题来自这样一个事实:y_是行向量,而普通的统计公式假设它是列向量。在“问题中的行”中,如果您使用*y_'而不是.*y_ (即Astar = inv(H'*H)*H'*y_';),则会给出预期的行为。

MATLAB中的冒号操作符生成一个行向量,hist也做同样的事情。这些都是问题的根源。这些问题可以用几种方式解决。

一种方法是在代码的第一部分生成它们时将它们转到另一个位置。另一种方法是在实例化x_y_时转换它们(如下所示)。另一种方法(也可能是最糟糕的方法)是将它们作为行向量,并在每次使用它们时转换它们。总的来说,解决方案将取决于代码的其余部分,最好保持它的一致性。

===

代码语言:javascript
复制
N = 10000;
mu = 5; sigma = 2;
r = randn(N,1);
x = mu+sigma*r;
bin=mu-6*sigma:0.5:mu+6*sigma;
f=hist(x,bin);
figure;
scatter(bin,f); hold on;
xlabel('bin');
ylabel('f');

y_ = f';
x_ = bin';


H = [ones(length(y_),1),x_];
Astar = inv(H'*H)*H'*y_;        % Line in Question
Ytilde = H*Astar;
plot(x_,Ytilde, 'r-','LineWidth',1)

===

还请注意,您仍然得到一条水平线,但y ~= 200。这是预期的,因为曲线是对称的,这也符合MATLAB内置的polyfitpolyval函数。

还请注意,不再建议使用hist

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72482449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档