chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

機(jī)器學(xué)習(xí)特征工程:分類變量的數(shù)值化處理方法

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

掃碼添加小助手

加入工程師交流群

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

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


數(shù)據(jù)集概述

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 思路很簡單:給每個(gè)類別分配一個(gè)數(shù)字,但是模型會(huì)把這些數(shù)字當(dāng)作有序的。

假設(shè)對(duì)payment_method做編碼:Cash = 1,PayPal = 2。模型會(huì)認(rèn)為 Cash < PayPal,仿佛 PayPal 比 Cash "更好" 或 "更大"。但支付方式之間根本沒有這種大小關(guān)系因?yàn)樗鼈冎皇遣煌倪x項(xiàng)而已。

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

所以 Ordinal Encoding 的使用場(chǎng)景很明確:只用于那些排名確實(shí)有意義的特征。

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 換了個(gè)思路:不用數(shù)字而是給每個(gè)類別創(chuàng)建一列。payment_method有 4 個(gè)值,就變成 4 列,每行只有一個(gè)位置是 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 |

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

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

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

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

舉個(gè)例子,目標(biāo)變量是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 |

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

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

這里有一個(gè)坑,Austin 只出現(xiàn)了 2 次而且剛好都是正例,編碼值直接變成 1.0。模型可能會(huì) "學(xué)到" 一個(gè)規(guī)律:看到 Austin 就預(yù)測(cè) will_return = Yes。

但這個(gè) "規(guī)律" 完全是數(shù)據(jù)量不足造成的假象。樣本太少均值就很不可靠。

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

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

其中 Category Mean 是該類別的目標(biāo)均值Global Mean 是整個(gè)數(shù)據(jù)集的目標(biāo)均值,w 是一個(gè)和樣本量相關(guān)的權(quán)重。樣本越少w 越小,編碼值就越接近全局均值;樣本越多類別自己的均值就越占主導(dǎo)。這能有效抑制小樣本帶來的過擬合。

另一個(gè)問題就是 Data Leakage。如果用全量數(shù)據(jù)計(jì)算編碼值再把這個(gè)編碼喂給模型,模型等于直接 "看到了" 答案的統(tǒng)計(jì)信息。比如模型發(fā)現(xiàn) City = 0.34 對(duì)應(yīng)的樣本大概率是 will_return = Yes,那它干脆走捷徑,不從其他特征里學(xué)東西了。

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

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

Target Encoding 的優(yōu)點(diǎn):避免維度爆炸,適合高基數(shù)特征,還能把目標(biāo)變量的統(tǒng)計(jì)信息編進(jìn)去。

