密度图的密度估计_scikitlearn — 密度估计

密度估计在无监督学习、特征工程和数据建模之中都有应用。一些最流行和最有用的密度估计技术是混合模型,如高斯混合( sklearn.mixture.GaussianMixture ),和基于近邻(neighbor-based)的方法,如核密度估计( sklearn.neighbors.KernelDensity )。在 聚类 这一小节,充分地讨论了高斯混合方法,因为该技术作为一种无监督的聚类方案是很有用的。 密度估计是一个非常简单的概念,大多数人已经熟悉的一种常见的密度估计技术:直方图。

1. 密度估计:直方图

直方图是一种简单的数据可视化,其中定义了箱子(bins),并统计了每个箱子(bins)中数据点的数量。下图左上角的面板中显示了直方图的示例: 0a6f3e32027beae83fe1a6661baa30ef.png 然而,直方图的一个主要问题是:分箱(binning)的选择会对结果的可视化产生不成比例的影响。考虑上图的右上角面板,它在相同的数据上显示了箱子(bin)右移后的柱状图。两种可视化的结果看起来完全不同,可能导致对数据的不同解释。 直观地说,我们也可以把直方图看作一堆块,每个点一个块。通过将块堆叠在适当的网格空间中,我们可以恢复直方图。但是,如果我们不是把块堆在一个规则的网格上,而是把每个块放在它所代表的点中心上,然后把每个位置的总高度相加起来会怎么样呢?这个想法导致了左下角的可视化图的现象。它可能没有直方图那么清晰,但数据驱动块位置的事实意味着它是底层数据更好的表示。 这种可视化是核密度估计的一个例子,在本例中是一个top-hat核(top-hat kernel,即每个点上的一个正方形块)。我们可以使用更平滑的核(smoother kernel)来恢复更平滑的分布。右下角的图显示了一个高斯核密度估计(Gaussian kernel density estimate),其中每个点对总体分布贡献一个高斯曲线(Gaussian curve),其结果是从数据中导出的平滑密度估计,并作为一个强大的非参数点分布模型发挥作用。

2. 核密度估计(Kernel Density Estimation)

scikit-learn中的核密度估计是在 sklearn.neighbors.KernelDensity 估计器中实现的,该估计器使用Ball树或KD树进行有效查询(有关这些问题的讨论,请参见 最近邻 )。尽管上面的例子为了简单起见使用了1D数据集,但是核密度估计可以在任何维度的数据上执行,尽管实际上维度灾难会导致其在高维度上的性能下降。 在下图中,从双峰分布(bimodal distribution)中提取100个点,并显示三种不同内核的内核密度估计值: 61cb48b026725feaddc6781f51719afc.png 从上图中清楚地展示了内核形状如何影响结果分布的平滑度。scikit-learn核密度估计器使用方法如下:
>>> from sklearn.neighbors import KernelDensity>>> import numpy as np>>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])>>> kde = KernelDensity(kernel='gaussian', bandwidth=0.2).fit(X)>>> kde.score_samples(X)array([-0.41075698, -0.41075698, -0.41076071, -0.41075698, -0.41075698,       -0.41076071])
这里我们使用了 kernel='gaussian' ,如上所示,数学上,核是由带宽(bandwidth)参数控制的正函数。给定此核形式,在一组点中处的密度估计由以下公式给出: 这里的带宽(bandwidth )用作平滑参数,控制结果中偏差(bias)和方差(variance)之间的权衡。大带宽导致非常平滑(即高偏差,high-bias)的密度分布。小带宽导致密度分布不均匀(即高方差,high-variance)。 sklearn.neighbors.KernelDensity 实现了几种常见的内核形式,如下图所示: 51ce316e83d60c68b776604791e6659e.png 这些内核的形式如下:
  • 高斯核 (kernel = 'gaussian')
  • tophat内核 (kernel = 'tophat')
  • Epanechnikov 内核 (kernel = 'epanechnikov')
  • 指数核 (kernel = 'exponential')
  • 线性核 (kernel = 'linear')
  • 余弦核 (kernel = 'cosine')
核密度估计器可以与任何有效的距离度量标准一起使用(有关可用度量标准的列表,请参见 sklearn.neighbors.DistanceMetric ),尽管仅对欧几里德度量标准的结果进行了适当的标准化,但一种特别有用的度量标准是 Haversine距离 ,它测量球体上各点之间的角距离。下面示例中,使用了核密度估计来可视化地理空间数据,南美洲大陆上两个不同物种的观测分布如下: 66d7a9e8ca4d313bef15759d7b76d6e1.png 核密度估计的另一个有用的应用是学习数据集的非参数生成模型,以便有效地从该生成模型中绘制新样本。下面是一个使用此过程创建一组新的手写数字的示例,使用在数据的PCA投影上学到的高斯核: 826f1e98e9e60b7b499cbb9577c77639.png “新”数据由输入数据的线性组合组成,并在给定KDE模型的情况下按概率给出权重。 示例
  • 简单的一维核密度估计:一维简单核密度估计的计算。
  • 核密度估计: 使用核密度估计学习手写数字数据的生成模型,并从该模型中绘制新样本的示例。
  • 物种分布的核密度估计: 使用Haversine距离度量标准可视化地理空间数据的核密度估计示例

文壹由“伴编辑器”提供技术支持

☆☆☆为方便大家查阅,小编已将scikit-learn学习路线专栏 文章统一整理到公众号底部菜单栏,同步更新中,关注公众号,点击左下方“系列文章”,如图:

0d84ebdfc4e4383cdc53682d4de470e6.png

欢迎大家和我一起沿着scikit-learn文档这条路线,一起巩固机器学习算法基础。(添加微信:mthler备注:sklearn学习,一起进【sklearn机器学习进步群】开启打怪升级的学习之旅。)

a6ef74027b7b6c70c275643743f92ad1.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值