国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

機器學習特征工程:分類變量的數值化處理方法

穎脈Imgtec ? 2026-02-10 15:58 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

編碼是機器學習流程里最容易被低估的環節之一,模型沒辦法直接處理文本形式的分類數據,尺寸(Small/Medium/Large)、顏色(Red/Blue/Green)、城市、支付方式等都是典型的分類特征,必須轉成數值才能輸入到模型中。

50603b9c-0656-11f1-96ea-92fbcf53809c.jpg那么問題來了:為什么不直接把 Red 編成 1,Blue 編成 2?這個做法看起來簡單粗暴,但其實藏著大坑。下面用一個小數據集來說明。


數據集概述

Feature | Description
-------------------|----------------------------------------------------------
customer_id | Unique customer identifier
gender | Male or Female
education_level | High School → Associate → Bachelor's → Master's → PhD
employment_status | Full-time, Part-time, Self-employed, Unemployed
city | Customer's city (50+ US cities)
product_category | Electronics, Clothing, Books, Sports, Home & Garden, Beauty, Food & Beverage
payment_method | Credit Card, Debit Card, PayPal, Cash
customer_tier | Bronze → Silver → Gold → Platinum
satisfaction_level | Dissatisfied → Neutral → Satisfied → Very Satisfied
credit_score_range | Poor → Fair → Good → Very Good → Excellent
purchase_amount | Purchase amount in USD
will_return | Yes or No (target variable)


Ordinal Encoding

Ordinal Encoding 思路很簡單:給每個類別分配一個數字,但是模型會把這些數字當作有序的。

假設對payment_method做編碼:Cash = 1,PayPal = 2。模型會認為 Cash < PayPal,仿佛 PayPal 比 Cash "更好" 或 "更大"。但支付方式之間根本沒有這種大小關系因為它們只是不同的選項而已。

什么時候 Ordinal Encoding 才合適?當數據本身就存在真實的順序關系時。比如education_level:High School < Associate < Bachelor's < Master's < PhD。這是客觀存在的遞進關系,用數字表示完全沒問題,模型的理解也是對的。

所以 Ordinal Encoding 的使用場景很明確:只用于那些排名確實有意義的特征。

from sklearn.preprocessing import OrdinalEncoder
ordEnc = OrdinalEncoder()
print(ordEnc.fit_transform(data[["education_level"]])[:5])

# Output
"""
[[1.]
[2.]
[3.]
[4.]
[2.]]
"""


One-Hot Encoding

One-Hot Encoding 換了個思路:不用數字而是給每個類別創建一列。payment_method有 4 個值,就變成 4 列,每行只有一個位置是 1,其余全是 0。

| payment_cash | payment_credit_card | payment_debit_card | payment_paypal |
|--------------|---------------------|--------------------|----------------|
| 1 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 0 | 0 | 1 |

這樣做的好處是消除了虛假的順序關系,所有類別被平等對待和線性模型配合得也很好。

那么代價是什么?維度會膨脹。customer_tier和payment_method各 4 個值,合起來就是 8 列。如果遇到城市這種特征,50 多個類別直接炸成 50 多列,維度災難就來了。

from sklearn.preprocessing import OneHotEncoder
oneEnc = OneHotEncoder()
print(oneEnc.fit_transform(data[["customer_tier", "payment_method"]]).toarray()[:5])

#output
"""
[[0. 1. 0. 0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0. 0. 1. 0.]
[0. 0. 1. 0. 0. 0. 0. 1.]
[0. 1. 0. 0. 0. 1. 0. 0.]
[1. 0. 0. 0. 1. 0. 0. 0.]]
"""


Target Encoding

面對高基數特征(比如 City 有 50 多個值)One-Hot Encoding 會把特征空間撐得太大,Target Encoding 的做法是:用每個類別對應的目標變量均值來替換。也叫 Mean Encoding。

舉個例子,目標變量是will_return(Yes = 1,No = 0):

| City | will_return |
|-----------|-------------|
| Austin | 1 |
| Austin | 1 |
| New York | 1 |
| New York | 0 |
| New York | 0 |
| New York | 0 |
| New York | 1 |

計算每個城市的目標均值:Austin → (1 + 1) / 2 = 1.0,New York → (1 + 0 + 0 + 0 + 1) / 5 = 0.4,這樣得到的編碼結果就是:

