LoginSignup
3
2

More than 5 years have passed since last update.

MATLABでのAngle-Based Outlier Detection(ABOD)法の実装

Last updated at Posted at 2015-11-17

高次元データに対してもロバストな外れ値検出アルゴリズムである、Angle-Based Outlier Detection法のMATLABでの実装を以下に示します。

ABOD法とはベクトル同士のなす角を利用した外れ値検出手法です。
ある点からすべての組み合わせのある二点へのベクトルのなす角のバラつきを求めています。
したがってその分散の値が小さな値であるほど、その点が外れ値であることになります。

なお、計算量が$O(dn^3)\ \ \ [d=dimension,n=number\ of\ rows]$ となっており、nの値が増えるとかかる時間が激増しますので、あまり大きなデータに対しては適用しにくい感があります。

2015-11-17追記
下記のコードに重大な誤りがある可能性がありますので、使用しないでください。申し訳ありません。
→誤りはありませんでした

abod.m
function [abof] = abod(X)
    n = size(X);
    d = n(2);
    n = n(1);
    res = zeros(n,1);
    for i = 1:n
        Y = X - repmat(X(i,:),n,1);
        temp = Y.^2;
        s = sum(temp,2);
        s = repmat(s,1,d);
        Y = Y./s;
        Y(isnan(Y))=0;
        res(i) = compAngvar(Y);
    end
    abof = res;
end

function [anglevar] = compAngvar(Y)
    tmp = Y * Y';
    s  = tril(tmp,-1);
    [r,c,v] = find(s);
    anglevar = var(v);
end
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2