密度比估算的python包

densratio的Python项目详细描述


构建状态pypipypicoverage status/p> <H2>1。概述

密度比估计描述如下:对于给定的两个数据 样本x1x2来自未知分布p(x)q(x) 分别估计w(x)=p(x)/q(x),其中x1x2是 三维实数。

估计密度比函数w(x)可用于 应用程序,例如基于内联的异常值检测[1]和 协变量移位适应[2]。密度的其他有用应用 Sugiyama等人总结了比率估计。(2012)在[3]中。

densratio提供一个函数densratio()返回 一种具有估计密度比的方法的物体 compute_density_ratio()

此外,α相对密度比p(x)/(α*p(x)+(1-α)*q(x))(其中α在[0,1]范围内)也可以是 估计。当alpha为0时,这将减少为普通密度比 w(x)。α相对pe散度和kl散度 p(x)q(x)也被计算出来。

 src=

例如,

importnumpyasnpfromscipy.statsimportnormfromdensratioimportdensrationp.random.seed(1)x=norm.rvs(size=500,loc=0,scale=1./8)y=norm.rvs(size=500,loc=0,scale=1./2)alpha=0.1densratio_obj=densratio(x,y,alpha=alpha)print(densratio_obj)

提供以下输出:

#> Method: RuLSIF
#> 
#> Alpha: 0.1
#> 
#> Kernel Information:
#>   Kernel type: Gaussian
#>   Number of kernels: 100
#>   Bandwidth(sigma): 0.1
#>   Centers: matrix([[-0.09591373],..
#> 
#> Kernel Weights (theta):
#>   array([0.04990797, 0.0550548 , 0.04784736, 0.04951904, 0.04840418,..
#> 
#> Regularization Parameter (lambda): 0.1
#> 
#> Alpha-Relative PE-Divergence: 0.6187941335987046
#> 
#> Alpha-Relative KL-Divergence: 0.7037648129307482
#> 
#> Function to Estimate Density Ratio:
#>   compute_density_ratio(x)
#> 

在这种情况下,真密度比w(x)是已知的,因此我们可以比较 w(x)具有估计的密度比w-hat(x)。下面的代码给出 上面显示的绘图。

frommatplotlibimportpyplotaspltfromnumpyimportlinspacedeftrue_alpha_density_ratio(sample):returnnorm.pdf(sample,0,1./8)/(alpha*norm.pdf(sample,0,1./8)+(1-alpha)*norm.pdf(sample,0,1./2))defestimated_alpha_density_ratio(sample):returndensratio_obj.compute_density_ratio(sample)sample_points=np.linspace(-1,3,400)plt.plot(sample_points,true_alpha_density_ratio(sample_points),'b-',label='True Alpha-Relative Density Ratio')plt.plot(sample_points,estimated_alpha_density_ratio(sample_points),'r-',label='Estimated Alpha-Relative Density Ratio')plt.title("Alpha-Relative Density Ratio - Normal Random Variables (alpha={:03.2f})".format(alpha))plt.legend()plt.show()
<H2>2。安装

您可以从 pypi

$ pip install densratio

此外,您还可以从 github

$ pip install git+https://github.com/hoxo-m/densratio_py.git

有关densratio包的源代码,请访问github https://github.com/hoxo-m/densratio_py

<H2>3。细节 <H3>3.1。基础课程

包提供了densratio()。函数返回一个对象 具有计算估计密度比的函数。

对于数据样本xy

fromscipy.statsimportnormfromdensratioimportdensratiox=norm.rvs(size=200,loc=1,scale=1./8)y=norm.rvs(size=200,loc=1,scale=1./2)result=densratio(x,y)

在这种情况下,result.compute_density_ratio()可以计算 密度比。

frommatplotlibimportpyplotaspltdensity_ratio=result.compute_density_ratio(y)plt.plot(y,density_ratio,"o")plt.xlabel("x")plt.ylabel("Density Ratio")plt.show()

 src= <H3>3.2。方法

该软件包通过rulsif方法估计密度比。

rulsif(相对无约束最小二乘重要度拟合) 通过最小化平方估计α相对密度比 真实和估计α相对比率之间的损失。你可以找到 Hido等人的更多信息。(2011)[1]和Liu等人(2013)[4]。

该方法假设α相对密度比表示为 线性核模型:

w(x)=θ1*k(x,c1)+θ2*k(x,c2)+…+tab*k(x,cb) 其中,k(x,c)=exp(-x-c ^2/(2*sigma^2))是高斯分布 径向基函数核。

densratio()执行以下操作:-决定内核参数sigma 通过交叉验证。-优化内核权重theta。-计算 α相对pe散度和kl散度 α相对比率。

