数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
二、特征编码
2.1. 特征二元化
特征二元化的过程是将数值型的属性转换为布尔值的属性。通常用于假设属性取值为取值分布为伯努利分布的情形。
特征二元化的算法比较简单。 对属性 $ MathJax-Element-355 $ 指定一个阈值 $ MathJax-Element-132 $ 。
- 如果样本在属性 $ MathJax-Element-355 $ 上的值大于等于 $ MathJax-Element-132 $ ,则二元化之后为 1 。
- 如果样本在属性 $ MathJax-Element-355 $ 上的值小于 $ MathJax-Element-132 $ ,则二元化之后为 0 。
阈值 $ MathJax-Element-132 $ 是一个超参数,其选取需要结合模型和具体的任务来选择。
2.2. one-hot
对于非数值属性,如
性别:[男,女]、国籍:[中国,美国,英国]
等等,可以构建一个到整数的映射。如性别:[男,女]
属性中,将男
映射为整数 1、女
映射为整数 0。该方法的优点是简单。但是问题是,在这种处理方式中无序的属性被看成有序的。
男
和女
无法比较大小,但是1
和0
有大小。解决的办法是采用独热码编码
One-Hot Encoding
。One-Hot Encoding
采用N
位状态位来对N
个可能的取值进行编码,每个取值都由独立的状态位来表示,并且在任意时刻只有其中的一位有效。假设属性 $ MathJax-Element-355 $ 的取值为非数值的离散集合 $ MathJax-Element-134 $ ,独热码将其扩展成 $ MathJax-Element-405 $ 个属性,每个新属性代表属性 $ MathJax-Element-355 $ 的一个状态位:若样本在属性 $ MathJax-Element-355 $ 上的取值为 $ MathJax-Element-138 $ ,则样本在新的属性 $ MathJax-Element-139 $ 上的取值为 1,在新的属性 $ MathJax-Element-140 $ 上的取值为 0 。
这种做法中,如果在 $ MathJax-Element-141 $ 上取值全为 0,则表示发生了缺失。
缺失值也可以用第 $ MathJax-Element-142 $ 个状态位来表示。
也可以扩展成 $ MathJax-Element-143 $ 个属性, 如果在 $ MathJax-Element-144 $ 上取值全为 0,则表示样本在属性 $ MathJax-Element-355 $ 上的取值为 $ MathJax-Element-146 $ 。
One-Hot Encoding
的优点:- 能够处理非数值属性。
- 在一定程度上也扩充了特征。如
性别
是一个属性,经过独热码编码之后变成了是否男
和是否女
两个属性。 - 编码后的属性是稀疏的,存在大量的零元分量。
在决策树模型中,并不推荐对离散特征进行
one-hot
。 主要有两个原因:产生样本切分不平衡的问题,此时且分增益会非常小。
如:
国籍
这个离散特征经过独热码编码之后,会产生是否中国、是否美国、是否英国、...
等一系列特征。在这一系列特征上,只有少量样本为1
,大量样本为0
。这种划分的增益非常小,因为拆分之后:
- 较小的那个拆分样本集,它占总样本的比例太小。无论增益多大,乘以该比例之后几乎可以忽略。
- 较大的那个拆分样本集,它几乎就是原始的样本集,增益几乎为零。
影响决策树的学习。
决策树依赖的是数据的统计信息。而独热码编码会把数据切分到零散的小空间上。在这些零散的小空间上,统计信息是不准确的,学习效果变差。
本质是因为独热码编码之后的特征的表达能力较差的。该特征的预测能力被人为的拆分成多份,每一份与其他特征竞争最优划分点都失败。最终该特征得到的重要性会比实际值低。
2.3 离散化
离散化用于将连续的数值属性转化为离散的数值属性。
是否使用特征离散化,这背后是:使用“海量离散特征+简单模型”,还是“少量连续特征+复杂模型”。
对于线性模型,通常使用“海量离散特征+简单模型”。
- 优点:模型简单。
- 缺点:特征工程比较困难。但是一旦有成功的经验就可以推广,并且可以很多人并行研究。
对于非线性模型(如深度学习),通常使用“少量连续特征+复杂模型”。
- 优点是:不需要进行复杂的特征工程。
- 缺点是:模型复杂。
2.3.1 分桶
离散化的常用方法是分桶。
将所有样本在连续的数值属性 $ MathJax-Element-355 $ 的取值从小到大排列 $ MathJax-Element-148 $ 。
然后从小到大依次选择分桶边界 $ MathJax-Element-149 $ 。其中:
- $ MathJax-Element-409 $ 为分桶的数量,它是一个超参数,需要人工指定。
- 每个桶的大小 $ MathJax-Element-151 $ 也是一个超参数,需要人工指定。
给定属性 $ MathJax-Element-355 $ 的取值 $ MathJax-Element-153 $ ,对其进行分桶:
- 如果 $ MathJax-Element-154 $ ,则分桶编号为 0。分桶后的属性的取值为 0 。
- 如果 $ MathJax-Element-155 $ ,则分桶编号为 $ MathJax-Element-430 $ 。分桶后的属性的取值为 $ MathJax-Element-430 $ 。
- 如果 $ MathJax-Element-158 $ ,则分桶编号为 $ MathJax-Element-409 $ 。分桶后的属性的取值为 $ MathJax-Element-409 $ 。
分桶的数量和边界通常需要人工指定。一般有两种方法:
根据业务领域的经验来指定。如:对年收入进行分桶时,根据2017年全国居民人均可支配收入约为 2.6 万元,可以选择桶的数量为5。其中:
- 年收入小于 1.3 万元(人均的0.5倍),则为分桶 0 。
- 年收入在 1.3万元 ~5.2 万元(人均的0.5~2倍),则为分桶 1 。
- 年收入在 5.3万元~26万元(人均的2倍~10倍),则为分桶 2 。
- 年收入在 26万元~260万元(人均的10倍~100倍),则为分桶 3 。
- 年收入超过 260万,则为分桶 4 。
根据模型指定。根据具体任务来训练分桶之后的数据集,通过超参数搜索来确定最优的分桶数量和分桶边界。
选择分桶大小时,有一些经验指导:
分桶大小必须足够小,使得桶内的属性取值变化对样本标记的影响基本在一个不大的范围。
即不能出现这样的情况:单个分桶的内部,样本标记输出变化很大。
分桶大小必须足够大,使每个桶内都有足够的样本。
如果桶内样本太少,则随机性太大,不具有统计意义上的说服力。
每个桶内的样本尽量分布均匀。
2.3.2 特性
在工业界很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列 0/1 的离散特征。
其优势有:
离散化之后得到的稀疏向量,内积乘法运算速度更快,计算结果方便存储。
离散化之后的特征对于异常数据具有很强的鲁棒性。
如:销售额作为特征,当销售额在
[30,100)
之间时,为1,否则为 0。如果未离散化,则一个异常值 10000 会给模型造成很大的干扰。由于其数值较大,它对权重的学习影响较大。逻辑回归属于广义线性模型,表达能力受限,只能描述线性关系。特征离散化之后,相当于引入了非线性,提升模型的表达能力,增强拟合能力。
假设某个连续特征 $ MathJax-Element-355 $ ,它离散化为 $ MathJax-Element-409 $ 个 0/1 特征 $ MathJax-Element-163 $ 。则:
$ MathJax-Element-164 $ 。其中 $ MathJax-Element-165 $ 是离散化之后的新的特征,它们的取值空间都是 $ MathJax-Element-166 $ 。
上式右侧是一个分段线性映射,其表达能力更强。
离散化之后可以进行特征交叉。假设有连续特征 $ MathJax-Element-355 $ ,离散化为 $ MathJax-Element-168 $ 个 0/1 特征;连续特征 $ MathJax-Element-430 $ ,离散化为 $ MathJax-Element-409 $ 特 0/1 特征,则分别进行离散化之后引入了 $ MathJax-Element-171 $ 个特征。
假设离散化时,并不是独立进行离散化,而是特征 $ MathJax-Element-172 $ 联合进行离散化,则可以得到 $ MathJax-Element-173 $ 个组合特征。这会进一步引入非线性,提高模型表达能力。
离散化之后,模型会更稳定。
如对销售额进行离散化,
[30,100)
作为一个区间。当销售额在40左右浮动时,并不会影响它离散化后的特征的值。但是处于区间连接处的值要小心处理,另外如何划分区间也是需要仔细处理。
特征离散化简化了逻辑回归模型,同时降低模型过拟合的风险。
能够对抗过拟合的原因:经过特征离散化之后,模型不再拟合特征的具体值,而是拟合特征的某个概念。因此能够对抗数据的扰动,更具有鲁棒性。
另外它使得模型要拟合的值大幅度降低,也降低了模型的复杂度。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论