2015-09-28 118 views
0

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

首先

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有什么关系,但我认为你应该改变标题。

+0

使用PCA降低数据集的维数后,我使用霍特林的T^2和Q统计量来监测系统。 – MRaff16

+0

@ MRaff16那么你的问题是关于“Hotelling的T^2和Q统计”,而不是你已经成功实施的PCA。所以,我认为你应该改变标题。 – Dan

+0

对你更好吗? – MRaff16