心法利器[127] | 24年算法思考-特征工程和经典深度学习
心法利器
本栏目主要和大家一起讨论近期自己学习的心得和体会。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。
2023年新的文章合集已经发布,获取方式看这里:又添十万字-CS的陋室2023年文章合集来袭,更有历史文章合集,欢迎下载。
往期回顾
心法利器[122] | 效果提升的根本来源讨论
心法利器[123] | 算法面试的八股和非八股讨论
心法利器[124] | 24年算法思考-大模型的应用与训练篇
心法利器[125] | 24年算法思考-RAG技术论文和实践小结
心法利器[126] | 24年算法思考-小模型的生存空间
前沿重器[48-54] 合集:四万字聊搜索系统
因为很多原因,今年应该是我做的算法最杂的一年了,传统NLP、大模型、RAG、机器学习等多个领域内容基本我都有涉及,同时,很多技术也在今年有了很多革新和进步,因此我想在这里总计一下我的视角下这些算法的情况以及我使用下来的经验感受。具体我就按照下面几个方面来划分,系统总结一下。
大模型的应用与训练(心法利器[124] | 24年算法思考-大模型的应用与训练篇)
RAG技术论文与实践小结(心法利器[125] | 24年算法思考-RAG技术论文和实践小结)
小模型的生存空间(心法利器[126] | 24年算法思考-小模型的生存空间)
机器学习与特征工程的必要性
个人的成长小结——打开思路
今天是第四篇,讲讲特征工程和经典深度学习的重要性,重新品味这些经典方案在现在环境的地位。
我这一年在这方面的工作
特征工程
特征工程必要性
特征工程学习和实践的差距
经典深度学习的应用
小结
我这一年在这方面的工作
之前是没想到,在2024年,我竟然要做特征和经典深度学习、机器学习方面的工作,不过从实际场景来看,确实非常需要,因此我大胆承担起自己并不擅长的这方面工作,相比大模型,这个挑战让自己获得了在超乎想象的提升和收获。
我所需要面对的任务是对给定的一堆结构化的数据,达成一些分析和预测,以支持业务运营策略的实施,此时,便不可避免地要用到一系列特征工程和机器学习方法,在现在这个AI大环境下,真的挺令人意外的,而一顿操作下来,确实带来了比预期更多的收益,惊喜满满。
下面我简单列举一下这块需要包含的工作:
特征的获取、挖掘。即确定,有哪些特征,哪些是可靠的、有用的,可能缺少的部分,要去看什么渠道能获取或者计算出来。
特征工程。从无到有搭建一套基础的特征工程体系,说实话这里更多是体力活,每个特征都有自己相对独立的处理方式,有部分通用的,但也有些需要定制的,这里需要抽象成函数并暴露一些参数出来。
模型层面的迭代实验。离线我其实试了不少模型,但最终确定采用的是简单的机器学习模型,上线后通过观测和优化,逐步升级到深度学习,现在视角看路径是基本正确的。
下面我就来分章节讲这些工作的一些经验。
特征工程
如果把整个算法开发流程比作烹饪,那特征工程就是前面对食材的预处理,冷热、调味、腌制后的食材再经过煎炸炒煮,会有更特别的口感和滋味,如果我们能从数据中找到更好表达信息的模式,那方法如模型后就能得到更好的效果。
特征工程的必要性
首先,还是想先强调特征工程的必要性,早在深度学习真正进入大家的视野,从机器学习过渡到深度学习,就有不少人提出特征工程已经没必要了,但实际直至今日,无数人仍旧坚持要做特征工程,从包括我在内的实验经验来看,特征工程仍旧是非常重要。
首先,原始的特征,并非都能直接放入模型进行计算,例如文本特征需要经过embedding,在实际应用中,就有性别、地址、学历、行为等,需要进行转化和计算。
其次,即使是我们熟知的数字,也有必要做具体的转换。很多类型的数字,经过归一化、对数、分桶之类的操作,仔细观察,转化后,对最终效果的提升不言而喻。
第三,很多特征来自二次甚至三次的计算,例如次数统计,比值、增长率等,还有就是推荐里常说的特征交叉,这里其实也侧面说明,模型对一些加减乘除等的计算其实并不敏感,我们提前提取和模型来学习识别的效率差距非常大。
第四,无效、冗余、错误的特征是会让最终效果出现问题的,因此要经过仔细的筛查分析。
所以,这里要破除一些可能在学习这些知识过程中产生的错误观念,以便更好地进行实践。
不能“一把梭”,我们不能简单地理解机器学习就是把数都扔进去进行计算。
不能偷懒,每个特征最好都有一定的了解和认识,以便进行各自最合适的特征工程配置。
特征工程之所以被称为工程,就是因为特征的可以做很多事,而且收益非常明显。
特征工程学习和实践的差距
然后是深入学习后的误区了,我们通常能在书籍、课程内学到很多特征工程的方法,包括但不限于缺失值、标准化、异常值、哈希、one-hot、交叉等,但是往往比较难教到这几个方向内容:
方法具体要在什么时候用,怎么选择。
实操些细节操作,如分桶怎么分,缺失值怎么选该怎么做。
特别地数据类型改怎么处理,如序列特征等。
常说的数据清洗,很模糊,这些东西看着很通用,就都是这些方法,学到即可,甚至能有快速的工具完成,但难点在使用的时机、方式,只有我们对业务场景、实际问题、特征内容有足够的了解,我们才能调制出合适的方案,从而真正解决实际问题,带来收益。
另外一个难点是,挖掘特征的意识,这个意识是需要培养的,因为一旦想不到有这个思路,就没法做后面的很多事。举个例子,基于时间片的分割,能挖掘出很多东西,以推荐系统为例,1天内点击,1周内点击,1月内点击,能看出不同时间维度下的兴趣,这种概念换到股票里,就是日线、周线、月线等等,表达中长期股票的走势,跌破和涨破都可以说是股票的关键变化,同时还有增长率、相关系数之类的指标,都是可以考虑的,能主动构造这类型的特征,往往就能体现出一个人在这个方面的基础功底和业务方面的理解深度。
经典深度学习的使用
其实NLP在bert那个阶段下,魔改深度学习模型的人就开始减少了,到了大模型时代,现在能说出模型内部结构的就少之又少的,今年面试来看梳理pytorch的训练脚本会成为一个有一定区分度的问题,说实话还是挺让我吃惊。虽说大模型能一定程度解决很多问题,但短期内仍旧不能一统天下,现在仍有大量的原因会让大模型无法派上用场,因此类似的技术仍然要好好学。
类似上面的特征学习,对NLP技术型的人,有个比较简单的模型可以使用——那就是文本化特征然后直接当NLP任务进行训练,类似的实践从bert时代就已经有了,后续在大模型时代也有类似的方(前沿重器[57] | sigir24:大模型推荐系统的文本ID对齐学习),将特征整理成这样就能用文本类深度学习模型轻松完成baseline。
然而从个人的实践发现了许多细节问题:
序列类复杂特征并不好转化,硬转效果不好。
从实验中看,数字类特征的变化,对预测结果的敏感性很低。
数字特征多的场景效果就会很差。
最重要的是,真的比不过专门定制的机器学习和深度学习模型。
在24年末,我翻阅了很多推荐系统的模型(不得不说,这方面的研究,推荐系统还是走得快,值得借鉴!)及各方大神复现的源码,发现内部有很多细节操作,是不看源码就无法发现的。在datawhale开源的项目“https://github.com/datawhalechina/torch-rechub”中,最经典的youtubeDNN模型(Deep Neural Networks for YouTube Recommendations),他的模型结构也有说法,直接看model。
YoutubeDNN((embedding): EmbeddingLayer((embed_dict): ModuleDict((user_id): Embedding(3, 16)(gender): Embedding(3, 16)(age): Embedding(3, 16)(occupation): Embedding(3, 16)(zip): Embedding(3, 16)(movie_id): Embedding(94, 16))(0): Linear(in_features=96, out_features=128, bias=True)(1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(2): ReLU(inplace=True)(3): Dropout(p=0, inplace=False)(4): Linear(in_features=128, out_features=64, bias=True)(5): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(6): ReLU(inplace=True)(7): Dropout(p=0, inplace=False)(8): Linear(in_features=64, out_features=16, bias=True)(9): BatchNorm1d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(10): ReLU(inplace=True)(11): Dropout(p=0, inplace=False))
)
每个特征,都有构造出一个embedding,即ModuleDict下有多个Embedding。
小结
至此,有关去年在技术上的总结就已经结束,可以看到我去年做的还挺杂,应该可以说是我最杂的一年了,但从中我也是感受到了各个技术方案在各个场景业务的一席之地,对于算法学习而言诚然要有深度,让自己的东西更容易拿得出手使用,但在后期,广度和应用能力,也将会是让自己突破成长的关键,在下一篇,我将会展开聊技术灵活应用和学习方面的思路,敬请期待。
相关文章:

心法利器[127] | 24年算法思考-特征工程和经典深度学习
心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。 2023年新的文章合集已经发布,获取方式看这里:又添十万字-CS的陋室2023年文章合集来袭,更…...
ASP.NET Core 中的 JWT 鉴权实现
在当今的软件开发中,安全性和用户认证是至关重要的方面。JSON Web Token(JWT)作为一种流行的身份验证机制,因其简洁性和无状态特性而被广泛应用于各种应用中,尤其是在 ASP.NET Core 项目里。本文将详细介绍如何在 ASP.…...
PyTorch基本功能与实现代码
PyTorch是一个开源的深度学习框架,提供了丰富的函数和工具,以下为其主要功能的归纳: 核心数据结构: • 张量(Tensor):类似于Numpy的ndarray,是PyTorch中基本的数据结构,…...

SparkSQL数据模型综合实践
文章目录 1. 实战概述2. 实战步骤2.1 创建数据集2.2 创建数据模型对象2.2.1 创建常量2.2.2 创建加载数据方法2.2.3 创建过滤年龄方法2.2.4 创建平均薪水方法2.2.5 创建主方法2.2.6 查看完整代码 2.3 运行程序,查看结果 3. 实战小结 1. 实战概述 在本次实战中&#…...
3 查找重复的电子邮箱(having与where区别,distinct去重使用)
3 查找重复的电子邮箱(having与where区别,distinct去重使用) 表: Person ---------------------- | Column Name | Type | ---------------------- | id | int | | email | varchar | ---------------------- id 是该…...

uniapp——App 监听下载文件状态,打开文件(三)
5 实现下载文件并打开 这里演示,导出Excel 表格 文章目录 5 实现下载文件并打开DEMO监听下载进度效果图为什么 totalSize 一直为0? 相关Api: downloader DEMO 提示: 请求方式支持:GET、POST;POST 方式需要…...

循环队列(C语言)
从今天开始我会开启一个专栏leetcode每日一题,大家互相交流代码经验,也当作我每天练习的自我回顾。第一天的内容是leetcode622.设计循环队列。 一、题目详细 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO&#…...

数据可视化:让数据讲故事的艺术
目录 1 前言2 数据可视化的基本概念2.1 可视化的核心目标2.2 传统可视化手段 3 数据可视化在知识图谱中的应用3.1 知识图谱的可视化需求3.2 知识图谱的可视化方法 4 数据可视化叙事:让数据讲故事4.1 叙事可视化的关键要素4.2 数据可视化叙事的实现方法 5 数据可视化…...

雷电9最新版安装Magisk+LSPosd(新手速通)
大家好啊!我是NiJiMingCheng 我的博客:NiJiMingCheng 在安卓系统的定制与拓展过程中,获取 ROOT 权限以及安装各类框架是进阶玩家常用的操作,这可以帮助我们实现更多系统层面的个性化功能。今天,我将为大家详细介绍如何…...
Ubuntu 24.04 LTS 开启 SMB 服务,并通过 windows 访问
Ubuntu 24.04 LTS 背景资料 Ubuntu服务器折腾集Ubuntu linux 文件权限Ubuntu 空闲硬盘挂载到 文件管理器的 other locations Ubuntu开启samba和window共享文件 Ubuntu 配置 SMB 服务 安装 Samba 确保 Samba 已安装。如果未安装,运行以下命令进行安装ÿ…...
使用Websocket进行前后端实时通信
1、引入jar,spring-websocket-starter <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency> 2、配置websocket config import org.springframe…...

vue2使用flv.js在浏览器打开flv格式视频
组件地址:GitHub - bilibili/flv.js: HTML5 FLV Player flv.js 仅支持 H.264 和 AAC/MP3 编码的 FLV 文件。如果视频文件使用了其他编码格式就打不开。 flv.vue <template><div><el-dialog :visible.sync"innerVisibleFlv" :close-on-pre…...
OpenCV相机标定与3D重建(61)处理未校准的立体图像对函数stereoRectifyUncalibrated()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 为未校准的立体相机计算一个校正变换。 cv::stereoRectifyUncalibrated 是 OpenCV 库中的一个函数,用于处理未校准的立体图像对。该函…...
[cg] glProgramBinary
参考: glProgramBinary - OpenGL 4 Reference Pages opengl 通过gpu编译好的 shader 可以存储到二进制文件中,第二次使用的时候直接加载二进制文件即可, glProgramBinary用于加载shader的二进制数据 实列代码如下: // 假设已经…...
LeetCode hot 力扣热题100 二叉树的最大深度
class Solution { public:int maxDepth(TreeNode* root) {if (root nullptr) {return 0;}int l_depth maxDepth(root->left);int r_depth maxDepth(root->right);return max(l_depth, r_depth) 1;} }; 代码作用 该函数通过递归计算二叉树的最大深度(从根节…...
速通Docker === 网络
目录 Docker网络详解 容器之间直接通信的弊端 (一)启动容器 (二)进入容器并发起请求 (三)请求流程 (四) 弊端分析 一、Docker网络基础 (一)容器IP分配…...

【MySQL — 数据库基础】深入解析MySQL常用数据类型
常用数据类型 创建完数据库之后,就要在数据库中创建表,表中存储的数据记录,一条记录由不同的列组成,每条列都需要自己的类型;并且表中的多个行对应的列的数据类型,都必须是相同的; 那么每个…...
Linux高级--3.3.1 C++ spdlog 开源异步日志方案
一、基本介绍 spdlog 是由 Gustav S. 在 2015 年开发的一个高性能 C 日志库。开发这个库的主要目的是为了提供一个非常快速、轻量、易于使用的日志工具,特别适合需要高性能、低延迟日志记录的 C 应用程序。(由于源码现在比较难下载,我把压缩…...

电梯系统的UML文档05
Dispatcher 不控制实际的电梯组件,但它在软件系统中是重要的。每一个电梯有一个ispatcher,主要功能是计算电梯的移动方向、移动目的地以及保持门的打开时间。它和系统中除灯控制器以外的几乎所有控制对象交互。 安全装置也是一个环境对象,它…...
如何使 LLaMA-Factory 支持 google/gemma-2-2b-jpn-it 的微调
如何使 LLaMA-Factory 支持 google/gemma-2-2b-jpn-it 的微调 追加, "Gemma-2-2B-JPN-Instruct": {DownloadSource.DEFAULT: "google/gemma-2-2b-jpn-it",},修改 constants.py, vi ./src/llamafactory/extras/constants.py---"…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...