标签: kernel-density

使用带有2维数据的scipy.stats.gaussian_kde

我想使用scipy.stats.gaussian_kde来平滑经度和纬度信息收集了一些离散数据,所以它显示为有点类似于在最后一个等高线图,其中高密度的峰值密度和低密度的山谷.

我很难将二维数据集放入gaussian_kde课堂.我已经玩弄了解它如何与1维数据一起工作,所以我认为2维将是这样的:

from scipy import stats
from numpy import array
data = array([[1.1, 1.1],
              [1.2, 1.2],
              [1.3, 1.3]])
kde = stats.gaussian_kde(data)
kde.evaluate([1,2,3],[1,2,3])
Run Code Online (Sandbox Code Playgroud)

这就是说我有3分[1.1, 1.1], [1.2, 1.2], [1.3, 1.3].我希望在x和y轴上使用宽度为1的1到3进行核密度估计.

创建gaussian_kde时,它一直给我这个错误:

raise LinAlgError("singular matrix")
numpy.linalg.linalg.LinAlgError: singular matrix
Run Code Online (Sandbox Code Playgroud)

查看源代码gaussian_kde,我意识到我正在考虑数据集的含义与维度的计算方式完全不同,但我找不到任何示例代码,显示多维数据如何与模块一起工作.有人可以通过一些示例方法帮助我使用gaussian_kde多维数据吗?

scipy multidimensional-array kernel-density

7
推荐指数
2
解决办法
7551
查看次数

在R中叠加10个密度图,其颜色与重叠图的数量成比例

我有一个包含224900个观测值和10个变量的数据集,它们是不同泰勒级数回归到原始数据值的结果.我希望覆盖这10个变量中每个变量的密度图,以显示泰勒级数反向变换对数据估计的鲁棒性水平.我不认为只有10行,而是应用颜色会很好,因此每个密度图都会产生10%的灰度.如果有数据只与其中一个图相关,那么将有10%灰色,两个图表将是20%的两倍深度,直到所有密度图重叠的位置,这将是100%.

我曾经习惯melt得到一个2249000行的数据帧.有三列,第一列是人物ID,第二列是分组变量(variable),第三列是每日kJ摄入量(value).

我使用以下代码覆盖密度图,ggplot2但它为组使用不同的颜色.如何更改此代码以获得灰度?我希望所有10组具有相同的颜色和颜色密度; 该图的目的仅仅是使用灰度在视觉上显示密度图上的重叠量.

ggplot(Energy, aes(x=value, fill=variable)) + geom_density(alpha = 0.5)
Run Code Online (Sandbox Code Playgroud)

一些测试数据可供那些希望提供帮助的人使用5组而不是10组:

variable <- c(rep("A",100), rep("B",100), rep("C",100), rep("D",100), rep("E",100))
value <- c(rnorm(100,5000,200), rnorm(100,5050,210), rnorm(100,5100,215), 
           rnorm(100,5150,220), rnorm(100,5200,225))
MyData <- cbind.data.frame(value, variable)
ggplot(MyData, aes(x=value, fill=variable)) + geom_density(alpha = 0.5)
Run Code Online (Sandbox Code Playgroud)

我认为答案可能与修改scale_colour_grey和/或相关,scale_manual但我不明白自己能够解决这个问题.

color-scheme r ggplot2 kernel-density

7
推荐指数
1
解决办法
3235
查看次数

大数据KDE非常慢

当我尝试制作散射图时,按密度着色,它需要永远.

可能是因为数据的长度非常大.

这基本上就是我这样做的:

xy = np.vstack([np.array(x_values),np.array(y_values)])
z = gaussian_kde(xy)(xy)
plt.scatter(np.array(x_values), np.array(x_values), c=z, s=100, edgecolor='')
Run Code Online (Sandbox Code Playgroud)

作为附加信息,我必须补充一点:

>>len(x_values)
809649

>>len(y_values)
809649
Run Code Online (Sandbox Code Playgroud)

