我使用高斯过程进行预测。现在让我们假设我已经在 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 distribution
ypred
值是从 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 = 0
和 p > 0.05
。如果你运行上面的代码x = 1 + 2.*rand(1000,1); % sampled from uniform distribution
h
很可能是 1 和 p<0.05
。当然,您可以将整个内容编写为单行代码,以避免创建 m
、 s
和 pd
。关于matlab - 检查天气预测值是否遵循高斯分布或不使用 matlab?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44631894/