| City | Encoded Value |
|----------|----------------|
| Austin | 1.0 |
| New York | 0.4 |

這里有一個坑,Austin 只出現了 2 次而且剛好都是正例,編碼值直接變成 1.0。模型可能會 "學到" 一個規律:看到 Austin 就預測 will_return = Yes。

但這個 "規律" 完全是數據量不足造成的假象。樣本太少均值就很不可靠。

Smoothing 的思路是把類別均值往全局均值方向 "拉" 一拉。公式:

Encoded Value = (w * Category Mean) + ((1 - w) * Global Mean)

其中 Category Mean 是該類別的目標均值Global Mean 是整個數據集的目標均值,w 是一個和樣本量相關的權重。樣本越少w 越小,編碼值就越接近全局均值;樣本越多類別自己的均值就越占主導。這能有效抑制小樣本帶來的過擬合。

另一個問題就是 Data Leakage。如果用全量數據計算編碼值再把這個編碼喂給模型,模型等于直接 "看到了" 答案的統計信息。比如模型發現 City = 0.34 對應的樣本大概率是 will_return = Yes,那它干脆走捷徑,不從其他特征里學東西了。

所以就要引入交叉驗證,以 5 折為例:把數據分成 5 份,對第 1 份的數據,用第 2 到第 5 份來計算編碼;對第 2 份的數據,用第 1、3、4、5 份來計算編碼;以此類推。每個樣本的編碼值都來自于它 "沒見過" 的數據,泄露就切斷了。

但是副作用是同一個城市在不同折里的編碼值會略有差異:New York 在 Fold 1 里可能是 0.50,在 Fold 2 里是 0.45。但這反而是好事,這樣可以讓模型被迫學習更一般化的模式而不是死記某個精確數值。

Target Encoding 的優點:避免維度爆炸,適合高基數特征,還能把目標變量的統計信息編進去。

但用的時候得小心:必須加 Smoothing 防止小樣本過擬合,必須用交叉驗證防止數據泄露。

from sklearn.preprocessing import TargetEncoder

data["will_return_int"] = data["will_return"].map({"Yes": 1, "No": 0})
tarEnc = TargetEncoder(smooth="auto", cv=5) # Those are the default value
print(data[["city"]][:5])
print(tarEnc.fit_transform(data[["city"]], data["will_return_int"])[:5])

"""
city
0 Houston
1 Phoenix
2 Chicago
3 Phoenix
4 Phoenix

[[0.85364466]
[0.69074308]
[0.65024828]
[0.74928653]
[0.81359495]]
"""


總結

三種編碼方法各有適用場景,選擇取決于特征本身的性質。

實際操作中可以這樣判斷:特征有天然順序就用 Ordinal Encoding;沒有順序、類別數量也不多就用 One-Hot Encoding;類別太多就上 Target Encoding,記得配合 Smoothing 和交叉驗證。

真實項目里,一個數據集往往會同時用到這三種方法。

本文轉自:DeepHub IMBA

