# Python(异常值病理检测)胎儿心率和子宫收缩特征距离正常值偏移阈值

{% tabs %}
{% tab title="关键词" %}
Python | 异常值检测 | 胎儿心率 | 心电图 | 子宫收缩特征 | 距离正常值偏移阈值 | NumPy | scipy | 主成分分析(PCA) | 巴塔查亚距离 | geomstats | Matplotlib | pyclustering | scikit-learn | K-最近邻算法
{% endtab %}

{% tab title="梗概" %}
心电图数据集包括由产科医生分类的心脏图上的胎儿心率和子宫收缩特征的测量值。 测量值被归类为正常（内点）或病理（异常点）。

首先，让我们加载心电图数据集并标准化为由异常值检测方法评分的变量。

如果我们快速查看数据，我们可以看到我们将有 21 个解释变量要拟合，每个变量都有 1831 个唯一条目。 在这些条目中，1655 个（\~90%）是异常值，176 个（\~10%）是响应变量中的异常值。

为了正确识别这两个类别，选择正确的异常值检测和异常值阈值方法非常重要。 对于这个数据集，由于探索变量的数量，选择了主成分分析（PCA）无监督异常值检测方法。 该方法通过构造一个由特征向量生成的子空间来降低数据的维度，该特征向量表示仍然可以解释数据的最高方差。 在这种降维过程中，异常值会变得更加明显，并且异常值分数是样本在所有特征向量上的投影距离之和。 对于这个数据集，我们将设置组件的数量从 21 减少到 5。

异常值和阈值方法之间的协同作用通常会提供更好的结果。 这是由于异常值检测方法生成的分数随后由阈值方法处理的方式。 两种方法的行为越相似，出现非理性阈值的可能性就越小。 然而，情况并非总是如此，选择正确的异常值检测和阈值方法可能需要在应用前后进行稳健的统计测试。

对于这个数据集以及异常值检测方法，一个很好的相应阈值方法将是距离正常值偏移 (DSN) 阈值。 此阈值的工作方式是将异常值分数的概率分布与正态分布的概率分布进行比较，并测量两者之间的差异。 使用统计距离时，选择进行测量的度量很重要。 巴塔查亚距离是两个概率分布之间相似性的度量，并返回它们之间存在的重叠量。 从技术上讲，它不是一个指标，但是它将用于对数据集进行阈值处理。巴塔查亚距离定义为，

$$D_{B}(p, q)=-\ln (B C(p, q))$$

其中 $p$ 和 $q$ 表示同一域 $X$ 上的两个概率分布，连续概率分布的巴塔查亚系数 (BC) 可以表示为，

$$B C(p, q)=\int \sqrt{p(x) q(x)} d x$$

最终设置异常值检测分数的阈值，使得任何高于 1 减去巴塔查亚距离的分数都被标记为异常值。

### Python实现
{% endtab %}
{% endtabs %}

{% content-ref url="../zhi-dian-mi-jin-brief" %}
[zhi-dian-mi-jin-brief](../zhi-dian-mi-jin-brief)
{% endcontent-ref %}
