在python中查找两个kde图之间的非重叠区域

数据挖掘 Python 特征选择 海运
2022-02-07 11:36:57

我试图根据目标变量的 kde 分布来确定一个特性是否重要。我知道如何绘制 kde 情节并在查看情节后进行猜测,但有更正式的做法吗?比如我们可以计算两条曲线之间不重叠区域的面积吗?

当我搜索两条曲线之间的区域时,有很多链接,但没有一个可以解决我的确切问题。

注意:
此图的主要目的是确定该特征是否重要。所以,如果我在这里遗漏任何隐藏的概念,请进一步建议我。

我要做的是设置一些阈值,例如 0.2,如果non-overlapping area > 0.2,则断言该功能很重要,否则不。

MWE:

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('titanic')

x0 = df.loc[df['survived']==0,'fare']
x1 = df.loc[df['survived']==1,'fare']

sns.kdeplot(x0,shade=1)
sns.kdeplot(x1,shade=1)

输出

在此处输入图像描述

类似链接

1个回答

有不同的方法来衡量两个函数之间的相似性。

一种选择是将两个函数之间的重叠定义为它们的点积:

# ensure both functions are normalized (self-overlap = 1)
x0 /= np.dot(x0, x0)
x1 /= np.dot(x1,x1)
overlap = np.dot(x0,x1)

您可以计算它们的差值并取平均值,而不是像上面那样乘以各个函数值。这类似于机器学习中的损失函数:

d = np.absolute(x0 - x1)
mae = np.mean(d)    # mean absolute error
mse = np.mean(d**2) # mean square error

如果数据在不同的网格上表示,这种方法将不起作用。但是您可以插入您的函数并在一个新的通用网格上表示它们。SciPy 文档中提供了一个基本示例然后可以在上述代码片段中使用内插数据。