IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者
首页 / 标点符
IT 2019-03-25 23:27:39 / 累计浏览 3,680

机器学习算法之LightGBM

这篇讲的是GBDT模型的又一个高效实现:LightGBM。文章没有停留在简单介绍,而是从“既然XGBoost已经很好,为什么还需要LightGBM”这个问题切入,详细拆解了后者在工程上为应对海量数据所做的核心优化。 作者对比了两者的关键差异:XGBoost采用预排序算法,虽然精确但内存与时间开销巨大;LightGBM则引入了直方图算法,将连续特征离散化,使内存消耗降为原来的1/8,计算复杂度也从O(#data*#features)大幅优化。同时,它还摒弃了传统的按层生长策略,改用带有深度限制的按叶子生长,进一步提升了效率。 文章通过实验数据直观展示,这些改进让LightGBM的训练速度提升近10倍,内存占用仅为XGBoost的1/6,且准确率有所提高。这对于处理工业级大规模数据,同时追求模型性能与资源效率的场景,提供了非常切实的解决方案。全文对技术动机和实现原理的剖析,对于想理解模型“快”与“准”如何兼得的工程师很有启发。

本机暂存
IT 2019-01-01 20:44:30 / 累计浏览 2,560

图数据库简介

这篇讲的是图数据库的核心概念与适用场景。作者从NoSQL的大家族中引出图数据库,指出它用节点和边来存储高度关联的数据,比如社交网络中用户之间的关注关系。文章重点解释了当前流行的“带标签的属性图”模型,节点和边都可以拥有多个属性和标签,这使得数据建模非常灵活。 文章将图数据库与传统关系数据库进行了对比。核心差异在于:关系数据库擅长处理结构规整的事务,但在进行多层、反向的关联查询(比如“谁的朋友的朋友买了什么”)时,会产生大量表连接,导致性能骤降。而图数据库将节点和关系视为一等公民,采用原生存储和双向指针,使得这类复杂关系遍历的查询速度能保持在很高水平。 因此,作者得出的结论是,图数据库并非要取代关系型数据库,而是为社交网络、推荐系统等依赖复杂关系图谱的场景提供了更高效的解决方案。它的优势在于更自然的数据建模、更快的关联查询性能以及更灵活的Schema调整。

本机暂存
IT 2018-09-20 21:51:35 / 累计浏览 3,580

一维数组的聚类

这篇讲的是如何更智能地划分一维数据的区间。作者从分析订单价格分布的实际问题出发,指出简单按固定梯度(如每100元)划分可能忽视数据中天然存在的“分隔点”(比如Airbnb房价分布),导致分组不自然。 文章详细比较了三种解决一维聚类的方案。首先是将数据reshape成二维后使用通用的K-Means算法。其次是专门针对一维数据的Jenks Natural Breaks自然断点法,它通过最小化类内方差之和来寻找最佳分界点,并探讨了使用GVF指标来确定最优聚类数K的经验方法。第三种是利用核密度估计,通过寻找概率密度曲线的极值点(波峰与波谷)来自动划分数据。作者不仅阐述了原理,还提供了Python实现代码,清晰地展示了如何运用Jenks算法计算GVF值,以及如何用KDE寻找数据的自然断裂处。整个对比有助于读者根据数据特点和分析需求,选择最合适的区间划分工具。

本机暂存
IT 2018-07-05 14:00:16 / 累计浏览 3,680

相似度计算之兰氏距离

这篇讲的是相似度计算中的兰氏距离,也被称为堪培拉距离,它被认为是曼哈顿距离的加权版本。作者从定义公式出发,展示了兰氏距离如何通过绝对差值除以绝对值之和来计算两个向量间的距离,公式为 \( d(\mathbf{p}, \mathbf{q}) = \sum_{i=1}^{n} \frac{|p_i - q_i|}{|p_i| + |q_i|} \)。 兰氏距离有几个关键特性:它对接近于零(大于等于零)的值的变化非常敏感,这使得它在处理包含小数值的数据时特别有用。同时,与马氏距离类似,兰氏距离对数据的量纲不敏感,无需标准化即可处理不同尺度的变量。不过,它假定变量之间相互独立,没有考虑变量间的相关性,这在某些复杂数据场景下可能限制其应用。相比之下,曼哈顿距离更简单但缺乏加权机制,而马氏距离能捕捉相关性但计算更复杂。 文章还提供了Python实现,代码简洁地通过循环累加每个维度的距离贡献,并处理了零值情况。这种实现突出了兰氏距离在实际编程中的易用性,适合快速集成到数据分析流程中。整体上,这篇文章清晰地剖析了兰氏距离的核心概念、优缺点和实际应用,帮助读者理解它在选择距离度量时的独特价值。

本机暂存
IT 2018-07-04 23:47:09 / 累计浏览 3,340

常见相似度计算方法回顾

这篇技术博客系统梳理了数据科学和机器学习领域常见的五种相似度度量方法,为相关从业者提供了一个清晰的快速参考。文章从基础的空间距离概念出发,依次回顾了欧几里得距离(直观的直线距离)、曼哈顿距离(各坐标轴绝对差值之和)、闵氏距离(前两者的泛化形式)、余弦相似度(衡量向量方向差异而非长度)以及杰卡德相似度(基于集合的交并比)。 每种方法都配有形象的示意图和简洁的Python实现代码,使得理论概念与实践应用得以紧密结合。作者不仅解释了各自的数学定义,还隐含了它们的应用倾向:例如,欧氏距离适用于空间聚类,余弦相似度常用于文本向量比较,而杰卡德相似度则擅长处理离散的集合数据。 整体而言,这是一篇非常实用的“备忘录式”文章。它没有深入推导公式,而是通过清晰的对比和可运行的代码,帮助读者快速重温或上手这些关键工具,尤其适合需要在不同场景下选择合适度量方法时进行查阅。

本机暂存
IT 2018-07-04 23:45:09 / 累计浏览 3,200

相似度计算之马氏距离

这篇讲的是马氏距离(Mahalanobis Distance)。作者首先指出了它和常见的欧氏距离的本质区别:马氏距离通过引入协方差矩阵,巧妙地“吸收”了数据各维度之间的相关性,并且不受量纲(测量单位)影响。 文章的核心在于解释它如何工作。简单说,马氏距离可以看作是将原始数据投影到由协方差矩阵定义的“标准化”空间后的欧氏距离。文中用了一个直观的图示:在椭圆形的等高线分布中,红点到黑点的欧氏距离小于绿点到黑点,但若考虑数据分布的相关性,马氏距离的结论可能正好相反。这清晰地展示了它在处理特征相关时的威力。 文章不仅梳理了方差、协方差等前置概念,给出了严谨的数学定义,还提供了完整的Python计算示例,使用的是跨国数据。最后,作者总结了马氏距离的优点(如排除相关干扰、满足距离公理)和一个潜在缺点(可能夸大微小变化变量的作用)。 从理论概念、直观图解到代码实践,这篇文章为理解这个重要的相似度度量工具提供了一个相当完整的入口。

本机暂存
IT 2018-07-04 23:44:26 / 累计浏览 2,240

相似度计算之切比雪夫距离

这篇讲的是相似度计算中的切比雪夫距离,文章从国际象棋中国王的走法这个生动例子切入,解释了这种距离也被称为“棋盘距离”的由来——即两点间坐标差的最大值。 作者从二维平面的定义出发,将其推广到n维向量空间,并点明了它与闵可夫斯基距离的深层联系:切比雪夫距离是p趋向无穷大时的闵可夫斯基距离。文章还提供了清晰的Python实现代码,方便读者直接上手应用。 尤为精彩的是后半部分对切比雪夫距离与曼哈顿距离的对比。两者定义看似不同,但作者通过几何直观展示了它们的相互转化关系:将代表曼哈顿距离的正方形旋转45度并缩放,即可得到代表切比雪夫距离的正方形。这种视角揭示了不同距离度量在本质上的内在关联,有助于读者更灵活地选择和使用合适的距离计算方法。

本机暂存
IT 2018-07-04 12:06:56 / 累计浏览 2,320

用户模型之三户模型

这篇讲的是电信与互联网系统中常用的“三户模型”。作者从eTOM框架出发,梳理了客户(Customer)、用户(User)和账户(Account)这三个核心实体如何以“以客户为中心”的理念进行构建与区分。 关键在于厘清三者的边界:客户体现社会域信息,是自然人或法人的实体身份,即使不使用业务也客观存在;用户体现业务域信息,是客户登录和使用产品的账号实例;账户则体现资金域信息,负责交易记账。它们之间是归属与映射关系,但各自独立。 文章以电信业务为例具体说明:一个客户(张三)可以开通多个用户(如手机和宽带),这些用户又由一个或多个账户来付费,形成了灵活的映射。在互联网实践中,客户归并(如通过身份证号识别同一人)、用户的生命周期管理(从注册到销户的复杂流程)、以及账户的多样化建模(支付、结算、风控等需求),都围绕这套模型展开,以支撑起以客户为中心的业务管理与数据统计。

本机暂存
IT 2018-07-04 10:46:03 / 累计浏览 3,340

密度聚类算法之OPTICS

这篇讲的是密度聚类算法OPTICS。它出发点是为了解决经典DBSCAN算法对邻域半径Eps和最小点数minPts这两个参数过于敏感的痛点。OPTICS作为DBSCAN的扩展,核心优势在于让聚类过程对半径参数Eps不再敏感,只需设定好minPts,轻微的Eps变化就不会干扰最终的聚类结构。 为了达成这一点,文章解释了两个关键新定义:核心距离和可达距离。核心距离是一个点成为核心对象所需的最小半径;可达距离则结合了核心距离,决定了点在排序中的位置。算法并不直接输出簇,而是通过维护“有序队列”和“结果队列”,生成一个基于可达距离的样本点排序。这个排序信息非常丰富,从它可以推导出在不同参数设置下DBSCAN的聚类结果。 最终,我们可以将这个排序可视化:以输出次序为横轴,可达距离为纵轴绘图。图中的“山谷”代表簇,谷越深簇越紧密;平坦区域或凸起则可能对应噪声。通过设定一个距离阈值切割这个图,就能灵活提取出聚类结构。文章最后还提及了OPTICS在异常检测、子空间聚类等方向的扩展算法。

本机暂存
IT 2018-07-03 14:20:49 / 累计浏览 1,980

用户调研之微软产品反应卡片

这篇讲的是微软在2002年推出的一种专门测量产品“合意性”的用户调研方法,叫做“产品反应卡片”。 它的核心操作非常直观:给用户一套包含118个情感词汇的卡片,比如“有吸引力的”、“令人挫败的”、“创新的”等等,让用户在体验产品或设计后,挑选出他们认为最能描述的词语,并解释选择的理由。这个方法跳出了单纯的功能可用性测试,直接捕捉用户对产品的情绪反应和整体感受。 从文章提供的完整词汇列表来看,这118张卡片覆盖了从积极到消极的广泛情感光谱,能帮助团队快速定位设计在用户心中引发的复杂情绪,而不仅仅是“好用”或“不好用”。它非常适合在产品原型或早期设计阶段使用,用来评估设计的方向是否与期望传递的品牌感或体验目标一致。

本机暂存
IT 2018-06-28 12:09:18 / 累计浏览 3,260

聚类算法之ISODATA

聚类算法中的K-Means虽然经典,但需要预先设定簇数K且对初始中心敏感。这篇讲的是ISODATA算法,它作为一种迭代自组织数据分析方法,核心改进在于让聚类过程能够动态调整簇的数量。 文章指出,ISODATA在K-Means基础上引入了“合并”与“分裂”两个关键操作:当两个簇中心过于接近时进行合并,而当一个簇内部样本过于分散或数量过多时则尝试将其分裂。算法需要用户提供几个关键参数,如预期的初始簇数、允许的最小样本数、方差阈值等,这些参数共同划定了簇数量最终可能变化的范围(通常在初始设定值的半倍到两倍之间)。 作者也点明了ISODATA的一个现实困境:虽然原理直观地解决了“K值设定”难题,但由于需要调整的参数较多,且部分阈值难以准确指定,这使得它在实际应用中反而不如更简单的K-Means受欢迎。文章通过对比K-Means,清晰阐述了ISODATA的机制与适用边界。

本机暂存
IT 2018-06-26 12:36:07 / 累计浏览 2,760

K-Means算法之K值的选择

这篇讲的是K-Means聚类中一个经典又棘手的问题:当数据维度高、无法肉眼观察时,该如何确定聚类数K? 作者从最简单的“拍脑袋法”开始,比如用样本量估算,快速过渡到更可靠的方法。重点介绍了两种实用技术:一是直观的“肘部法则”,通过绘制K值与误差平方和的关系曲线,寻找拐点来确定最佳K值;但作者也指出,当拐点不明显时,这个方法就失效了。因此,文章引入了斯坦福大学提出的“间隔统计量”方法,它通过蒙特卡洛采样构建参考分布,进行更严谨的统计推断来选择K值。 文章不仅清晰解释了原理和公式,还直接附上了两种方法的Python实现代码。整体来看,它把从经验法则到统计方法的演进路径讲得很清楚,并且提供了实操性强的工具,帮助你在面对不同数据时,做出更合理的选择。

本机暂存
IT 2018-06-26 12:30:23 / 累计浏览 2,840

聚类算法之Mean Shift

这篇讲的是Mean Shift聚类算法。它从大家熟悉的K-Means算法出发,指出了其需要预先设定聚类个数k的局限,从而引出Mean Shift的核心优势:不需要预设类别数量,能自动发现数据的簇结构。 文章梳理了算法的发展脉络,从Fukunage提出概念,到Yizong Cheng引入核函数与权重系数进行关键改进,使得算法能根据样本距离赋予不同权重,更加精确。接着,文章列举了Mean Shift在多个领域的成功应用,包括图像平滑、分割、目标跟踪等计算机视觉任务,以及常规的用户聚类等场景。 其理论部分清晰地解释了Mean Shift向量的含义——即邻域内所有点相对于中心点的偏移均值,并通过迭代移动直至收敛来找到密度峰值。文章进一步阐述了核函数如何度量不同样本的贡献,使得算法原理更加完善。整体上,文章将Mean Shift定位为一种基于密度估计、迭代寻优的实用聚类工具,尤其适用于类别未知的复杂数据分析。

本机暂存
IT 2015-03-26 13:34:46 / 累计浏览 3,920

Hermes:来自腾讯的实时检索分析平台

这篇讲的是腾讯数据平台部推出的实时检索分析平台Hermes。它瞄准的是一个非常具体的痛点:当数据量达到千亿级别、维度上万时,如何还能做到秒级响应的多维交互式分析。 Hermes为营销分析、系统运维监控、长期趋势分析以及探索性分析等场景提供了一套完整方案。它的核心思路在于,针对海量数据重新设计了存储和计算引擎。例如,通过嵌套列存储、位图计算、前缀压缩等技术,有效规避了传统数据库和早期搜索引擎在超大规模索引下内存消耗大、扩容困难、恢复慢的问题。文章特别将Hermes与Solr、ElasticSearch做了定位对比:后者更擅长小规模数据的全文检索,而Hermes则为亿级到万亿级的数据仓库提供索引支持与即席分析能力,旨在成为数据仓库的高效分析层。 本质上,Hermes是在大数据领域,为“即查即所见”的敏捷分析体验提供的一个经过生产验证的基础设施选型参考。

本机暂存
IT 2015-01-04 23:18:57 / 累计浏览 1,980

HLLC基数估算算法在腾讯数据仓库TDW中应用

这篇讲的是腾讯数据仓库TDW如何用一个巧办法,又快又省地计算海量数据里的“不同值个数”(基数)。背景很实际:传统精确去重在大数据面前太耗资源了。文章的核心方案,是引入了HLLC(HyperLogLog Counting)基数估算算法,并将其封装成一个极其简单的SQL聚合函数`est_distinct`。 文章不仅告诉你“是什么”,还深入拆解了“怎么做”。从HQL如何翻译成MapReduce作业,到Map端如何用一个64K桶的数组进行局部聚合,再到Reduce端如何合并数组并套用HLLC公式计算,整个过程图文并茂。其中的难点和巧妙之处在于内存管理:当数据分布不均、单个Key记录海量时,TDW采用“分而治之”策略动态分配内存块,并设计了专用的序列化(SerDe)方式来高效处理溢写到磁盘的Hash表片段,有效平衡了内存与IO开销。 最后通过实测对比给出了明确结论:在数据分布集中的较理想条件下,使用64K桶的HLLC估值计算(精度超99.4%),相比精确去重能带来数倍的效率提升。对于需要在大规模数据上快速获得近似唯一值计数的场景,这提供了非常清晰且可落地的实践参考。

本机暂存
IT 2015-01-04 23:13:34 / 累计浏览 2,720

大规模Hadoop集群在腾讯数据仓库TDW的实践

这篇讲的是腾讯数据仓库TDW如何将多个小集群合并为单个超大规模Hadoop集群的实战。作者从集群碎片化导致的数据共享困难、资源利用率低以及运维成本高等痛点出发,剖析了从400台节点扩展到4000台时遇到的核心挑战——Hadoop的单点瓶颈。 为解决JobTracker的调度瓶颈,他们借鉴YARN和Corona,将计算引擎重构为三层架构。关键优化包括将单路心跳拆分为任务和资源两路心跳,引入细粒度的资源管理概念,并将调度模式从基于心跳的拉取变为ClusterManager主动下推。这使平均调度时间从80ms降至1ms,极大提升了扩展性与效率。 针对存储层的NameNode单点风险,TDW设计了“一主两热备”的高可用方案,通过日志同步保证热备节点能随时接管,将计划内服务停止时间从近2小时大幅缩短。 整个改造在未大幅变动外围调度系统的前提下,成功支撑了数千节点规模的单集群,体现了在工程复杂度与系统收益间的务实权衡。

本机暂存
IT 2014-12-04 13:29:25 / 累计浏览 8,000

Redis和Memcached的区别

这篇讲的是Redis和Memcached这两种内存数据库的核心区别。文章从Redis作者的一个经典比较出发,清晰梳理了三者关键差异:首先,Redis支持String、Hash、List等更丰富的数据结构,可以在服务器端直接进行复杂操作,避免了Memcached需要将数据取回客户端修改的额外开销。其次,在内存效率上,若采用hash结构存储,Redis的组合压缩机制可能比Memcached更具优势。最后,性能表现各有特点:处理小数据时Redis的单核性能更优,而在100k以上的大数据场景中,Memcached的多核处理能力则略占上风。 文章随后深入剖析了Redis五种数据类型的实现原理,例如Hash内部如何根据成员数量自动转换存储结构,以及Set如何通过HashMap实现快速去重。这些细节不仅解释了差异背后的技术原因,也揭示了各自的设计考量。 总的来说,如果你的应用需要丰富的数据结构和复杂操作,Redis是更强大的选择;而如果是纯粹的、简单的大规模键值缓存,Memcached在内存利用和特定数据量级下的性能或许更合适。文章为技术选型提供了扎实的对比依据。

本机暂存
IT 2014-12-04 13:27:46 / 累计浏览 3,460

短网址服务的构建

短网址服务从社交媒体兴起,核心是解决链接过长、不便传播的问题。这篇文章深入讲解了如何构建这样一个服务,其实质是一个将长URL映射为短字符串的函数。 作者首先澄清了核心原则:一个短码必须唯一对应一个长地址。随后,文章详细拆解了两种主流的生成方案。方案一利用数据库自增ID,通过精心设计的进制转换(剔除易混淆字符如L、I、0、O)将其编码为6位左右的短码,保证了可读性与生成效率。方案二则从URL的哈希值(如MD5)出发,通过位运算和字符映射将其截断、压缩成短串,提供了另一种无状态的思路。 文章不仅停留在理论层面,还给出了具体的算法代码片段。从设计考量到实现细节,完整展现了一个短网址服务背后的工程思维。

本机暂存
IT 2014-12-03 00:05:01 / 累计浏览 5,980

等宽字体:程序员的字体

这篇文章汇集了程序员编码和阅读代码时的“利器”——等宽字体。由于字符宽度统一,这类字体能带来工整的视觉排布,有效减轻长时间阅读代码的疲劳感,甚至对强迫症患者也相当友好。 作者从实用性出发,一口气列举了二十款常见的等宽字体,并附上了直观的字符效果预览图。这些字体风格各异,从经典稳重的 Courier New、Consolas,到设计现代的 Source Code Pro、Inconsolata,再到颇具个性的像素字体 Telegrama,几乎涵盖了主流选择。文章最后还给出了作者的个人偏好,认为视觉效果出众的有 Courier New、DialogInput 等几款。 对于正在寻找或更换编程字体的开发者来说,这篇文章提供了一个清晰的起点和直接的视觉参考,末尾附上的字体资源包也相当实用。

本机暂存
IT 2014-12-03 00:03:18 / 累计浏览 4,580

Trackback,Pingback及XML-RPC

在博客技术中,评论区的互动方式不止“普通评论”一种。这篇讲的是Trackback与Pingback这两种经典的引用通知机制——它们如何让博客文章之间能够“对话”。 文章开门见山,对比了两者:Trackback更像是个“手动挡”,源于早期博客系统,需要作者在自己的文章发布后,手工将链接和摘要以HTTP POST请求发送给目标文章。而Pingback则是一次全面升级,它是“自动挡”。当你在文章中插入其他博客的链接并发布后,Pingback机制会基于XML-RPC协议,自动发现这些链接并向对方服务器发送通知。 作者清晰地列出了核心差异:Pingback使用的是更现代的XML-RPC协议,而Trackback用的是HTTP POST;最关键的是Pingback的全自动发现与通知,无需手动操作。此外,Pingback提取的是链接周边的文字作为摘要,Trackback则需完全手写。 文章不止于对比,还进一步探讨了Pingback机制的潜在应用场景,比如用于跟踪页面引用的脚本和CSS版本。最后,作者简要勾勒了实现Pingback服务端与客户端的核心步骤,从解析请求、抓取页面内容到生成评论,为想动手实践的开发者提供了清晰的思路图谱。

本机暂存