Skip to content

Instantly share code, notes, and snippets.

@Mekapiku
Last active December 30, 2015 21:49
Show Gist options
  • Save Mekapiku/7890341 to your computer and use it in GitHub Desktop.
Save Mekapiku/7890341 to your computer and use it in GitHub Desktop.
2次元空間上の複数点から平均,標準偏差,相関係数を得て,ある別の点のマハラノビス距離を求めるスクリプト
%
% マハラノビス距離
%
% Date : 2013/12/10
%
%
% mahal_dist
%
% ある点におけるマハラノビス距離を算出
%
% @param vector1 all_x
% @param vector1 all_y
% @param x
% @param y
% @return d
%
function [d] = mahal_dist(all_x, all_y, x, y)
% 全体の平均と標準偏差,相関係数をとる
[x_avg, x_sigma, y_avg, y_sigma, r] = mahal_train(all_x, all_y);
% Debug
x_avg
x_sigma
y_avg
y_sigma
r
% 正規化
u1 = (x - x_avg) / x_sigma;
u2 = (y - y_avg) / y_sigma;
d = sqrt((pow_2(u1) - 2 * r * u1 * u2 + pow_2(u2)) / 1 - pow_2(r));
%
% mahal_train
%
% マハラノビス距離を求めるための
% 全体平均,偏差,相関係数を求める
%
% @param vector1 x
% @param vector1 y
% @return x_avg
% @return x_sigma
% @return y_avg
% @return y_sigma
%
function [x_avg, x_sigma, y_avg, y_sigma, r] = mahal_train(x, y)
% 平均と標準偏差をとる
x_avg = mean(x);
x_sigma = std(x);
y_avg = mean(y);
y_sigma = std(y);
% 相関係数をとる
tmp = corrcoef(x, y);
r = tmp(1, 2);
%
% pow_2
%
% ある数の2乗を返す
%
% @param a
% @return b
%
function [b] = pow_2(a)
b = hypot(a, a);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment