• XGBoost如何成为树回归的标杆算法
    2016年,陈天奇(Tianqi Chen)和 Carlos Guestrin 发表了一篇题为《XGBoost: A Scalable Tree Boosting System》的论文,迅速引爆机器学习社区。这篇论文不仅详细介绍了XGBoost(eXtreme Gradient Boosting)的高效实现,还使其成为数据科学竞赛(如Kaggle)和工业界的标杆算法。1. 背景:GBDT的局限性在XGBoost之前,梯度提升决策树(GBDT)已经是一种强大的集成学习方法,但它的实现(如 scikit-learn 的 GBDT)存在几个问题:训练速度慢:传统GBDT无法高效处理大规模数据。内存占用高:数据加载和计算优化不足。功能有限:缺少正则化、并行计算等现代优化手段。2. 陈天奇的突破陈天奇当时是华盛顿大学的博士生,研究方向是分布式机器学习系统。他在优化GBDT时,结合了多个创新点:正则化改进:在损失函数中加入 L1/L2 正则化,防止过拟合。二阶泰勒展开:传统GBDT只用一阶梯度,而XGBoost引入二阶导数,使优化更精准。并行化 & 缓存优化:利用CPU多线程加速特征排序,减少计算瓶颈。稀疏数据处理:自动处理缺失值,提高鲁棒性。3. Kaggle竞赛的统治2015-2017年间,XGBoost在Kaggle竞赛中几乎“屠榜”。据统计,超过一半的冠军方案使用了XGBoost或其变种。它的优势在于:灵活:支持分类、回归、排序任务。高效:比传统GBDT快10倍以上。易用:Python/R接口友好,参数调优方便。4. 工业界的影响XGBoost的成功不仅限于竞赛,还被广泛应用于:推荐系统(如Netflix、阿里巴巴)金融风控(信用评分、反欺诈)广告点击率预测(Google、Facebook)5. 后续发展XGBoost的流行催生了更多优化版本,如:LightGBM(微软,2017):基于直方图的优化,更快。CatBoost(Yandex,2017):擅长类别特征处理。写在最后陈天奇的XGBoost论文之所以成为经典,是因为它理论扎实、实现高效、应用广泛,至今仍是机器学习工程师的必备工具之一。它的成功也证明,算法优化 + 工程实现的结合,能极大推动技术进步。
  • 树回归算法:简介、起源与应用
    树回归算法是一种结合决策树与回归分析的方法,用于预测连续型目标变量。与传统的线性回归不同,树回归能够自动学习数据中的复杂非线性关系,适用于高维、非结构化的数据集。1. 树回归的基本原理树回归通过递归分割数据,将特征空间划分为多个区域,并在每个区域内拟合简单模型(如均值或线性回归)。其核心步骤包括:特征选择:选择最佳特征和分割点(如最小化均方误差)。递归分割:不断划分子区域,直到满足停止条件(如最大深度或最小样本数)。预测:新样本根据划分规则落入某个区域,用该区域的预测值输出结果。2. 发明背景与动机传统回归方法(如线性回归)假设数据符合线性关系,但在现实问题中,许多数据呈现复杂非线性模式。树回归的提出解决了以下问题:非线性建模:自动拟合数据中的复杂模式,无需人工构造特征。鲁棒性:对异常值和缺失值不敏感。可解释性:树结构直观,便于分析特征重要性。3. 关键贡献者与发展历程树回归的理论基础可追溯至1980年代:Breiman等人(1984)提出的 CART(分类与回归树) 是重要里程碑,支持回归任务。后续改进包括M5模型树(Quinlan, 1992)、梯度提升回归树(GBRT) 等,进一步提升预测能力。4. 解决的问题与应用领域树回归广泛应用于:医学:疾病风险预测(如血糖水平估计)。金融:股票价格趋势分析、信用评分。工业:设备故障预测、质量控制。环境科学:气候建模、污染预测。5. 总结树回归因其灵活性、可解释性和强大的非线性拟合能力,成为机器学习中的重要工具。后续的随机森林、XGBoost等集成方法进一步提升了其性能,使其在现代数据分析中占据核心地位。
  • [技术干货] 卷积神经网络(CNN)比起传统机器学习的优势
    卷积神经网络(CNN)作为深度学习的代表模型,在处理具有空间结构或局部相关性的数据(如图像、视频、音频、文本等)时,相比传统机器学习方法(如SVM、随机森林、逻辑回归等)具有显著优势。以下是CNN的核心优势及对比分析:1. 自动特征提取(端到端学习)传统方法:需要手动设计特征(如SIFT、HOG、LBP等),依赖领域知识和大量人工调参,且特征工程的质量直接影响模型性能。CNN优势:通过卷积层自动学习数据的层次化特征(从低级边缘、纹理到高级语义特征),无需人工干预。例如:图像分类:低层卷积核检测边缘,中层检测形状,高层检测物体部件或整体。文本处理:通过卷积核捕捉局部词组合(如n-gram)的语义。2. 局部感知与参数共享(平移不变性)局部感知:CNN的卷积核仅关注输入数据的局部区域(如图像的3×3像素块),而非全局。这符合图像、音频等数据的局部相关性特性,大幅减少参数量。参数共享:同一卷积核在整个输入数据上滑动共享参数,进一步降低计算复杂度。例如:传统全连接网络处理100×100图像需10⁴×10⁴参数,而CNN的3×3卷积核仅需9个参数(忽略通道数)。平移不变性:无论目标在图像中如何移动,CNN都能通过共享的卷积核检测到相同特征(如“猫脸”出现在左上角或右下角)。3. 层次化特征表示(抽象能力)传统方法:浅层模型(如线性SVM)只能学习简单的线性决策边界,难以捕捉复杂模式。CNN优势:通过堆叠多层卷积和池化操作,逐步提取从低级到高级的抽象特征:浅层:边缘、颜色、纹理等。深层:物体部件、场景语义等。这种层次化结构使CNN能处理高度非线性的复杂任务(如图像分类、目标检测)。4. 对数据变换的鲁棒性传统方法:对输入数据的微小变换(如旋转、缩放、平移)敏感,需通过数据增强或手动设计不变性特征来缓解。CNN优势:池化操作(如Max Pooling)通过下采样降低特征图分辨率,增强对局部平移的鲁棒性。数据驱动学习:通过大量训练数据自动学习对旋转、缩放等变换不变的特征(需配合数据增强)。专用架构(如Spatial Transformer Networks)可显式学习输入数据的几何变换。5. 计算效率与可扩展性传统方法:全连接网络或核方法(如SVM)的参数量随输入规模呈平方或指数增长,难以处理高维数据(如百万像素图像)。CNN优势:局部连接和参数共享显著减少参数量,使训练大规模模型成为可能。现代框架(如TensorFlow、PyTorch)支持GPU加速,可高效处理海量数据。迁移学习能力:预训练的CNN模型(如ResNet、VGG)可通过微调快速适配新任务,减少训练数据需求。6. 适用场景广泛CNN不仅限于图像领域,还可扩展到:计算机视觉:图像分类、目标检测、语义分割、人脸识别等。自然语言处理:文本分类(TextCNN)、序列标注(如命名实体识别)。音频处理:语音识别、声纹识别、音乐分类。时间序列分析:通过1D卷积处理传感器数据、股票价格等。与传统方法的对比总结特性CNN传统机器学习特征工程自动学习需手动设计参数数量少(局部连接+共享)多(全连接)对数据变换的鲁棒性强(通过池化、数据增强)弱(需手动处理)计算效率高(GPU加速)低(高维数据时)可解释性较弱(黑盒模型)较强(如决策树、线性模型)适用数据类型结构化数据(图像、文本、音频)结构化或简单非结构化数据何时选择传统方法?数据量极小(CNN易过拟合)。需要强可解释性(如医疗、金融领域)。计算资源有限(CNN训练成本较高)。问题简单(如线性可分数据)。总结CNN的核心优势在于其自动特征提取能力、对局部相关性的高效建模以及对复杂模式的层次化表示,使其在图像、语音等任务中远超传统方法。然而,传统方法在简单任务或小数据场景下仍具有实用价值,两者可结合使用(如用CNN提取特征后输入SVM分类)。
  • 一文带你了解自监督学习中的对比学习的负样本采样策略
    自监督学习中的对比学习(Contrastive Learning)通过​​区分正样本对(相似特征)与负样本对(不相似特征)​​来学习判别性特征表示。其中,负样本采样策略是核心设计之一,直接影响模型对特征空间区分能力的学习效果。以下从​​负样本的作用机制​​出发,结合SimCLR、MoCo等经典方法,详细解析其如何通过负样本采样策略提升特征表示质量。​​一、对比学习的核心逻辑:正样本与负样本的作用​​对比学习的目标是将同一样本的不同增强视图(正样本对)映射到特征空间中相近的位置,同时将不同样本的增强视图(负样本对)映射到远离的位置。其核心损失函数(如InfoNCE)可形式化为:其中,z_i和z_j是同一原始样本的两个增强视图(正样本对),其余2N-2个样本为负样本(k \neq i)。​​负样本的关键作用​​:提供“反例”,迫使模型学习​​区分不同样本的语义边界​​,避免特征坍缩(所有样本映射到同一区域)。覆盖数据分布的多样性,使特征空间对不同样本的判别性更强。​​二、负样本采样策略的设计目标​​有效的负样本采样需满足两个核心要求:​​数量充足​​:足够的负样本能增强对比信号的强度(更多“反例”帮助模型区分)。​​多样性高​​:负样本需覆盖数据分布的广泛区域,避免模型仅适应局部模式。​​三、SimCLR:通过大批次(Large Batch Size)提升负样本数量​​SimCLR是Google提出的对比学习框架,其核心创新在于​​通过强数据增强生成高质量正样本对,并利用大批次提供丰富负样本​​。​​1. 正样本对的生成:强数据增强​​SimCLR对同一原始图像应用​​随机组合的增强操作​​(如随机裁剪、颜色抖动、高斯模糊、旋转等),生成两个视图(v_1, v_2)。这些增强操作保留了图像的语义一致性(正样本对),但引入了视觉差异(如视角、亮度变化),迫使模型学习对语义不变的特征。​​2. 负样本的采样:大批次直接提供​​SimCLR通过​​增大训练批次大小(如8192)​​,使每个批次的负样本数量达到2N-2(N为每批次原始样本数)。例如,当N=4096时,每个样本的负样本数为8192-2=8190。​​优势​​:大批次直接增加了负样本的数量,增强了对比损失的判别能力(更多“反例”帮助模型区分不同样本)。简单高效,无需额外存储或维护负样本库。​​局限性​​:批次过大会导致计算和内存开销剧增(需GPU集群支持)。​​四、MoCo:通过动量编码器与队列维护高质量负样本库​​MoCo(Momentum Contrast)针对SimCLR的大批次依赖问题,提出​​动态维护一个大规模、多样化的负样本库​​,解决了大批次不可行的场景(如单卡训练)。​​1. 负样本库的构建:队列(Queue)与动量编码器​​MoCo的核心设计是​​动量编码器(Momentum Encoder)​​和​​负样本队列(Queue)​​:​​查询编码器(Query Encoder)​​:用于编码当前批次的增强视图(查询特征q)。​​键编码器(Key Encoder)​​:初始与查询编码器相同,但通过动量更新(缓慢跟随查询编码器的参数变化),用于编码负样本(键特征k)。​​负样本队列​​:存储前几个批次的键特征(如65536个),作为当前批次的负样本。每次训练时,当前批次的键特征会被推入队列,最旧的键特征被弹出,保持队列大小固定。​​2. 负样本的采样:动态更新与去相关性​​​​负样本的多样性​​:队列存储了大量历史批次的键特征,覆盖了更广泛的数据分布(避免固定批次的负样本重复)。​​去相关性​​:键编码器通过动量更新(如m=0.999),其参数变化缓慢,避免了查询编码器与键编码器同步更新导致的负样本“过拟合”(即键特征与查询特征同时变化,对比信号减弱)。​​优势​​:负样本库规模大(如65536),无需依赖大批次,降低计算开销。队列动态更新保证了负样本的时效性和多样性,避免特征坍缩。​​实验效果​​:MoCo在ImageNet线性评估任务中,仅用单卡训练即可达到与SimCLR(需8卡大批次)相近的性能,验证了其负样本策略的有效性。​​五、负样本采样的通用优化方向​​除SimCLR和MoCo外,后续工作进一步优化了负样本策略,核心方向包括:​​1. 负样本的去重与过滤​​避免同一原始样本的多个增强视图作为负样本(如排除当前批次的正样本对)。过滤语义相似的负样本(如通过聚类剔除相似样本),减少无效对比。​​2. 负样本的语义控制​​引入跨域负样本(如其他数据集的样本),扩展特征空间的判别边界。基于类别的负采样(如针对细粒度分类,强制模型区分同类别不同实例的负样本)。​​3. 动态负样本生成​​通过生成模型(如GAN)动态生成高质量的负样本,补充真实数据的不足。​​六、总结:负样本策略如何提升特征质量?​​SimCLR、MoCo等方法的负样本采样策略通过以下方式提升特征表示质量:​​数量充足​​:大批次(SimCLR)或动态队列(MoCo)提供了足够多的负样本,增强了对比信号的强度。​​多样性高​​:强数据增强生成的正样本对(SimCLR)、历史批次的负样本队列(MoCo)覆盖了数据分布的广泛区域,迫使模型学习更鲁棒的判别特征。​​语义对齐​​:负样本与正样本的语义一致性(如同属一个类别但视觉不同)确保模型学习的是“语义不变性”而非“视觉噪声”,提升特征的泛化能力。简言之,负样本采样策略通过​​“量”与“质”的双重优化​​,使模型在对比学习中更有效地捕捉到数据的本质特征,从而提升下游任务(如分类、检测)的性能。
  • [大赛资讯] C++可以使用STL库嘛
    C++可以使用vector、cin、cout等结构嘛
  • [问题求助] 问题求助十七期
    offline测试数据中存在点数n为12833,路径长度限制为10的数据(第136个测试数据),按照题目中的叙述,得分为 100*|x|/n,四舍五入,那么|x|一定不会超过20。 2000/12833四舍五入为0,这样的话,得分岂不是一定为0,无论程序找的路径多么优秀?请官方仔细回答,不要答非所问。
  • [问题求助] 十七期求助
    第十七期的报错paths are intersected 是什么问题马,pdf中也没有说明;pdf中的C有什么用?答案是只能输出两个路劲嘛,为啥例子是三个?
  • [技术干货] 第十一期初赛第五名思路
    第十一期思路主要如下:1.将问题转化为TSP问题2.将TSP问题压缩,相同的wrap且相同anchor认为是同一个点3.求解TSP的距离矩阵(要使用numpy求解,不然时间开销很大)4.使用MST构造初始TSP序列,大概分数为7958000.5.使用or-opt优化初始解,具体过程如下:(1)找出序列的最长边a->b(2)找出以a为起点的最短边a->x(3)断开a->b, 链接a->x, 这样会导致多出一段序列a_next->...->x_pre(4)将a_next->...->x_pre插入到序列中,如果新的序列比原始序列优,替换原始序列,否则重复(1)(找第二长边)6. 最终分数大概为8340000.
  • [常见问题汇总帖] 兼容torch2.2.0的mindietorch
    我在执行.pt模型转换时遇到了torch2.1.0版本的bug,按照官方指示我尝试升级torch将torch升级为2.2.0,mindietorch并未升级再次运行转换脚本出现mindietorch与torch不兼容的错误。我继续尝试使用pip 华为源和官方软件包的方式升级mindietorch但均升级失败想请问一下兼容torch2.2.0的minidetorch在哪可以找到
  • [互动交流] AI小白,想学习下开源大语言模型的源码,比如ChatGLM3,应该怎么学习呢?有没有好的学习大语言模型源码的方法?
    AI小白,想学习下开源大语言模型的源码,比如ChatGLM3,应该怎么学习呢?有没有好的学习大语言模型源码的方法?
  • [互动交流] 最近在学习AI,学习AI的过程中需要学习的东西太多了,作为小白,有些知识点已经过时了,不需要在学习了,我应该怎么快速的学习最新的知识呢?哪些技术已经过时了,有没有同学知道下
    最近在学习AI,学习AI的过程中需要学习的东西太多了,作为小白,有些知识点已经过时了,不需要在学习了,我应该怎么快速的学习最新的知识呢?哪些技术已经过时了,有没有同学知道下
  • [互动交流] 我最近在学习AI,学习AI有没有具体的学习方法?感觉学习的东西太多了,无从下手?有没有对AI比较了解的,帮忙指导下学习流程
    我最近在学习AI,学习AI有没有具体的学习方法?感觉学习的东西太多了,无从下手?有没有对AI比较了解的,帮忙指导下学习流程
  • [互动交流] 我最近在学习AI,模型的参数是怎么确定的?有没有具体的计算公式?比如我自研一个模型,我怎么确定我的模型参数是多少?
    我最近在学习AI,模型的参数是怎么确定的?有没有具体的计算公式?比如我自研一个模型,我怎么确定我的模型参数是多少
  • [技术干货] 机器学习如何提高欺诈预防能力【转】
    前言在线欺诈是许多国家的严重问题,存在网络钓鱼攻击、身份盗窃和假冒电子商务网站等各种诈骗行为。一份报告显示,很大一部分欺诈交易发生在晚上10点至凌晨4点之间,其中60岁以上的信用卡持有者是主要受害者。机器学习有助于预防欺诈,使组织能够实时检测和防止可疑活动。传统的欺诈预防方法往往难以跟上诈骗者不断变化的策略。机器学习算法可以快速分析大量数据,帮助组织识别可能表明可疑行为的模式和异常。这些算法从过去的欺诈案例中学习,不断增强检测可疑活动的能力。通过将机器学习集成到欺诈预防策略中,组织可以领先于诈骗并有效保护其资产。机器学习在预防欺诈方面的一个关键优势是它能够在早期阶段检测可疑活动。通过分析历史数据和识别可疑行为模式,机器学习算法可以实时发现可疑交易,使组织能够迅速采取行动并防止财务损失。图数据库与机器学习一起成为欺诈检测的强大工具。图形数据库以高速率记录和分析网络交互,使其可用于各种应用,包括欺诈检测。他们可以识别大数据中的模式和关系,降低复杂性,以便检测算法可以有效地发现网络内的欺诈企图。机器学习如何提高欺诈预防能力机器学习在欺诈预防方面可以发挥重要作用,以下是一些提高欺诈预防能力的方法:数据分析和特征工程:使用机器学习技术对大量的交易数据进行分析和挖掘,发现欺诈模式和异常行为。通过特征工程,提取关键的特征用于建模。监督学习模型:使用监督学习算法,如决策树、逻辑回归、支持向量机(SVM)等,对历史数据进行建模,学习欺诈案例和正常交易之间的差异,并预测新的交易是否为欺诈。无监督学习模型:利用无监督学习算法,如聚类分析、异常检测等,发现数据中的潜在欺诈模式,识别与正常行为不同的异常交易。半监督学习:结合监督学习和无监督学习的优势,利用标记和未标记数据进行建模,提高模型的泛化能力和欺诈检测的效果。深度学习模型:使用深度学习技术,如神经网络,处理大规模数据,学习复杂的欺诈模式和特征表示,提高欺诈预测的准确性。模型集成:结合多个不同算法的预测结果,采用投票、加权平均等方法,提高模型的鲁棒性和预测性能。实时监测和反馈:建立实时监测系统,对交易进行及时监控和反馈,及时发现并阻止欺诈行为。持续优化:不断收集新数据,更新模型参数,优化模型性能,适应不断变化的欺诈手段和模式。总结总之,随着诈骗者不断发展其策略,组织必须调整其欺诈预防策略以有效应对这些威胁。机器学习和图形数据库是这场持续战斗中的强大武器。这些技术能够快速分析无数数据点,能够准确检测可疑活动,超越人类的能力。这类似于拥有一支超人欺诈侦探团队全天候不知疲倦地工作。转载自:cid:link_0
  • [技术干货] 基于机器学习的深度学习的玫瑰花种类的识别
    准备自行准备一个玫瑰花朵数据集,尽量多的种类和数量,下面教程已自备数据集。数据预处理将图片转换为模型可以处理的格式,对数据进行归一化处理。import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator # 设置图片大小和批次大小 IMG_SIZE = (224, 224) BATCH_SIZE = 32 # 创建ImageDataGenerator实例,用于数据增强和预处理 train_datagen = ImageDataGenerator( rescale=1./255, rotation_range=20, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True, fill_mode='nearest' ) # 加载训练数据集 train_data = train_datagen.flow_from_directory( 'flowers', target_size=IMG_SIZE, batch_size=BATCH_SIZE, class_mode='categorical' )模型构建使用预训练的ResNet50模型作为特征提取器,然后搭建一个全连接层用于分类from tensorflow.keras.models import Model from tensorflow.keras.layers import Dense, GlobalAveragePooling2D from tensorflow.keras.applications.resnet50 import ResNet50 # 加载ResNet50模型 base_model = ResNet50(weights='imagenet', include_top=False, input_shape=IMG_SIZE + (3,)) # 在ResNet50模型基础上搭建全连接层 x = base_model.output x = GlobalAveragePooling2D()(x) x = Dense(1024, activation='relu')(x) predictions = Dense(train_data.num_classes, activation='softmax')(x) # 构建完整模型 model = Model(inputs=base_model.input, outputs=predictions) # 冻结ResNet50模型的所有层 for layer in base_model.layers: layer.trainable = False模型训练和评估训练:# 编译模型 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(train_data, epochs=10)模型训练完成后需要评估:# 加载测试数据集 test_datagen = ImageDataGenerator(rescale=1./255) test_data = test_datagen.flow_from_directory( 'test', target_size=IMG_SIZE, batch_size=BATCH_SIZE, class_mode='categorical' ) # 在测试集上评估模型 test_loss, test_acc = model.evaluate(test_data) print('Test accuracy:', test_acc)必要时调整模型再进行训练:# 设置训练参数 EPOCHS = 50 STEPS_PER_EPOCH = len(train_data) VALIDATION_STEPS = len(valid_data) # 开始训练模型 history = model.fit( train_data, epochs=EPOCHS, steps_per_epoch=STEPS_PER_EPOCH, validation_data=valid_data, validation_steps=VALIDATION_STEPS )
总条数:5195 到第
上滑加载中