Find non overlapping area between two kde plots in python(在Python中查找两个KDE地块之间的非重叠区域)
本文介绍了在Python中查找两个KDE地块之间的非重叠区域的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图根据目标变量的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)
输出
相似链接
- Fill area of overlap between two normal distributions in seaborn / matplotlib
- Python: Overlap between two functions (PDF of kde and normal)
- Fill area between two curves in python
推荐答案
以下是我对问题计算部分的看法:
- 为了比较KDE,需要使用相同的带宽进行计算。(默认带宽取决于x值的数量,这两组值可能不同。)
- 两条正曲线的交点只是它们的最小值。
- 曲线面积可以用梯形法则来近似:
np.trapz
。
以下是转换为一些示例代码和插图的想法:
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde
df = sns.load_dataset('titanic')
x0 = df.loc[df['survived'] == 0, 'fare']
x1 = df.loc[df['survived'] == 1, 'fare']
kde0 = gaussian_kde(x0, bw_method=0.3)
kde1 = gaussian_kde(x1, bw_method=0.3)
xmin = min(x0.min(), x1.min())
xmax = max(x0.max(), x1.max())
dx = 0.2 * (xmax - xmin) # add a 20% margin, as the kde is wider than the data
xmin -= dx
xmax += dx
x = np.linspace(xmin, xmax, 500)
kde0_x = kde0(x)
kde1_x = kde1(x)
inters_x = np.minimum(kde0_x, kde1_x)
plt.plot(x, kde0_x, color='b', label='No')
plt.fill_between(x, kde0_x, 0, color='b', alpha=0.2)
plt.plot(x, kde1_x, color='orange', label='Yes')
plt.fill_between(x, kde1_x, 0, color='orange', alpha=0.2)
plt.plot(x, inters_x, color='r')
plt.fill_between(x, inters_x, 0, facecolor='none', edgecolor='r', hatch='xx', label='intersection')
area_inters_x = np.trapz(inters_x, x)
handles, labels = plt.gca().get_legend_handles_labels()
labels[2] += f': {area_inters_x * 100:.1f} %'
plt.legend(handles, labels, title="U3Vydml2ZWQ/")
plt.title('Fare vs Survived')
plt.tight_layout()
plt.show()
这篇关于在Python中查找两个KDE地块之间的非重叠区域的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:在Python中查找两个KDE地块之间的非重叠区域
猜你喜欢
- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01
- 如何将一个类的函数分成多个文件? 2022-01-01
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01
- python-m http.server 443--使用SSL? 2022-01-01
- 沿轴计算直方图 2022-01-01
- pytorch 中的自适应池是如何工作的? 2022-07-12
- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01