密度比估算的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仿射变换以旋转通用路径   IntelliJ IDEA中的java代码标记为编译器错误,在Eclipse中可以正常工作   java ArrayList的containsAll返回了错误的值   如何在安卓中的片段活动中添加java代码   java通过使用netbeans调用jbutton,将带有行的jbutton添加到jtable中   java在更新arrayAdapter/listView之前更新最终列表   java如何在另一个项目中导入包含AspectJ方面和注释的项目   为什么我的java布尔测试总是失败?   Eclipse中的java自动激活   在Bluetooth for Java(更具体地说是Android)之上是否有TCP/IP协议栈实现?   java Android Studio通过intent传递ArrayList并填充ListView