Hotelling的T ^ 2和Q循环统计

时间:2015-09-28 08:28:10

标签: matlab loops for-loop pca

所以我一直在使用matlab中的PCA进行数据集中的异常检测 我使用T ^ 2和Q统计进行了降维和异常检测 但是我注意到,当我的代码中出现真正的异常时,错误的数据被用于更新模型。我试图阻止它,但无济于事 这是我的代码:

for i =5:(size(Qlimit))
    if Q(i) > Qlimit(i) && Q(i-1) > Qlimit(i-1) && Q(i-2) > Qlimit(i-2) && Q(i-3) > Qlimit(i-3) && Q(i-4) > Qlimit(i-4)
        for j = i:(i+Xwindow)
             Qlimit(j) = Qlimit(j-1);
             T2limit(j) = T2limit(j-1);        
        end
    end
end

所以我想要发生的是如果Q值大于它的控制限制我想要使用前一个值一定次数(代码中的Xwindow),但是当我这样做时如果它发生在附近最后它会查找不存在的值 我只查找了违反Q统计量的时间,因为T ^ 2仅违反了少量样本而且持续时间不长,但如果我让它适用于Q,则很容易实现T ^ 2。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

首先

if Q(i) > Qlimit(i) && Q(i-1) > Qlimit(i-1) && Q(i-2) > Qlimit(i-2) && Q(i-3) > Qlimit(i-3) && Q(i-4) > Qlimit(i-4)

可以写成

if all(Q(i-4:i) > Qlimit(i-4:i))

如果您担心边缘情况,那么也许您可以尝试:

if all(Q(max(0,i-4):i) > Qlimit(max(0,i-4):i))

我不知道你的问题与PCA有什么关系,我认为你应该更改标题。