因此,您可以获得compute_density_ratio(),这将 计算通过坐标的α相对密度比。

<H3>3.3。结果和参数设置

densratio()输出如下结果:

#> Method: RuLSIF
#> 
#> Alpha: 0
#> 
#> Kernel Information:
#>   Kernel type: Gaussian
#>   Number of kernels: 100
#>   Bandwidth(sigma): 0.1
#>   Centers: matrix([[0.92113356],..
#> 
#> Kernel Weights (theta):
#>   array([0.08848922, 0.03377533, 0.0753727 , 0.06141277, 0.02543963,..
#> 
#> Regularization Parameter (lambda): 1.0
#> 
#> Alpha-Relative PE-Divergence: 0.9635169300831035
#> 
#> Alpha-Relative KL-Divergence: 0.8388266265473269
#> 
#> Function to Estimate Density Ratio:
#>   compute_density_ratio(x)
#> 
  • 方法固定为rulsif。
  • 核类型固定为高斯径向基函数。
  • 内核数是线性模型中的内核数。 您可以通过设置kernel_num参数进行更改。拖欠, 内核数=100
  • 带宽(sigma)是高斯核带宽。默认情况下, sigma="auto",算法自动选择最佳 交叉验证的值。如果您设置一个数字 使用。如果设置sigma数值数组,则算法选择 通过交叉验证获得最佳值。
  • 中心是线性模型中高斯核的中心。 这些是从数据样本中随机选择的 分子分布p(x)。你可以在 result.kernel\u信息中心
  • 核权重(θ)是线性核中的θ参数 模型。您可以在result.theta
  • 中找到这些值。
  • 估计α相对密度比的函数是 命名为compute_density_ratio()
<H2>4。多维数据样本

到目前为止,我们已经处理了一维数据样本xydensratio()允许输入多维数据样本 numpy.ndarraynumpy.matrix,只要它们的尺寸是 同样,

例如,

fromscipy.statsimportmultivariate_normalfromdensratioimportdensrationp.random.seed(1)x=multivariate_normal.rvs(size=3000,mean=[1,1],cov=[[1./8,0],[0,1./8]])y=multivariate_normal.rvs(size=3000,mean=[1,1],cov=[[1./2,0],[0,1./2]])alpha=0densratio_obj=densratio(x,y,alpha=alpha,sigma_range=[0.1,0.3,0.5,0.7,1],lambda_range=[0.01,0.02,0.03,0.04,0.05])print(densratio_obj)

提供以下输出:

importnumpyasnpfromscipy.statsimportnormfromdensratioimportdensrationp.random.seed(1)x=norm.rvs(size=500,loc=0,scale=1./8)y=norm.rvs(size=500,loc=0,scale=1./2)alpha=0.1densratio_obj=densratio(x,y,alpha=alpha)print(densratio_obj)
0

在这种情况下,我们也可以将真密度比与 估计密度比。

importnumpyasnpfromscipy.statsimportnormfromdensratioimportdensrationp.random.seed(1)x=norm.rvs(size=500,loc=0,scale=1./8)y=norm.rvs(size=500,loc=0,scale=1./2)alpha=0.1densratio_obj=densratio(x,y,alpha=alpha)print(densratio_obj)
1

 src=

<H2>5。参考文献

[1]Hido,S.,Tsuboi,Y.,Kashima,H.,Sugiyama,M.,和Kanamori,T.。 使用直接密度比估计的统计异常值检测。 知识和信息系统2011。

[2]Sugiyama,M.,Nakajima,S.,Kashima,H.,von Bünau,P.和Kawanabe, m.模型选择的直接重要性估计及其应用 协变量移位适应的应用。NIPS 2007。

[3]Sugiyama,M.,Suzuki,T.和Kanamori,T.丹斯城市比率估计 机器学习。剑桥大学出版社2012。

[4]Liu,S.,Yamada,M.,Collier,N.,和Sugiyama,M.变更点 基于相对密度比估计的时间序列数据检测 神经网络,2013年。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法使用JAXB配置Moxy   java如何让我的简单Swing telnet客户端正确显示字符?   java中从可运行线程调用主线程的多线程处理   java数据源。EBJ3会话bean中的getConnection()   使用java和正则表达式从xml文件提取值时出现问题   java定制Jersy胡须Mvc   在Java中,“限制并发”是什么意思?   java有没有更干净的方法可以在这里使用Optional,而不在三个地方返回“NA”?   java Tomcat启动,然后崩溃,除非我打电话   java理解客户机和服务器   java时间戳将在视图对象>实体转换期间丢失   如何在java中返回布尔值(基元)?   java使用spring mvc设置日志记录,希望仅对我的代码进行跟踪/调试   用Jackson解析嵌套对象