我已经建立了密度函数,现在我想计算一个新数据点"下降"到选定区间的概率(比如,a = 3,b = 7).所以,我正在寻找:
P(a<x<=b)
Run Code Online (Sandbox Code Playgroud)
一些样本数据:
df<- data.frame(x=c(sample(6:9, 50, replace=TRUE), sample(18:23, 25, replace=TRUE)))
dens<- density(df$x)
Run Code Online (Sandbox Code Playgroud)
我会很高兴听到任何解决方案,但最好是在基础r
先感谢您
如何创建一个直方图,显示给定数字x的范围为0-1的概率分布?我希望每个条形<= 1,如果我将每个条形的y值相加,它们应该加起来为1.
例如,如果x = [.2,.2,.8],那么我希望图形显示2个条形图,一个在.2处,高度为.66,一个在.8处,高度为.33.
我试过了:
matplotlib.pyplot.hist(x, bins=50, normed=True)
Run Code Online (Sandbox Code Playgroud)
这给了我一个高于1的条形图的直方图.我不是说那是错的,因为这是诺曼底参数根据文档做的,但是没有显示概率.
我也尝试过:
counts, bins = numpy.histogram(x, bins=50, density=True)
bins = bins[:-1] + (bins[1] - bins[0])/2
matplotlib.pyplot.bar(bins, counts, 1.0/50)
Run Code Online (Sandbox Code Playgroud)
这也给了我的y值总和大于1的柱子.
有人为我的matlab程序发光吗?我有来自两个传感器的数据,我正在kNN分别对它们进行分类.在这两种情况下,训练集看起来像一组总共42行的向量,如下所示:
[44 12 53 29 35 30 49;
54 36 58 30 38 24 37;..]
Run Code Online (Sandbox Code Playgroud)
然后我得到一个样本,例如[40 30 50 25 40 25 30],我想将样本分类到最近的邻居.作为接近度的标准,我使用欧几里德度量,sqrt(sum(Y 2)),其中Y是每个元素之间的差异,它给出了Sample和每个训练集类别之间的距离数组.
那么,有两个问题:
补充:到目前为止我正在使用公式:probability = distance/sum of distances但我无法绘制正确的cdf或直方图.这给了我一些分布,但我看到了一个问题,因为如果距离很大,例如700,那么最接近的类将获得最大的概率,但它是错的,因为距离太大而不能与任何课程相比.
任何帮助或评论都非常感谢.
matlab classification knn euclidean-distance probability-density
我有一个特定的密度函数,我想知道密度函数的表达式的随机变量.
例如,密度函数是:
df=function(x) { - ((-a1/a2)*exp((x-a3)/a2))/(1+exp((x-a3)/a2))^2 }
Run Code Online (Sandbox Code Playgroud)
从这个表达式我想生成1000个具有相同分布的随机元素.
我知道我应该使用逆抽样方法.为此,我使用我的PDF的CDF功能,计算如下:
cdf=function(x) { 1 - a1/(1+exp((x-a3)/a2))
Run Code Online (Sandbox Code Playgroud)
我们的想法是生成均匀分布的样本,然后使用我的CDF函数映射它们以获得逆映射.像这样的东西:
random.generator<-function(n) sapply(runif(n),cdf)
Run Code Online (Sandbox Code Playgroud)
然后用所需数量的随机变量调用它来生成.
random.generator(1000)
Run Code Online (Sandbox Code Playgroud)
这种方法是否正确?
我density对我的数据有一个密度估计(使用函数)learningTime(见下图),我需要找到概率Pr(learningTime > c),即从给定数字c(红色垂直线)到曲线末端的密度曲线下面积.任何的想法?
r probability kernel-density density-plot probability-density
这是一个非常基本的问题,但我似乎无法找到一个好的答案.scipy究竟为什么计算
scipy.stats.norm(50,10).pdf(45)
Run Code Online (Sandbox Code Playgroud)
据我所知,高斯平均50和标准差10的特定值(如45)的概率为0.那么究竟什么是pdf计算?它是高斯曲线下的面积,如果是这样,x轴上的值范围是多少?
我需要生成 2000 个 2D 多元高斯分布样本,其平均值为 [2;3] 且协方差 C = [0.2 0; 0 0.3]在朱莉娅。是否可以使用 Distributions 包中的 MvNormal 函数来做到这一点?
提前致谢。
能够使用它std <random>来生成不同概率分布的随机数很好......现在,有没有办法使用标准库计算给定分布及其参数的一组数字的概率?
我知道我可以为我自己的任何发行版编写概率密度和质量函数(参见下面的单个随机变量示例),但如果可以,我宁愿使用标准库.
long double exponential_pdf(long double x, long double rate) {
if ( x < 0.0 ) {
return 0.0;
}
if ( rate < 0.0 ) {
return NOT_A_NUMBER;
}
auto pdf = rate * exp( - rate * x);
return pdf;
}
Run Code Online (Sandbox Code Playgroud) 我认为这可能部分是一个 R 问题,部分是一个统计问题,所以如果有更好的地方,请原谅(如果是这样,请告诉我在哪里)。
假设我有一个my_measurements这样的数据集:
> glimpse(my_measurements)
Observations: 200
Variables: 2
$ sample_id <int> 18, 22, 30, 59, 74, 126, 133, 137, 147, 186, 189, 195, 203, 248, 294, 303, 320, 324, 353, 3...
$ value <dbl> 0.9565217, 1.0000000, 0.7500000, 0.7142857, 1.0000000, 0.8571429, 1.0000000, 1.0000000, 0.8...
Run Code Online (Sandbox Code Playgroud)
其中每个sample_id都有相应的测量值,该测量值value介于 0 和 1 之间(例如,它们可能是某物的比例)。
它的完整dput()输出是:
structure(list(sample_id = c(18L, 22L, 30L, 59L, 74L, 126L, 133L,
137L, 147L, 186L, 189L, 195L, 203L, 248L, 294L, 303L, 320L, 324L,
353L, …Run Code Online (Sandbox Code Playgroud) 我从两个叠加的正态分布创建了一些数据,然后应用sklearn.neighbors.KernelDensity和scipy.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 bandwith 更改为 0.25,则两种方法的结果看起来大致相同。
python scipy kernel-density scikit-learn probability-density