作者: adham ayman

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編碼
    +關注

    關注

    6

    文章

    1037

    瀏覽量

    56910
  • 機器學習
    +關注

    關注

    66

    文章

    8550

    瀏覽量

    136797
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    機器學習算法的特征工程與意義詳解

    1、特征工程與意義 特征就是從數據中抽取出來的對結果預測有用的信息。 特征工程是使用專業知識背景知識和技巧
    發表于 10-08 15:24 ?3405次閱讀
    <b class='flag-5'>機器</b><b class='flag-5'>學習</b>算法的<b class='flag-5'>特征</b><b class='flag-5'>工程</b>與意義詳解

    【下載】《機器學習》+《機器學習實戰》

    ]目錄:第一部分 分類第1章 機器學習基礎  2第2章 k-近鄰算法   15第3章 決策樹   32第4章 基于概率論的分類方法:樸素貝葉
    發表于 06-01 15:49

    如何選擇機器學習的各種方法

    每當提到機器學習,大家總是被其中的各種各樣的算法和方法搞暈,覺得無從下手。確實,機器學習的各種套路確實不少,但是如果掌握了正確的路徑和
    發表于 03-07 20:18

    圖像分類方法之深度學習與傳統機器學習

    實際情況非常復雜,傳統的分類方法不堪重負。現在,我們不再試圖用代碼來描述每一個圖像類別,決定轉而使用機器學習方法
    發表于 09-28 19:43 ?0次下載

    機器學習應用中的常見問題分類問題你了解多少

    分類問題是機器學習應用中的常見問題,而二分類問題是其中的典型,例如垃圾郵件的識別。本文基于UCI機器學習
    的頭像 發表于 03-29 16:40 ?1.6w次閱讀
    <b class='flag-5'>機器</b><b class='flag-5'>學習</b>應用中的常見問題<b class='flag-5'>分類</b>問題你了解多少

    想掌握機器學習技術?從了解特征工程開始

    問題。解決這些問題的方法與數據預處理方法機器學習中被統稱為特征
    的頭像 發表于 12-05 09:36 ?2549次閱讀

    機器學習特征工程是將原始的輸入數據轉換成特征

    對于類別數量很多的分類變量可以采用特征哈希(Hashing Trick),特征哈希的目標就是將一個數據點轉換成一個向量。利用的是哈希函數將原始數據轉換成指定范圍內的散列值,相比較獨熱模
    的頭像 發表于 04-19 16:42 ?5177次閱讀
    <b class='flag-5'>機器</b><b class='flag-5'>學習</b>的<b class='flag-5'>特征</b><b class='flag-5'>工程</b>是將原始的輸入數據轉換成<b class='flag-5'>特征</b>

    機器學習特征工程的五個方面優點

    特征工程是用數學轉換的方法將原始輸入數據轉換為用于機器學習模型的新特征。
    的頭像 發表于 03-15 16:57 ?4557次閱讀

    常見的11個分類變量編碼方法

    機器學習算法只接受數值輸入,所以如果我們遇到分類特征的時候都會對分類
    的頭像 發表于 11-28 15:45 ?4956次閱讀

    機器學習算法學習特征工程1

    特征工程機器學習過程中的關鍵步驟,涉及將原始數據轉換為機器學習算法可以有效使用的格式。在本篇博
    的頭像 發表于 04-19 11:38 ?1640次閱讀
    <b class='flag-5'>機器</b><b class='flag-5'>學習</b>算法<b class='flag-5'>學習</b>之<b class='flag-5'>特征</b><b class='flag-5'>工程</b>1

    機器學習算法學習特征工程2

    特征工程機器學習過程中的關鍵步驟,涉及將原始數據轉換為機器學習算法可以有效使用的格式。在本篇博
    的頭像 發表于 04-19 11:38 ?1555次閱讀
    <b class='flag-5'>機器</b><b class='flag-5'>學習</b>算法<b class='flag-5'>學習</b>之<b class='flag-5'>特征</b><b class='flag-5'>工程</b>2

    機器學習算法學習特征工程3

    特征工程機器學習過程中的關鍵步驟,涉及將原始數據轉換為機器學習算法可以有效使用的格式。在本篇博
    的頭像 發表于 04-19 11:38 ?1640次閱讀
    <b class='flag-5'>機器</b><b class='flag-5'>學習</b>算法<b class='flag-5'>學習</b>之<b class='flag-5'>特征</b><b class='flag-5'>工程</b>3

    什么是特征工程?機器學習特征工程詳解解讀

    One-hot 編碼對于用機器學習模型能夠理解的簡單數字數據替換分類數據很有用。
    發表于 12-28 17:14 ?749次閱讀
    什么是<b class='flag-5'>特征</b><b class='flag-5'>工程</b>?<b class='flag-5'>機器</b><b class='flag-5'>學習</b>的<b class='flag-5'>特征</b><b class='flag-5'>工程</b>詳解解讀

    深度學習中的時間序列分類方法

    的發展,基于深度學習的TSC方法逐漸展現出其強大的自動特征提取和分類能力。本文將從多個角度對深度學習在時間序列
    的頭像 發表于 07-09 15:54 ?3083次閱讀

    機器學習中的數據預處理特征工程

    機器學習的整個流程中,數據預處理特征工程是兩個至關重要的步驟。它們直接決定了模型的輸入質量,進而影響模型的訓練效果和泛化能力。本文將從數
    的頭像 發表于 07-09 15:57 ?2435次閱讀