成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

11個常見的分類特征的編碼技術

人工智能 機器學習
機器學習算法只接受數值輸入,所以如果我們遇到分類特征的時候都會對分類特征進行編碼,本文總結了常見的11個分類變量編碼方法。

機器學習算法只接受數值輸入,所以如果我們遇到分類特征的時候都會對分類特征進行編碼,本文總結了常見的11個分類變量編碼方法。

1、ONE HOT ENCODING

最流行且常用的編碼方法是One Hot Enoding。一個具有n個觀測值和d個不同值的單一變量被轉換成具有n個觀測值的d個二元變量,每個二元變量使用一位(0,1)進行標識。

例如:

編碼后

圖片

最簡單的實現是使用pandas的' get_dummies

new_df=pd.get_dummies(columns=[‘Sex’], data=df)

2、Label Encoding

為分類數據變量分配一個唯一標識的整數。這種方法非常簡單,但對于表示無序數據的分類變量是可能會產生問題。比如:具有高值的標簽可以比具有低值的標簽具有更高的優先級。

例如上面的數據,我們編碼后得到了下面的結果:

圖片

sklearn的LabelEncoder 可以直接進行轉換:

from sklearn.preprocessing import LabelEncoder
le=LabelEncoder()
df[‘Sex’]=le.fit_transform(df[‘Sex’])

3、Label Binarizer

LabelBinarizer 是一個用來從多類別列表創建標簽矩陣的工具類,它將把一個列表轉換成一個列數與輸入集合中惟一值的列數完全相同的矩陣。

例如這個數據

轉化后結果為

from sklearn.preprocessing import LabelBinarizer
lb = LabelBinarizer()
new_df[‘Sex’]=lb.fit_transform(df[‘Sex’])

4、Leave one out Encoding

Leave One Out 編碼時,目標分類特征變量對具有相同值的所有記錄會被平均以確定目標變量的平均值。在訓練數據集和測試數據集之間,編碼算法略有不同。因為考慮到分類的特征記錄被排除在訓練數據集外,因此被稱為“Leave One Out”。

對特定類別變量的特定值的編碼如下。

ci = (Σj != i tj / (n  1 + R)) x (1 + εi) where
ci = encoded value for ith record
tj = target variable value for jth record
n = number of records with the same categorical variable value
R = regularization factor
εi = zero mean random variable with normal distribution N(0, s)

例如下面的數據:

圖片

編碼后:

圖片

為了演示這個編碼過程,我們創建數據集:

import pandas as pd;
data = [[‘1’, 120], [‘2’, 120], [‘3’, 140],
[‘2’, 100], [‘3’, 70], [‘1’, 100],[‘2’, 60],
[‘3’, 110], [‘1’, 100],[‘3’, 70] ]
df = pd.DataFrame(data, columns = [‘Dept’,’Yearly Salary’])

然后進行編碼:

import category_encoders as ce
tenc=ce.TargetEncoder()
df_dep=tenc.fit_transform(df[‘Dept’],df[‘Yearly Salary’])
df_dep=df_dep.rename({‘Dept’:’Value’}, axis=1)
df_new = df.join(df_dep)

這樣就得到了上面的結果。

5、Hashing

當使用哈希函數時,字符串將被轉換為一個惟一的哈希值。因為它使用的內存很少可以處理更多的分類數據。對于管理機器學習中的稀疏高維特征,特征哈希是一種有效的方法。它適用于在線學習場景,具有快速、簡單、高效、快速的特點。

例如下面的數據:

編碼后

代碼如下:

from sklearn.feature_extraction import FeatureHasher
# n_features contains the number of bits you want in your hash value.
h = FeatureHasher(n_features = 3, input_type =’string’)
# transforming the column after fitting
hashed_Feature = h.fit_transform(df[‘nom_0’])
hashed_Feature = hashed_Feature.toarray()
df = pd.concat([df, pd.DataFrame(hashed_Feature)], axis = 1)
df.head(10)

6、Weight of Evidence Encoding

(WoE) 開發的主要目標是創建一個預測模型,用于評估信貸和金融行業的貸款違約風險。證據支持或駁斥理論的程度取決于其證據權重或 WOE。

如果P(Goods) / P(Bads) = 1,則WoE為0。如果這個組的結果是隨機的,那么P(Bads) > P(Goods),比值比為1,證據的權重(WoE)為0。如果一組中P(Goods) > P(bad),則WoE大于0。

因為Logit轉換只是概率的對數,或ln(P(Goods)/P(bad)),所以WoE非常適合于邏輯回歸。當在邏輯回歸中使用wo編碼的預測因子時,預測因子被處理成與編碼到相同的尺度,這樣可以直接比較線性邏輯回歸方程中的變量。

例如下面的數據

圖片

會被編碼為:

圖片

代碼如下:

from category_encoders import WOEEncoder
df = pd.DataFrame({‘cat’: [‘a’, ‘b’, ‘a’, ‘b’, ‘a’, ‘a’, ‘b’, ‘c’, ‘c’], ‘target’: [1, 0, 0, 1, 0, 0, 1, 1, 0]})
woe = WOEEncoder(cols=[‘cat’], random_state=42)
X = df[‘cat’]
y = df.target
encoded_df = woe.fit_transform(X, y)

7、Helmert Encoding

Helmert Encoding將一個級別的因變量的平均值與該編碼中所有先前水平的因變量的平均值進行比較。

反向 Helmert 編碼是類別編碼器中變體的另一個名稱。它將因變量的特定水平平均值與其所有先前水平的水平的平均值進行比較。

