标签: kernel-density

使用高斯核密度(Python)计算值与值的平均值的差异

我使用此代码计算此值的高斯核密度

from random import randint
x_grid=[]
for i in range(1000):
    x_grid.append(randint(0,4))
print (x_grid)
Run Code Online (Sandbox Code Playgroud)

这是计算高斯核密度的代码

from statsmodels.nonparametric.kde import KDEUnivariate
import matplotlib.pyplot as plt

def kde_statsmodels_u(x, x_grid, bandwidth=0.2, **kwargs):
    """Univariate Kernel Density Estimation with Statsmodels"""
    kde = KDEUnivariate(x)
    kde.fit(bw=bandwidth, **kwargs)
    return kde.evaluate(x_grid)

import numpy as np
from scipy.stats.distributions import norm

# The grid we'll use for plotting
from random import randint
x_grid=[]
for i in range(1000):
    x_grid.append(randint(0,4))
print (x_grid)

# Draw points from a bimodal distribution in 1D
np.random.seed(0)
x = np.concatenate([norm(-1, …
Run Code Online (Sandbox Code Playgroud)

python statistics gaussian kernel-density statsmodels

11
推荐指数
1
解决办法
504
查看次数

seaborn:选择的 KDE 带宽为 0。无法估计密度

import pandas as pd
import seaborn as sns

ser_test = pd.Series([1,0,1,4,6,0,6,5,1,3,2,5,1])
sns.kdeplot(ser_test, cumulative=True)
Run Code Online (Sandbox Code Playgroud)

上面的代码生成以下 CDF 图:

系列的 CDF (ser_test)

但是当系列的元素被修改为:

ser_test = pd.Series([1,0,1,1,6,0,6,1,1,0,2,1,1])
sns.kdeplot(ser_test, cumulative=True)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ValueError: 无法将字符串转换为浮点数:'scott'

运行时错误:选定的 KDE 带宽为 0。无法估计密度。

这个错误是什么意思,我如何解决它以生成 CDF(即使它非常倾斜)。

编辑:我使用的是 seaborn 版本 0.9.0

完整的跟踪如下:

ValueError: could not convert string to float: 'scott'

During handling of the above exception, another exception occurred:

RuntimeError                              Traceback (most recent call last)
<ipython-input-93-7cee594b4526> in <module>
      1 ser_test = pd.Series([1,0,1,1,6,0,6,1,1,0,2,1,1])
----> 2 sns.kdeplot(ser_test, cumulative=True)

~/.local/lib/python3.5/site-packages/seaborn/distributions.py in kdeplot(data, data2, shade, vertical, kernel, bw, gridsize, …
Run Code Online (Sandbox Code Playgroud)

python data-visualization kernel-density pandas seaborn

11
推荐指数
2
解决办法
3万
查看次数

从R中的核密度估计中获取值

我试图得到R中股票价格对数的密度估计值.我知道我可以用它来绘制它plot(density(x)).但是,我实际上想要函数的值.

我正在尝试实现核密度估计公式.这是我到目前为止所拥有的:

a <- read.csv("boi_new.csv", header=FALSE)
S = a[,3] # takes column of increments in stock prices
dS=S[!is.na(S)] # omits first empty field

N = length(dS)                  # Sample size
rseed = 0                       # Random seed
x = rep(c(1:5),N/5)             # Inputted data

set.seed(rseed)   # Sets random seed for reproducibility

QL <- function(dS){
    h = density(dS)$bandwidth
    r = log(dS^2)
    f = 0*x
    for(i in 1:N){
        f[i] = 1/(N*h) * sum(dnorm((x-r[i])/h))
    }
    return(f)
}

QL(dS)
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激.已经好几天了!

statistics r kernel-density

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

核密度估计的峰值

我需要尽可能精确地找到核密度估计的峰值(连续随机变量的模态值).我可以找到近似值:

x<-rlnorm(100)
d<-density(x)
plot(d)
i<-which.max(d$y)
d$y[i]
d$x[i]
Run Code Online (Sandbox Code Playgroud)

但是在计算d$y精确函数时已知.如何找到模式的确切值?

r kernel-density

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

如何在熊猫中绘制日期的核密度图?

我有一个pandas数据框,其中每个观察都有一个日期(作为datetime [64]格式的条目列).这些日期分布在大约5年的时间内.我想绘制所有观测日期的核密度图,其中年份标记在x轴上.

我已经想出如何创建相对于某个参考日期的时间增量,然后创建每个观测值与参考日期之间的小时/天/年数的密度图:

df['relativeDate'].astype('timedelta64[D]').plot(kind='kde')
Run Code Online (Sandbox Code Playgroud)

但这并不是我想要的:如果我转换为年度增量,那么x轴是正确的,但我失去了年内的变化.但是,如果我采用较小的时间单位,如小时或天,x轴标签更难解释.

在熊猫中使这项工作最简单的方法是什么?

python time-series matplotlib kernel-density pandas

9
推荐指数
2
解决办法
5288
查看次数

我计算多元核估计时会出现什么问题?

我的目的是通过贝叶斯分类器算法找到它的类.

假设,以下训练数据描述了各种性别的身高,体重和脚长

SEX         HEIGHT(feet)    WEIGHT (lbs)    FOOT-SIZE (inches)
male        6               180             12
male        5.92 (5'11")    190             11
male        5.58 (5'7")     170             12
male        5.92 (5'11")    165             10
female      5               100             6
female      5.5 (5'6")      150             8
female      5.42 (5'5")     130             7
female      5.75 (5'9")     150             9
trans       4               200             5
trans       4.10            150             8
trans       5.42            190             7
trans       5.50            150             9
Run Code Online (Sandbox Code Playgroud)

现在,我想测试一个具有以下属性(测试数据)的人来找到他/她的性别,

 HEIGHT(feet)   WEIGHT (lbs)    FOOT-SIZE (inches)
 4              150             12
Run Code Online (Sandbox Code Playgroud)

这也可以是多行矩阵.


假设,我能够仅隔离数据的男性 …

matlab machine-learning pattern-matching kernel-density naivebayes

9
推荐指数
1
解决办法
290
查看次数

seaborn kde 图中的 level 是什么意思?

我正在尝试绘制二维数据的等高线图。但是,我想手动输入轮廓。我在seaborn.kde文档中找到了“levels”选项,我可以在其中手动定义轮廓的级别。但是,我不知道这些级别意味着什么。该文档给出了这个定义 -

水平对应于密度的等比例。

密度等比是什么意思?有什么我可以阅读的参考资料吗?

python contour kernel-density seaborn

8
推荐指数
1
解决办法
4775
查看次数

使用带有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
查看次数

内核密度得分VS score_samples python scikit

我现在使用scikit learn和python几天,特别是KernelDensity.一旦模型拟合,我想评估新点的概率.方法得分()是为此而做的,但显然不起作用,因为当我输入数组时,条目1数字是输出.我使用score_samples()但它很慢.

我认为这个分数不起作用,但我没有技能可以帮助它.如果您有任何想法,请告诉我

python kernel-density scikit-learn

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

如何以水平方向绘制 pandas kde

kind='kde'Pandas在绘图时提供。在我的设置中,我更喜欢 kde 密度。替代方案kind='histogram'提供了方向选项:orientation='horizontal',这对于我正在做的事情是绝对必要的。不幸的是,orientation不适用于 kde。

至少这是我认为会发生的事情,因为我得到了

in set_lineprops
    raise TypeError('There is no line property "%s"' % key)
TypeError: There is no line property "orientation"
Run Code Online (Sandbox Code Playgroud)

是否有任何直接的替代方法可以像绘制直方图一样轻松地水平绘制kde

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

plt.ion()

ser = pd.Series(np.random.random(1000))
ax1 = plt.subplot(2,2,1)
ser.plot(ax = ax1, kind = 'hist')
ax2 = plt.subplot(2,2,2)
ser.plot(ax = ax2, kind = 'kde')
ax3 = plt.subplot(2,2,3)
ser.plot(ax = ax3, kind = 'hist', orientation = 'horizontal') …
Run Code Online (Sandbox Code Playgroud)

python matplotlib kernel-density pandas seaborn

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