是否有其他选择可以获得相同的结果,但速度结果更好?

python performance kernel-density

7
推荐指数
1
解决办法
1148
查看次数

密度估计曲线下的计算面积,即概率

density对我的数据有一个密度估计(使用函数)learningTime(见下图),我需要找到概率Pr(learningTime > c),即从给定数字c(红色垂直线)到曲线末端的密度曲线下面积.任何的想法?

在此输入图像描述

r probability kernel-density density-plot probability-density

7
推荐指数
2
解决办法
4357
查看次数

在WxPython面板中嵌入Seaborn图

我想问一下如何在wxPython面板中嵌入一​​个海盗形象.

与这篇文章类似,我想在wxPython面板中嵌入一​​个外部数字.wxPython根据Seaborn的kdeplot函数,我希望GUI 的特定面板根据高斯内核的带宽值绘制数据的密度轮廓,以及数据点的散点图.以下是我希望在面板中绘制的示例:例

到目前为止,我已经设法从一个单独的图中得到我想要的wxPython面板.是否有可能在一个wxPython面板中嵌入一​​个seaborn情节或者应该找到另一种方法来实现我想要的东西?

下面是我的代码的特定部分,在需要时生成绘图:

import seaborn as sns
import numpy as np

fig = self._view_frame.figure

data = np.loadtxt(r'data.csv',delimiter=',')
ax = fig.add_subplot(111)
ax.cla()
sns.kdeplot(data, bw=10, kernel='gau',  cmap="Reds")
ax.scatter(data[:,0],data[:,1], color='r')

fig.canvas.draw()
Run Code Online (Sandbox Code Playgroud)

这部分代码在wxPython面板中绘制了散乱的数据点,并为密度轮廓创建了一个外部图形.但是,如果我尝试ax.sns.kdeplot(...)我得到错误

属性错误:AxesSubplot对象没有属性.sns

我不知道我是否可以在wxPython面板中嵌入Seaborn人物,或者我应该尝试以另一种方式实现它.有什么建议?

提前致谢.

python wxpython matplotlib kernel-density seaborn

6
推荐指数
1
解决办法
964
查看次数

Seaborn 中小提琴图的范围不准确

由于某些原因,绘图的范围不准确。在我的数据中没有负值。

在此输入图像描述

当我将范围设置为 -100 到 100 时,分布的某些部分低于 0 标记。

在此输入图像描述

python matplotlib kernel-density seaborn violin-plot

6
推荐指数
1
解决办法
1698
查看次数

如何仅从直方图值创建KDE?

我有一组要绘制高斯核密度估计值的值,但是我遇到两个问题:

  1. 我只有条形图的值而不是值本身
  2. 我正在绘制分类轴

这是我到目前为止生成的图: 直方图 y轴的顺序实际上是相关的,因为它代表每种细菌物种的系统发育。

我想为每种颜色添加一个高斯kde叠加层,但是到目前为止,我还无法利用seaborn或scipy做到这一点。

这是上面使用python和matplotlib分组的条形图的代码:

enterN = len(color1_plotting_values)
fig, ax = plt.subplots(figsize=(20,30))
ind = np.arange(N)    # the x locations for the groups
width = .5         # the width of the bars
p1 = ax.barh(Species_Ordering.Species.values, color1_plotting_values, width, label='Color1', log=True)
p2 = ax.barh(Species_Ordering.Species.values, color2_plotting_values, width, label='Color2', log=True)
for b in p2:
    b.xy = (b.xy[0], b.xy[1]+width)
Run Code Online (Sandbox Code Playgroud)

谢谢!

python numpy matplotlib scipy kernel-density

6
推荐指数
1
解决办法
729
查看次数

如何标准化 scikit learn 的 kde?

假设我有一个形状为 (100000,1) 的数组,表示 0 到 1 之间均匀分布的变量 X 的样本。我想近似该变量的概率密度,我使用 Scikit-Learn KernelDensity 来做到这一点。

