我使用高斯过程进行预测。现在让我们假设我已经在 x 中预测了大小为 1900 X 1 的值存储。现在我想检查它的分布是否遵循高斯分布。我需要这个是为了比较其他方法预测值(如 NN、KNN)的分布函数,以便判断哪个遵循平滑高斯分布函数或正态分布函数

我怎么能做到这一点?如果我能以数值数据的形式得到一些结果,那就更好了。代码写成如下,
m = mean(ypred); % mean of rs = std(ypred); % stdev of rpd = makedist('Normal','mu',m,'sigma',s); % make probability distribution with mu = m and sigma = s[h,p] = kstest(ypred,'CDF',pd); % calculate probability that it is a normal distributionypred 值是从 matlab 的 fitrgp 获得的输出。 ypred 值的示例附在 here

[figure] 2 是测量值和预测值的残差 qq_plot

最佳答案

你可以做一个 One-sample Kolmogorov-Smirnov test :

x = 1 + 2.*randn(1000,1); % just some random normal distributed data, replace it with your actual 1900x1 vector.

m = mean(x); % mean of r
s = std(x); % stdev of r
pd = makedist('Normal','mu',m,'sigma',s); % make probability distribution with mu = m and sigma = s
[h,p] = kstest(x,'CDF',pd); % calculate probability that it is a normal distribution

其中 p 是它遵循正态分布的概率,h = 1 如果以 0.05 的显着性拒绝原假设。由于零假设是“它遵循正态分布”,因此 h = 0 意味着它是正态分布的。

由于 x 在这个例子中是从正态分布中采样的,很可能是 h = 0p > 0.05 。如果你运行上面的代码
x = 1 + 2.*rand(1000,1); % sampled from uniform distribution
h 很可能是 1 和 p<0.05 。当然,您可以将整个内容编写为单行代码,以避免创建 mspd

关于matlab - 检查天气预测值是否遵循高斯分布或不使用 matlab?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44631894/

10-13 06:14