圖片

會被編碼為

圖片

代碼如下:

import category_encoders as ce
encoder=ce.HelmertEncoder(cols=’Dept’)
new_df=encoder.fit_transform(df[‘Dept’])
new_hdf=pd.concat([df,new_df], axis=1)
new_hdf

8、Cat Boost Encoding

是CatBoost編碼器試圖解決的是目標泄漏問題,除了目標編碼外,還使用了一個排序概念。它的工作原理與時間序列數據驗證類似。當前特征的目標概率僅從它之前的行(觀測值)計算,這意味著目標統計值依賴于觀測歷史。

圖片

TargetCount:某個類別特性的目標值的總和(到當前為止)。

Prior:它的值是恒定的,用(數據集中的觀察總數(即行))/(整個數據集中的目標值之和)表示。

featucalculate:到目前為止已經看到的、具有與此相同值的分類特征的總數。

圖片

編碼后的結果如下:

圖片

代碼:

import category_encoders
category_encoders.cat_boost.CatBoostEncoder(verbose=0,
cols=None, drop_invariant=False, return_df=True,
handle_unknown=’value’, handle_missing=’value’,
random_state=None, sigma=None, a=1)

target = df[[‘target’]]
train = df.drop(‘target’, axis = 1)

# Define catboost encoder
cbe_encoder = ce.cat_boost.CatBoostEncoder()

# Fit encoder and transform the features
cbe_encoder.fit(train, target)
train_cbe = cbe_encoder.transform(train)

9、James Stein Encoding

James-Stein 為特征值提供以下加權平均值:

  • 觀察到的特征值的平均目標值。
  • 平均期望值(與特征值無關)。

James-Stein 編碼器將平均值縮小到全局的平均值。該編碼器是基于目標的。但是James-Stein 估計器有缺點:它只支持正態分布。

它只能在給定正態分布的情況下定義(實時情況并非如此)。為了防止這種情況,我們可以使用 beta 分布或使用對數-比值比轉換二元目標,就像在 WOE 編碼器中所做的那樣(默認使用它,因為它很簡單)。

10、M Estimator Encoding:

Target Encoder的一個更直接的變體是M Estimator Encoding。它只包含一個超參數m,它代表正則化冪。m值越大收縮越強。建議m的取值范圍為1 ~ 100。

11、 Sum Encoder

Sum Encoder將類別列的特定級別的因變量(目標)的平均值與目標的總體平均值進行比較。在線性回歸(LR)的模型中,Sum Encoder和ONE HOT ENCODING都是常用的方法。兩種模型對LR系數的解釋是不同的,Sum Encoder模型的截距代表了總體平均值(在所有條件下),而系數很容易被理解為主要效應。在OHE模型中,截距代表基線條件的平均值,系數代表簡單效應(一個特定條件與基線之間的差)。

最后,在編碼中我們用到了一個非常好用的Python包 “category-encoders”它還提供了其他的編碼方法,如果你對他感興趣,請查看它的官方文檔:

http://contrib.scikit-learn.org/category_encoders/

責任編輯:華軒 來源: DeepHub IMBA
相關推薦

2020-05-21 18:38:49

JavaScript前端技術

2021-01-19 09:11:35

Zookeeper面試分布式

2013-12-03 10:11:41

LinuxLinux面試題

2020-12-30 06:19:15

編碼分類特征數字特征

2021-01-18 08:25:44

Zookeeper面試分布式

2024-07-29 00:00:00

2012-05-21 09:38:43

2024-05-09 15:00:38

Python編碼開發

2014-12-03 17:51:05

2019-05-15 09:08:02

XMLJSONJDBC byte

2022-06-27 15:07:35

智能汽車

2021-11-16 10:25:20

技術架構技術前線 IT管理

2009-07-17 09:46:45

Web 2.0

2020-01-30 18:00:18

編程語言軟件人工智能

2020-01-31 18:03:49

編碼開發代碼

2022-03-30 11:09:43

混淆技術反制措施IAT

2023-10-22 11:54:19

2021-06-15 15:20:15

APIWeb應用軟件開發

2025-04-11 10:18:58

2022-08-24 14:14:58

JavaScript函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品久久久久国产免费第一页 | 北条麻妃一区二区三区在线观看 | 国产一级免费视频 | 午夜无码国产理论在线 | 国产一区二区三区欧美 | 综合色播| 黄色精品视频网站 | 岛国av免费观看 | 国产成人精品一区二区三 | 欧美一区二区三区精品 | 日韩国产在线 | 天堂综合网久久 | 久久久2o19精品 | 中文字幕高清免费日韩视频在线 | 久草高清视频 | 国产成人免费视频网站视频社区 | 人人射人人插 | 亚洲日本视频 | 香蕉婷婷 | 精品一区二区三区在线观看国产 | 免费能直接在线观看黄的视频 | 日韩欧美专区 | 久久夜色精品国产 | 国产一区| 99热热热热 | 欧美日韩在线播放 | 成人黄色电影在线播放 | 午夜寂寞福利视频 | 午夜国产 | 在线天堂免费中文字幕视频 | 成人在线视频免费观看 | 日本亚洲一区 | 免费一看一级毛片 | 欧美在线视频网站 | 99精品在线免费观看 | 五月激情综合 | а天堂中文最新一区二区三区 | 成人国产精品久久 | 欧美精品在欧美一区二区 | 日韩一区二区三区在线 | 日韩在线观看 |