[PYTHON] Comment trouver la distance de Maharanobis

Distance de Maharanobis

d=(x-\mu)^T\Sigma^{-1}(x-\mu)

$ x $ est le vecteur pour lequel vous voulez trouver la distance au groupe de données. $ \ Mu $ est la valeur moyenne du groupe de données. $ \ Sigma ^ {-1} $ est l'inverse de la matrice de covariance du groupe de données. En utilisant la décomposition choleskey, l'équation peut être transformée comme suit.

\begin{eqnarray}
d &=& (x-\mu)^T\Sigma^{-1}(x-\mu) \\
  &=& (x-\mu)^T(LL^T)^{-1}(x-\mu) \\
  &=& (L^{-1}(x-\mu))^T(L^{-1}(x-\mu)) \\
  &=& z^Tz
\end{eqnarray}

$ L $ est la matrice triangulaire inférieure obtenue par la décomposition choleskey. Si vous définissez $ z = (L ^ {-1} (x- \ mu)) $ et trouvez ceci, tout ce que vous avez à faire est de calculer le produit interne.

la mise en oeuvre

Implémentez ce qui précède en python.

import numpy as np
from scipy.linalg import solve_triangular

def mahalanobis(x, mu, sigma):
    L = np.linalg.cholesky(sigma)
    d = x - mu
    z = solve_triangular(
        L, d.T, lower=True, check_finite=False,
        overwrite_b=True)
    squared_maha = np.sum(z * z, axis=0)
    return squared_maha

$ L $ se trouve dans linalg.cholesky de numpy. $ z $ se trouve dans linalg.solve_triangular de scipy.

référence

Recommended Posts

Comment trouver la distance de Maharanobis
Comment trouver des fichiers volumineux sous Linux
Comment trouver la zone du diagramme de Boronoi
Comment trouver la corrélation pour les variables catégorielles
Comment utiliser xml.etree.ElementTree
Comment utiliser Python-shell
Remarques sur l'utilisation de tf.data
Grattage 2 Comment gratter
Comment utiliser Seaboan
Comment utiliser la correspondance d'image
Comment utiliser le shogun
Comment installer Python
Comment utiliser Pandas 2
Comment lire PyPI
Comment installer pip
Comment utiliser Virtualenv
Comment utiliser numpy.vectorize
Comment mettre à jour easy_install
Comment installer Archlinux
Comment utiliser pytest_report_header
Comment redémarrer gunicorn
Comment installer python
Comment héberger virtuel
Comment déboguer le sélénium
Comment utiliser partiel
Comment utiliser Bio.Phylo
Comment lire JSON
Comment utiliser x-means
Comment utiliser WikiExtractor.py
Comment mettre à jour Spyder
Comment utiliser IPython
Comment installer BayesOpt
Comment utiliser virtualenv
Comment utiliser Matplotlib
Comment utiliser iptables
Comment utiliser TokyoTechFes2015
Comment utiliser venv
Comment utiliser le dictionnaire {}
Comment utiliser Pyenv
Comment faire pousser des fichiers dot
Comment utiliser la liste []
Comment utiliser python-kabusapi
"Comment compter Fukashigi"
Comment installer Nbextensions
Comment utiliser OptParse
Comment utiliser le retour
Comment installer Prover9
Comment utiliser NumPy
Comment utiliser pyenv-virtualenv
Comment utiliser imutils
[2020.8 dernière] Comment installer Python
Comment trouver le nombre optimal de clusters pour les k-moyennes
Comment estimer la densité du noyau
Comment utiliser Qt Designer
[IPython] Comment partager un bloc-notes IPython
Comment installer Python [Windows]
Comment utiliser la recherche triée
[gensim] Comment utiliser Doc2Vec