特征向量降维常见的几种方法

高纬度特征带来的问题

这里就简单描述下。
通常我们会使用特征训练模型或特征矩阵求相似度。高维的特征带来的计算成本非常大,甚至完不成。同时一般高维的特征都比较稀疏,直接使用高维的特征训练需要样本量很大,难以拟合,模型效果不好。

训练模型时特征的筛选

通常我们训练模型时,会人为挑选特征,控制每类特征维度范围,比如年龄我们使用one-hot的方式表示,分成0-10,10-20...,>100这几个段,也就是将年龄映射成了11维,相比如果每个年龄表示一维,这也是一种降维的方法。

还有一种降维的方式是,假如我们人为不确定那种特征的好坏,我们可以将初选的所有特征(所有维度)哪去训练,将得到的模型中权重为0或与0相差甚微的特征(向量去掉),再重新训练,一直到比较合适为止。

工作中常用的两种降维方式

除上诉几种简单的降维方法。工作中还经常遇到两种情况需要降低特征维度。

embedding

拿用户来说,好的产品活跃用户非常多(如微信),假如用户数超过10亿。假设我们需要用用户做协同过滤,此时就需要知道用户间的相似度。不管使用哪种相似度计算方法(余弦,jaccard等等),我们首选要得到的是等维度的用户向量。假设我们通过某种办法(下面会详细描述)将每个用户都embedding成了128维的向量,我们就可以拿这个用户向量矩阵通过计算框架(如:faiss)去计算每个用户topN的相似用户及相似度。

又假如我们要把用户向量选做特征参与gbdt的训练,此时也是要首先获取用户的向量表示。

所以相比原始的10亿维(假设使用one-hot),embedding其实也是一种降维的方法。

embedding 常见的几种办法

todo 之后整理

纯粹的高维到高维

假如我们已经获取到了某类特征的向量表示,只是维度太高,比如新闻的属性标签行为(电影喜剧,音乐古典 …),标签行为一般都是几千上万,我们想对用户行为(对新闻点击评论点赞等)映射的属性标签做TF-IDF模型训练获取用户向量。这样用户的向量也就是几千上万维了,所有用户向量矩阵也就是稀疏矩阵。这时,我们就可以通过数学等方式进行降维了。
常用的降维方法有(详见wiki):

  • PCA
  • LDA
  • GDA
  • Autoencoder

每个降维方法的原理可自行查询。下面只给出几个使用示例。

降维示例

todo 后面补充

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章