<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

      別只會One-Hot了!20種分類編碼技巧讓你的特征工程更專業

      0
      分享至



      機器學習模型處理不了原始文本。無論是線性回歸、XGBoost還是神經網絡,遇到 "red"、"medium"、"CA" 這類分類變量都沒法直接處理。所以必須把它們轉成數字這個過程就是分類編碼。

      大家入門時肯定都學過獨熱編碼或序數編碼,但編碼方法其實非常多。目標編碼、CatBoost編碼、James-Stein編碼這些高級技術,用對了能給模型帶來質的飛躍,尤其面對高基數特征的時候。

      編碼到底有多重要

      拿 "Toyota" 舉例,它本身沒有數值含義,但模型只認數字:

      {"Toyota": 0, "Ford": 1, "Honda": 2}

      或者寫成向量形式:

      [0, 1, 0]

      更高級的做法是直接編碼成目標相關的數值:

      Toyota → +0.12 mean adjusted uplift in target

      編碼方式選得好不好,直接影響模型準確率、可解釋性、過擬合程度、訓練速度、內存占用,還有對稀有類別的處理能力。

      示例代碼準備

      后面所有例子都基于這個簡單數據集:

      import pandas as pd
      from sklearn.model_selection import train_test_split
      import category_encoders as ce
      from sklearn.linear_model import LogisticRegression
      df = pd.DataFrame({
      "color": ["red", "blue", "green", "green", "blue", "red"],
      "city": ["NY", "LA", "NY", "SF", "LA", "NY"],
      "target": [1, 0, 1, 0, 0, 1]
      })
      X = df.drop("target", axis=1)
      y = df["target"]

      1、序數編碼 Ordinal Encoding

      最簡單粗暴的方法,給每個類別分配一個整數。red是0,blue是1,green是2。

      XGBoost、LightGBM這類樹模型用這個就夠了。另外當類別本身有順序含義(比如small/medium/large)時也很合適。

      encoder = ce.OrdinalEncoder(cols=["color"])
      X_trans = encoder.fit_transform(X, y)

      2、獨熱編碼 One-Hot Encoding

      每個類別單獨開一列,是就標1,不是就標0。



      線性回歸、邏輯回歸、神經網絡經常用這個。不過類別太多的話列數會爆炸,低基數特征才適合。

      encoder = ce.OneHotEncoder(cols=["color"], use_cat_names=True)
      X_trans = encoder.fit_transform(X)

      3、 二進制編碼 Binary Encoding

      把類別索引轉成二進制。比如索引5變成101,拆成三列。

      這個方法在類別數量中等偏多(50-500個)的時候很好使,既保持了稀疏性又比獨熱編碼省內存。

      encoder = ce.BinaryEncoder(cols=["city"])
      X_trans = encoder.fit_transform(X)

      4、Base-N編碼

      二進制編碼的泛化版本,可以用任意進制。base=3時,索引5就變成 "12"。想精細控制輸出維度的話可以試試。

      encoder = ce.BaseNEncoder(cols=["city"], base=3)
      X_trans = encoder.fit_transform(X)

      5、哈希編碼 Hashing Encoding

      用哈希函數把類別映射到固定數量的列上。速度極快,輸出寬度固定,也不用存儲類別映射表。

      缺點就是:會有哈希沖突而且結果不可解釋。

      encoder = ce.HashingEncoder(cols=["city"], n_components=8)
      X_trans = encoder.fit_transform(X)

      6、Helmert編碼

      正交對比編碼的一種,每個類別跟它后面所有類別的均值做比較。統計建模和分類對比回歸分析會用到。

      encoder = ce.HelmertEncoder(cols=["color"])
      X_trans = encoder.fit_transform(X, y)

      7、求和編碼 Sum Encoding

      也叫偏差編碼。每個類別跟總體均值比較,而不是跟某個基準類別比。

      encoder = ce.SumEncoder(cols=["color"])
      X_trans = encoder.fit_transform(X, y)

      8、多項式編碼 Polynomial Encoding

      給有序類別生成線性、二次、三次對比項。如果懷疑類別對目標有非線性影響,可以考慮這個。

      encoder = ce.PolynomialEncoder(cols=["color"])
      X_trans = encoder.fit_transform(X, y)

      9、向后差分編碼 Backward Difference Encoding

      每個類別跟前面所有類別的均值比較,跟Helmert正好相反。

      encoder = ce.BackwardDifferenceEncoder(cols=["color"])
      X_trans = encoder.fit_transform(X, y)

      10、計數編碼 Count Encoding

      直接用類別出現的次數替換類別值。



      高基數特征用這個效果不錯,計算快、結果穩定。只要在訓練集上fit就不會有數據泄露問題。

      encoder = ce.CountEncoder(cols=["city"])
      X_trans = encoder.fit_transform(X)

      11. 目標編碼 Target Encoding

      把每個類別替換成該類別下目標變量的均值。



      威力很大但有個坑,就是容易造成目標泄露。必須配合平滑處理或者用交叉驗證的方式來做。

      encoder = ce.TargetEncoder(cols=["city"])
      X_trans = encoder.fit_transform(X, y)

      12、CatBoost編碼

      CatBoost編碼是目標編碼的改良版。編碼每一行時只用它前面的行來計算,這樣就大大降低了泄露風險。

      這是目前最安全的目標編碼方案,高基數特征、時序數據都能用,效果很穩。

      encoder = ce.CatBoostEncoder(cols=["city"])
      X_trans = encoder.fit_transform(X, y)

      13、留一法編碼 Leave-One-Out Encoding

      計算類別的目標均值時把當前行排除掉。既保留了目標編碼的效果,又減輕了泄露。

      encoder = ce.LeaveOneOutEncoder(cols=["city"])
      X_trans = encoder.fit_transform(X, y)

      14、M估計編碼 M-Estimate Encoding

      用貝葉斯思想對目標編碼做平滑。



      高基數和噪聲目標場景下表現不錯。

      encoder = ce.MEstimateEncoder(cols=["city"], m=5)
      X_trans = encoder.fit_transform(X, y)

      15、WOE證據權重編碼

      這是信用評分領域的老朋友了。



      邏輯回歸配WOE是經典組合,可解釋性很強。

      encoder = ce.WOEEncoder(cols=["city"])
      X_trans = encoder.fit_transform(X, y)

      16、James-Stein編碼

      基于James-Stein估計的收縮編碼器。能有效降低方差,做分類變量回歸時效果很好。

      encoder = ce.JamesSteinEncoder(cols=["city"])
      X_trans = encoder.fit_transform(X, y)

      17、GLMM編碼

      用廣義線性混合模型來編碼。處理層次結構數據或者類別組很大的時候可以一試。

      encoder = ce.GLMMEncoder(cols=["city"])
      X_trans = encoder.fit_transform(X, y)

      18、分位數編碼 Quantile Encoding

      不用均值,用目標分布的分位數來編碼。

      encoder = ce.QuantileEncoder(cols=["city"], quantile=0.5)
      X_trans = encoder.fit_transform(X, y)

      19、RankHot編碼

      獨熱編碼的變體,列按類別頻率排序。對樹模型友好。

      encoder = ce.RankHotEncoder(cols=["city"])
      X_trans = encoder.fit_transform(X)

      20、格雷編碼 Gray Encoding

      用格雷碼表示類別,相鄰編碼只差一位。

      encoder = ce.GrayEncoder(cols=["city"])
      X_trans = encoder.fit_transform(X)

      怎么選編碼器

      低基數(<10個類別):獨熱、二進制、序數都行。統計模型的話可以試試求和、Helmert、多項式編碼。

      中等基數(10-100):二進制、BaseN、CatBoost、帶平滑的目標編碼。

      高基數(100-50000):計數編碼、CatBoost編碼(首選)、留一法、M估計、帶交叉驗證的目標編碼,內存緊張就用哈希編碼。

      常見的坑

      目標編碼泄露:用CatBoost編碼、交叉驗證或留一法來規避。

      樹模型誤讀序數整數:樹模型可能會把序數編碼的數字當連續變量處理,換成獨熱或目標編碼更穩妥。

      獨熱編碼維度爆炸:類別太多就別用獨熱了,換二進制、BaseN或哈希。

      稀有類別噪聲:M估計、James-Stein或目標平滑能緩解這個問題。

      總結

      分類編碼是特征工程里最容易被忽視卻又最能出效果的環節。scikit-learn自帶的編碼器只是冰山一角,category_encoders這個庫才是真正的百寶箱:統計編碼、貝葉斯編碼、哈希編碼、對比編碼應有盡有,用好了模型效果能上一個臺階。

      https://avoid.overfit.cn/post/899f24e435ac4733ac4b981a0b3629f4

      作者:Abish Pius

      特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      伊朗最大“內鬼”被抓?革命衛隊:勾結以色列,指揮官卡尼被拘!

      伊朗最大“內鬼”被抓?革命衛隊:勾結以色列,指揮官卡尼被拘!

      青青子衿
      2026-03-05 11:57:03
      打瘋了!東契奇首節狂轟22+5三分 生涯30次單節20+升歷史第四

      打瘋了!東契奇首節狂轟22+5三分 生涯30次單節20+升歷史第四

      醉臥浮生
      2026-03-07 12:13:33
      伊拉克庫爾德第一夫人宣言:我們不是任人驅使的炮灰!

      伊拉克庫爾德第一夫人宣言:我們不是任人驅使的炮灰!

      勝研集
      2026-03-06 13:44:23
      廣東一女子不愿上班常年坐街邊,因長得好看被路人投喂:又懶又饞

      廣東一女子不愿上班常年坐街邊,因長得好看被路人投喂:又懶又饞

      明智家庭教育
      2026-03-06 17:19:16
      美以伊軍事沖突最大副作用,是斬斷了俄羅斯的“救命稻草”

      美以伊軍事沖突最大副作用,是斬斷了俄羅斯的“救命稻草”

      廖保平
      2026-03-05 12:08:52
      “不想為以色列賣命”:帝國最后的遮羞布,美式民主終成笑話

      “不想為以色列賣命”:帝國最后的遮羞布,美式民主終成笑話

      怪口歷史的K先生
      2026-03-06 15:22:51
      為何關閉霍爾木茲海峽就能掐全球脖子?因為伊朗原油是全世界最好的

      為何關閉霍爾木茲海峽就能掐全球脖子?因為伊朗原油是全世界最好的

      風向觀察
      2026-03-06 21:31:15
      兩會不到3天,5大好消息傳來!老百姓暗暗叫好:希望國家盡快落實

      兩會不到3天,5大好消息傳來!老百姓暗暗叫好:希望國家盡快落實

      談史論天地
      2026-03-07 06:54:29
      1979年,張國燾凍死在養老院,許世友:除了主席,沒人是他的對手

      1979年,張國燾凍死在養老院,許世友:除了主席,沒人是他的對手

      文史季季紅
      2026-03-05 13:35:03
      寫入教科書的一天:F-35在德黑蘭完成全球首次實戰空對空擊殺

      寫入教科書的一天:F-35在德黑蘭完成全球首次實戰空對空擊殺

      斌聞天下
      2026-03-06 07:30:03
      伊方:因美以襲擊喪生的伊朗人三成為青少年

      伊方:因美以襲擊喪生的伊朗人三成為青少年

      環球網資訊
      2026-03-07 06:39:29
      為什么美國的華人華裔地位那么低 網友從各方面分析 真就那樣

      為什么美國的華人華裔地位那么低 網友從各方面分析 真就那樣

      侃神評故事
      2026-03-06 07:10:03
      我包養過一個女大學生,七年花了一千多萬

      我包養過一個女大學生,七年花了一千多萬

      煙火人間故事匯
      2026-03-06 23:05:03
      性壓抑已經變態至此了?

      性壓抑已經變態至此了?

      黯泉
      2026-03-07 11:28:43
      蘿莉島,是進入核心圈層的投名狀,你猜他們為什么都穿紅皮鞋

      蘿莉島,是進入核心圈層的投名狀,你猜他們為什么都穿紅皮鞋

      百曉生談歷史
      2026-03-05 22:00:08
      一份“煮熟的三文魚”火了,原來低認知的家長,真能搞出人命!

      一份“煮熟的三文魚”火了,原來低認知的家長,真能搞出人命!

      妍妍教育日記
      2026-03-07 08:45:06
      伊朗萬萬沒想到,自家王牌武器遭到破解,美軍多了一張底牌

      伊朗萬萬沒想到,自家王牌武器遭到破解,美軍多了一張底牌

      空天力量
      2026-03-06 13:09:18
      上次被發現還是1911年!上海寶山驚現1只,專家:可能是坐船來的

      上次被發現還是1911年!上海寶山驚現1只,專家:可能是坐船來的

      萬象硬核本尊
      2026-03-06 23:54:22
      女子實名舉報某團外賣:不上大額券就讓我變成“凌晨營業”,你們真黑!

      女子實名舉報某團外賣:不上大額券就讓我變成“凌晨營業”,你們真黑!

      回旋鏢
      2026-03-06 21:13:59
      塔圖姆復出15分12板7助攻凱爾特人大勝獨行俠,布朗24分7板7助

      塔圖姆復出15分12板7助攻凱爾特人大勝獨行俠,布朗24分7板7助

      湖人崛起
      2026-03-07 10:25:09
      2026-03-07 13:43:00
      deephub incentive-icons
      deephub
      CV NLP和數據挖掘知識
      1940文章數 1456關注度
      往期回顧 全部

      科技要聞

      OpenClaw爆火,六位"養蝦人"自述與AI共生

      頭條要聞

      特朗普突然放話"先解決伊朗后解決古巴" 梅西聽懵了

      頭條要聞

      特朗普突然放話"先解決伊朗后解決古巴" 梅西聽懵了

      體育要聞

      塔圖姆歸來:凱爾特人的春之綠

      娛樂要聞

      周杰倫田馥甄的“JH戀” 被扒得底朝天

      財經要聞

      針對"不敢休、不讓休"怪圈 國家出手了

      汽車要聞

      逃離ICU,上汽通用“止血”企穩

      態度原創

      時尚
      本地
      親子
      旅游
      家居

      這些才是適合普通人的穿搭!搭配腰帶、多穿牛仔褲,簡單舒適

      本地新聞

      食味印象|一口入魂!康樂烤肉串起千年絲路香

      親子要聞

      六個月寶寶查出散光,原因竟是父母長期身旁玩手機,媽媽懵了:我一直以為他閉著眼就沒事

      旅游要聞

      文旅部部長:7名外國游客到上海旅游,買了40箱貨;“成為中國人”成了熱詞

      家居要聞

      暖棕撞色 輕法奶油風

      無障礙瀏覽 進入關懷版