特征工程中的分位数(Quantile)处理:大规模数据下的近似算法与实现

特征工程中的分位数(Quantile)处理:大规模数据下的近似算法与实现 大家好,今天我们来聊聊特征工程中一个非常重要且常见的技术:分位数处理,以及在大规模数据场景下的近似算法与实现。分位数在数据分析和特征工程中扮演着关键角色,能够帮助我们理解数据的分布情况,识别异常值,并构建更有价值的特征。但当数据量达到TB甚至PB级别时,精确计算分位数变得非常耗时,甚至不可行。因此,我们需要借助近似算法来高效地估计分位数。 1. 分位数的基本概念与应用 分位数是指将数据集分成相等大小的若干份的数值点。例如,四分位数将数据分成四等份,百分位数将数据分成一百等份。常用的分位数包括: 最小值 (Minimum): 0% 分位数 下四分位数 (Q1, First Quartile): 25% 分位数 中位数 (Median, Q2, Second Quartile): 50% 分位数 上四分位数 (Q3, Third Quartile): 75% 分位数 最大值 (Maximum): 100% 分位数 分位数在特征工程中的应用非常广泛: 异常值检测: 通过比较数据点与分位数之间的距离,可以识别潜在的异常值 …

Redis `HyperLogLog` 原理:基数统计的近似算法与内存优化

各位观众,欢迎来到今天的“Redis HyperLogLog:基数统计的奇妙冒险”讲座! 今天,我们来聊聊Redis里面一个非常酷,但又有点神秘的数据结构——HyperLogLog。 它能帮你解决一个很常见的问题:统计海量数据的基数(distinct count)。 简单来说,就是统计一堆数据里面有多少个不重复的值。 场景回放:你需要统计什么? 想象一下这些场景: 网站每天有多少独立访客(UV)? App每天有多少独立用户? 搜索关键词有多少个不同的用户搜索? 一个大型电商网站,每天有多少不同的商品被浏览? 如果你用传统的方式,比如集合(Set)来存储所有访问过的用户ID,那数据量一大,内存就爆炸了。 比如,你有个网站,每天有几百万用户访问,每个用户ID是64位的整数,那Set就需要占用几百MB甚至几GB的内存。 这还没算其他的开销! 救星登场:HyperLogLog HyperLogLog就是来拯救你的!它是一种概率数据结构,用极小的内存空间就能近似地统计出海量数据的基数。 它牺牲了一点精度,换来了巨大的内存节省。 精度损失通常在百分之几以内,但内存占用却可以减少到原来的几十分之一甚 …