特徵向量降維常見的幾種方法

高緯度特徵帶來的問題

這裏就簡單描述下。
通常我們會使用特徵訓練模型或特徵矩陣求相似度。高維的特徵帶來的計算成本非常大,甚至完不成。同時一般高維的特徵都比較稀疏,直接使用高維的特徵訓練需要樣本量很大,難以擬合,模型效果不好。

訓練模型時特徵的篩選

通常我們訓練模型時,會人爲挑選特徵,控制每類特徵維度範圍,比如年齡我們使用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 後面補充

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