對於category的特徵,我們通常有兩種方法把它變成乙個數字:label編碼和hash編碼;使用sklearn的labelencoder可以實現把label編碼成數字。
現在主要介紹使用hash方法對類別進行編碼
1.在大型工業場景下,會源源不斷地出現新的item,新的使用者,新的id,原先的one-hot和w必須得到不斷擴充,一種有效的方法是對特徵本身做hash,將得到的數字作為它的id,只要每台機器的hash演算法一樣,出來的值就是一樣的。
2.特徵抽取中,可以對query id化,query的3-gram稀疏特徵,即:在query上做步長為3的滑窗,然後加hash方法轉為id,如murmurhash,這樣1個query可以得到多個稀疏id特徵,分別進行嵌入,然後sum-pooling轉成1個向量。
3.hash編碼是把每乙個category的字串通過hash函式對映為0~乙個固定的範圍。它的優點是不用提前知道category的所有可能值。
4.hash表示的最大好處是它可以處理(至少是處理,處理的好不好是另一回事)所有型別的特徵,只要你是能寫出來的,就可以用string表示,只要你能用string表示,你就能hash。實際中完全可以先全部hash跑起來,然後再細分有些特徵需不需要特別處理。
5.業內有很多優質的hash方法,比如murmurhash、cityhash。
6.經過雜湊處理的資料將原始字串對映到固定長度的資料。系統通過某種演算法生成經過雜湊處理的資料,這樣可以保護原文的安全性。那麼如果類別屬性有上百種,並且分布比較平均那麼直接用獨熱編碼就會造成特徵冗餘或維度**的問題。
資料hash方法轉為id示例(基於murmurhash):
實際使用時直接使用fh.transform做對映
靜態庫推薦的用例場景
靜態庫是一種最基礎的二進位制 共享方式,並在動態庫出現以前已經被使用了很長一段。在此期間,動態庫這種更為複雜的模式逐漸成為了共享二進位制 的主流。雖說如此,我們還是會在少數應用場景中使用靜態庫。在實現各種核心演算法時使用靜態庫還是非常合適的,無論是對於一些像查詢和排序這樣的基本演算法,還是一些非常複...
類別特徵的獨熱編碼和二進位制編碼
我們在建模之前,一般需要對資料進行預處理。對於分類變數,一般模型不能直接作為變數輸入,需要進行編碼。分類變數常用編碼方式如下 有序變數 序號編碼 無序變數 獨熱編碼 二進位制編碼 下面為大家介紹獨熱編碼和二進位制編碼之間的區別。1 獨熱編碼 獨熱編碼會將變數的不同取值 n種取值 分別賦予乙個只有1位...
特殊場景下的this指向
1 使用var宣告的全域性變數,在windows物件中,但let宣告的全域性變數,並不在windows物件中。let a 全域性變數 var a 全域性變數 let obj obj.foo 輸出undefined,如果使用var a定義變數,則輸出全域性變數 分析 箭頭函式中this直接指向的是呼叫...