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

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

編碼是機器學(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?這個做法看起來簡單粗暴,但其實藏著大坑。下面用一個小數(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 思路很簡單:給每個類別分配一個數(shù)字,但是模型會把這些數(shù)字當(dāng)作有序的。

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

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

所以 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 換了個思路:不用數(shù)字而是給每個類別創(chuàng)建一列。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 |

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

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

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

舉個例子,目標(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 |

計算每個城市的目標(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 |

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

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

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

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

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

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

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

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

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

但用的時候得小心:必須加 Smoothing 防止小樣本過擬合,必須用交叉驗證防止數(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é)

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

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

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

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

作者: adham ayman

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

    關(guān)注

    6

    文章

    1039

    瀏覽量

    56962
  • 機器學(xué)習(xí)
    +關(guān)注

    關(guān)注

    66

    文章

    8553

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    對于類別數(shù)量很多的分類變量可以采用特征哈希(Hashing Trick),特征哈希的目標(biāo)就是將一個數(shù)據(jù)點轉(zhuǎn)換成一個向量。利用的是哈希函數(shù)將原始數(shù)據(jù)轉(zhuǎn)換成指定范圍內(nèi)的散列值,相比較獨熱模
    的頭像 發(fā)表于 04-19 16:42 ?5207次閱讀
    <b class='flag-5'>機器</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>

    機器學(xué)習(xí)特征工程的五個方面優(yōu)點

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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