问题是我只得到一个未标准化的结果。概率密度的积分总和不等于1。我应该如何自动归一化?难道我做错了什么 ?

def kde_sklearn(data, grid, **kwargs):
    """
    Kernel Density Estimation with Scikit-learn

    Parameters
    ----------
    data : numpy.array
        Data points used to compute a density estimator. It
        has `n x p` dimensions, representing n points and p
        variables.
    grid : numpy.array
        Data points at which the desity will be estimated. It
        has `m x p` dimensions, representing m points and p
        variables.

    Returns
    -------
    out : numpy.array
        Density estimate. …
Run Code Online (Sandbox Code Playgroud)

python kernel-density scikit-learn

6
推荐指数
1
解决办法
3943
查看次数

使用 R 将四次核热图转换为大多边形

我有欧胡岛海岸附近的点数据。其他人使用这些相同的数据创建了一个大的polygon. 我相信他首先创建了heatmap一个quartic (biweight) kernel,每个点周围半径为 1 公里,像素大小可能为 1 平方公里。他引用了 Silverman(1986 年,第 76 页,方程 4.5,我认为它指的是“统计和数据分析的密度估计”一书)。我相信他将他heatmappolygon. 我正在尝试polygon使用R和用假数据来近似他Windows 10。我可以使用包中的kde函数来接近ks(见下图)。但该软件包仅包含Gaussian kernels. 是否可以polygon使用 a创建类似的quartic kernel

在此处输入图片说明

另一个分析实际上创建了两个版本的polygon. 一个边界被标记为“> 1 每公里密度”;另一个边界被标记为“> 0.5 每公里密度”。我不知道他是否使用RQGISArcGIS或别的东西。我无法创建一个大polygonQGIS,也没有ArcGIS.

感谢您对如何创建任何建议,polygon类似所示的一个,但使用quartic kernel的替代Gaussian kernel。如果我能提供更多信息,请告诉我。

这是我的虚假数据的链接CSVQGIS格式:在此处输入链接描述 …

r polygon heatmap kernel-density density-plot

6
推荐指数
1
解决办法
136
查看次数

使用 scipy 的 gaussian_kde 和 sklearn 的 KernelDensity 进行核密度估计会导致不同的结果

我从两个叠加的正态分布创建了一些数据,然后应用sklearn.neighbors.KernelDensityscipy.stats.gaussian_kde来估计密度函数。然而,使用相同的带宽 (1.0) 和相同的内核,两种方法都会产生不同的结果。有人可以向我解释一下原因吗?感谢帮助。

您可以在下面找到重现该问题的代码:

import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import gaussian_kde
import seaborn as sns
from sklearn.neighbors import KernelDensity

n = 10000
dist_frac = 0.1
x1 = np.random.normal(-5,2,int(n*dist_frac))
x2 = np.random.normal(5,3,int(n*(1-dist_frac)))
x = np.concatenate((x1,x2))
np.random.shuffle(x)
eval_points = np.linspace(np.min(x), np.max(x))

kde_sk = KernelDensity(bandwidth=1.0, kernel='gaussian')
kde_sk.fit(x.reshape([-1,1]))
y_sk = np.exp(kde_sk.score_samples(eval_points.reshape(-1,1)))

kde_sp = gaussian_kde(x, bw_method=1.0)
y_sp = kde_sp.pdf(eval_points)

sns.kdeplot(x)
plt.plot(eval_points, y_sk)
plt.plot(eval_points, y_sp)
plt.legend(['seaborn','scikit','scipy'])
Run Code Online (Sandbox Code Playgroud)

scipy 和 scikit 的 bandwith=1.0

如果我将 scipy bandwith 更改为 0.25,则两种方法的结果看起来大致相同。

scipy 带宽=0.25 和 scikit 带宽=1.0

python scipy kernel-density scikit-learn probability-density

6
推荐指数
1
解决办法
1万
查看次数