但用的時(shí)候得小心:必須加 Smoothing 防止小樣本過擬合,必須用交叉驗(yàn)證防止數(shù)據(jù)泄露。

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]]
"""


總結(jié)

三種編碼方法各有適用場(chǎng)景,選擇取決于特征本身的性質(zhì)。

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

真實(shí)項(xiàng)目里,一個(gè)數(shù)據(jù)集往往會(huì)同時(shí)用到這三種方法。

本文轉(zhuǎn)自:DeepHub IMBA

作者: adham ayman

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    1037

    瀏覽量

    56913
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8550

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    機(jī)器學(xué)習(xí)算法的特征工程與意義詳解

    1、特征工程與意義 特征就是從數(shù)據(jù)中抽取出來的對(duì)結(jié)果預(yù)測(cè)有用的信息。 特征工程是使用專業(yè)知識(shí)背景知識(shí)和技巧
    發(fā)表于 10-08 15:24 ?3405次閱讀
    <b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b>算法的<b class='flag-5'>特征</b><b class='flag-5'>工程</b>與意義詳解

    【下載】《機(jī)器學(xué)習(xí)》+《機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》

    ]目錄:第一部分 分類第1章 機(jī)器學(xué)習(xí)基礎(chǔ)  2第2章 k-近鄰算法   15第3章 決策樹   32第4章 基于概率論的分類方法:樸素貝葉
    發(fā)表于 06-01 15:49

    如何選擇機(jī)器學(xué)習(xí)的各種方法

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

    圖像分類方法之深度學(xué)習(xí)與傳統(tǒng)機(jī)器學(xué)習(xí)

    實(shí)際情況非常復(fù)雜,傳統(tǒng)的分類方法不堪重負(fù)。現(xiàn)在,我們不再試圖用代碼來描述每一個(gè)圖像類別,決定轉(zhuǎn)而使用機(jī)器學(xué)習(xí)方法
    發(fā)表于 09-28 19:43 ?0次下載

    機(jī)器學(xué)習(xí)應(yīng)用中的常見問題分類問題你了解多少

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

    想掌握機(jī)器學(xué)習(xí)技術(shù)?從了解特征工程開始

    問題。解決這些問題的方法與數(shù)據(jù)預(yù)處理方法機(jī)器學(xué)習(xí)中被統(tǒng)稱為特征
    的頭像 發(fā)表于 12-05 09:36 ?2549次閱讀

    機(jī)器學(xué)習(xí)特征工程是將原始的輸入數(shù)據(jù)轉(zhuǎn)換成特征

    對(duì)于類別數(shù)量很多的分類變量可以采用特征哈希(Hashing Trick),特征哈希的目標(biāo)就是將一個(gè)數(shù)據(jù)點(diǎn)轉(zhuǎn)換成一個(gè)向量。利用的是哈希函數(shù)將原始數(shù)據(jù)轉(zhuǎn)換成指定范圍內(nèi)的散列值,相比較獨(dú)熱模
    的頭像 發(fā)表于 04-19 16:42 ?5178次閱讀
    <b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b>的<b class='flag-5'>特征</b><b class='flag-5'>工程</b>是將原始的輸入數(shù)據(jù)轉(zhuǎn)換成<b class='flag-5'>特征</b>

    機(jī)器學(xué)習(xí)特征工程的五個(gè)方面優(yōu)點(diǎn)

    特征工程是用數(shù)學(xué)轉(zhuǎn)換的方法將原始輸入數(shù)據(jù)轉(zhuǎn)換為用于機(jī)器學(xué)習(xí)模型的新特征
    的頭像 發(fā)表于 03-15 16:57 ?4557次閱讀

    常見的11個(gè)分類變量編碼方法

    機(jī)器學(xué)習(xí)算法只接受數(shù)值輸入,所以如果我們遇到分類特征的時(shí)候都會(huì)對(duì)分類
    的頭像 發(fā)表于 11-28 15:45 ?4957次閱讀

    機(jī)器學(xué)習(xí)算法學(xué)習(xí)特征工程1

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

    機(jī)器學(xué)習(xí)算法學(xué)習(xí)特征工程2

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

    機(jī)器學(xué)習(xí)算法學(xué)習(xí)特征工程3

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

    什么是特征工程?機(jī)器學(xué)習(xí)特征工程詳解解讀

    One-hot 編碼對(duì)于用機(jī)器學(xué)習(xí)模型能夠理解的簡單數(shù)字?jǐn)?shù)據(jù)替換分類數(shù)據(jù)很有用。
    發(fā)表于 12-28 17:14 ?750次閱讀
    什么是<b class='flag-5'>特征</b><b class='flag-5'>工程</b>?<b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b>的<b class='flag-5'>特征</b><b class='flag-5'>工程</b>詳解解讀

    深度學(xué)習(xí)中的時(shí)間序列分類方法

    的發(fā)展,基于深度學(xué)習(xí)的TSC方法逐漸展現(xiàn)出其強(qiáng)大的自動(dòng)特征提取和分類能力。本文將從多個(gè)角度對(duì)深度學(xué)習(xí)在時(shí)間序列
    的頭像 發(fā)表于 07-09 15:54 ?3084次閱讀

    機(jī)器學(xué)習(xí)中的數(shù)據(jù)預(yù)處理特征工程

    機(jī)器學(xué)習(xí)的整個(gè)流程中,數(shù)據(jù)預(yù)處理特征工程是兩個(gè)至關(guān)重要的步驟。它們直接決定了模型的輸入質(zhì)量,進(jìn)而影響模型的訓(xùn)練效果和泛化能力。本文將從數(shù)
    的頭像 發(fā)表于 07-09 15:57 ?2435次閱讀