我使用此代码计算此值的高斯核密度
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) 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 图:
但是当系列的元素被修改为:
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) 我试图得到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)
任何帮助将非常感激.已经好几天了!
我需要尽可能精确地找到核密度估计的峰值(连续随机变量的模态值).我可以找到近似值:
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精确函数时已知.如何找到模式的确切值?
我有一个pandas数据框,其中每个观察都有一个日期(作为datetime [64]格式的条目列).这些日期分布在大约5年的时间内.我想绘制所有观测日期的核密度图,其中年份标记在x轴上.
我已经想出如何创建相对于某个参考日期的时间增量,然后创建每个观测值与参考日期之间的小时/天/年数的密度图:
df['relativeDate'].astype('timedelta64[D]').plot(kind='kde')
Run Code Online (Sandbox Code Playgroud)
但这并不是我想要的:如果我转换为年度增量,那么x轴是正确的,但我失去了年内的变化.但是,如果我采用较小的时间单位,如小时或天,x轴标签更难解释.
在熊猫中使这项工作最简单的方法是什么?
我的目的是通过贝叶斯分类器算法找到它的类.
假设,以下训练数据描述了各种性别的身高,体重和脚长
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
我正在尝试绘制二维数据的等高线图。但是,我想手动输入轮廓。我在seaborn.kde文档中找到了“levels”选项,我可以在其中手动定义轮廓的级别。但是,我不知道这些级别意味着什么。该文档给出了这个定义 -
水平对应于密度的等比例。
密度等比是什么意思?有什么我可以阅读的参考资料吗?
我想使用的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多维数据吗?
我现在使用scikit learn和python几天,特别是KernelDensity.一旦模型拟合,我想评估新点的概率.方法得分()是为此而做的,但显然不起作用,因为当我输入数组时,条目1数字是输出.我使用score_samples()但它很慢.
我认为这个分数不起作用,但我没有技能可以帮助它.如果您有任何想法,请告诉我
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) kernel-density ×10
python ×6
pandas ×3
seaborn ×3
matplotlib ×2
r ×2
statistics ×2
contour ×1
gaussian ×1
matlab ×1
naivebayes ×1
scikit-learn ×1
scipy ×1
statsmodels ×1
time-series ×1