1. 引言:当你手中的尺子“撒谎”时
做数据分析或机器学习时,我们经常需要回答一个问题:“这个数据点离中心有多远?”
通常,你的第一反应是拿出“欧氏距离”(Euclidean Distance)这把尺子:连接两点,勾股定理一算,完事。
但在现实世界的高维数据中,这把尺子经常撒谎。
痛点场景:
假设你在分析某精英社区的居民数据:身高和体重。绝大多数人身高越高,体重越重(正相关)。
现在来了两个人:
A:身高 190cm,体重 40kg(瘦得像根竹竿,极度异常)。
B:身高 160cm,体重 80kg(偏胖,但在人群中还算常见)。
如果你只看几何上的“绝对距离”,A 可能比 B 离人群中心(平均身高体重)更近(因为数值差异可能被量纲掩盖)。由于欧氏距离无视了数据的分布规律(相关性),它会告诉你 A 很正常,而 B 是异常值。
但这显然违背直觉!A 才是那个极度离谱的“数据卧底”。
解决方案:
你需要一把能“看穿”数据内部关系的新尺子——马氏距离。它不仅看距离,还看“队形”。
2. 概念拆解:在“椭圆”里找朋友
为了理解马氏距离,我们先抛开矩阵公式,去一个生活场景里看看。
生活化类比:拥挤的地铁与空旷的广场
想象你在早高峰的地铁站(数据分布):
场景一(圆形分布):
大家站得很散乱,毫无规律。你在圆心,如果你要判断谁离你“更远”,只需拉一根绳子(欧氏距离)量一下即可。因为各个方向的拥挤程度是一样的。
场景二(椭圆分布):
大家都在排队进站,人流形成了一个长条形的队伍(正相关)。
张三:站在队伍的侧面,虽然离你只有 1 米,但他脱离了队伍,显得格格不入。
李四:站在队伍的前后方向,虽然离你 3 米,但他仍在队伍里,显得很自然。
核心逻辑:
在场景二中,顺着队伍方向(相关性方向)的距离“不值钱”,而逆着队伍方向的距离“很值钱”。
欧氏距离是个愣头青,它觉得李四(3米)比张三(1米)远,所以李四是异类。
马氏距离是个老江湖,它看出了队伍的趋势,它认为张三才是那个“破坏队形”的异常值。
图解逻辑
欧氏距离认为数据的“势力范围”是一个正圆。
马氏距离通过计算数据的协方差矩阵,描绘出了数据的真实形状(通常是一个椭圆),并把这个椭圆作为“标尺”。
简而言之:马氏距离 = 修正了坐标轴(消除量纲)+ 考虑了相关性后的欧氏距离。
3. 动手实战:Python 里的“数据侦探”
光说不练假把式。我们用 Python 来模拟刚才的身高体重场景,看看欧氏距离是怎么被骗的,马氏距离又是怎么破案的。
准备工作
假设你已经安装了 numpy, scipy, matplotlib。
如何用马氏距离识别数据中的伪装者?
摘要:1. 引言:当你手中的尺子“撒谎”时 做数据分析或机器学习时,我们经常需要回答一个问题:“这个数据点离中心有多远?” 通常,你的第一反应是拿出“欧氏距离”(Euclidean Distance)这把尺子:连接两点,勾股定理一算,完事。 但在
