一位有效編碼(獨熱編碼)

2021-08-09 12:25:42 字數 2452 閱讀 9775

有一組資料,其中有個特徵是性別。既然是性別,那它的值顯然只有兩個選擇,要麼男性(用1表示)要麼女性(用0表示)。

獨熱編碼就是將這乙個特徵變成兩個特徵:是男性、是女性。

我是男的,我的特徵就變成了 [1, 0],1代表我是男的,0代表我不是女的。同樣,女性的特徵變為[0, 1]。

為什麼用獨熱編碼?

假設乙個特徵是顏色,選項有:黃色、紅色、綠色等等。如果我們不採用獨熱編碼,用0表示黃色,用1表示綠色,用2表示紅色,以此類推。從數學上看,它們之間的距離不一樣了,0和1的距離顯然比0和2的距離小,可是不能認為黃色與紅色的關係比綠色更接近。

採用獨熱編碼後,黃色變成[1, 0, 0 , … ],紅色變成[0, 1, 0, … ],綠色變成[0, 0, 1, … ],這樣它們的相似度就一樣了,這對機器學習演算法很重要。

以性別為例,有兩個人,一男一女。他們原始屬性是[1]和[0]。

from sklearn.preprocessing import onehotencoder # 利用sklearn

enc = onehotencoder()

test=[[1],[0]]

enc.fit(test) # 呼叫函式

完成了,就是這麼簡單。

我們來**一下

enc.transform([[1]]).toarray()
輸出是

array([[ 0.,  1.]])
有點簡單唉,再複雜點,加上顏色屬性,假設有三個人:

a 男性、紅色衣服 [1 ,1 ]

b 男性、黃色衣服 [1 ,0 ]

c 女性、綠色衣服 [0 ,2 ]

在這三人的屬性的基礎上進行獨熱編碼,編碼成功後,看看d 女性、紅色衣服會被編碼成什麼樣子

test2=[[1,1],[1,0],[0,2]]

enc.fit(test2)

enc.transform([[0,1]]).toarray()

out:

array([[ 1.,  0.,  0.,  1.,  0.]])
有五列資料,分別代表:女性、男性、黃色、紅色、綠色。這是從a、b,c三人中得到的規律。

1代表是,0代表不是,很容易看出結果表示的是 女性、紅色。

依舊以年齡和顏色為例,我已經有了一堆資料,怎樣快速地編碼呢。

先做乙個**

import pandas as pd 

from pandas import series,dataframe

df=pd.dataframe()

df

out:

color  ***01

1101

2203

11

in:

s1 = pd.get_dummies(df['***'], prefix = '***')

s1

out:

***_0  ***_1

0 0 1

1 0 1

2 1 0

3 0 1

in:

s2 = pd.get_dummies(df['color'], prefix = 'color')

s2

out:

out

[21]:

color_0

color_1

color_2

0 0 1 0

1 1 0 0

2 0 0 1

in:

pd.concat([s1, s2],axis=1)

out:

***_0  ***_1  color_0  color_1  color_2

0 0 1 0 1 0

1 0 1 1 0 0

2 1 0 0 0 1

3 0 1 0 1 0

也可以同時對多個特徵編碼,結果是一樣的

pd.get_dummies(df, columns=["color","***"])

One Hot encoder獨熱編碼

ref 1 什麼是獨熱碼 獨熱碼,在英文文獻中稱做 one hot code,直觀來說就是有多少個狀態就有多少位元,而且只有乙個位元為1,其他全為0的一種碼制。在機器學習中對於離散型的分型別的資料,需要對其進行數位化比如說性別這一屬性,只能有男性或者女性或者其他這三種值,如何對這三個值進行數位化表達...

獨熱編碼函式

想用自己的資料進行獨熱編碼,一開始沒用官方的程式。from sklearn import preprocessing enc preprocessing.onehotencoder 想用這個函式的可以參考博主 我找的是github裡的乙個程式 可以參考下。貼上 def one hot y n cla...

獨熱編碼 One Hot Eocode

假設現在我們要對5張手寫數字進行分類,這些數字的標籤labels的範圍是0 9,形成 5,的行向量,為 5,4,3,8,7 labels 5,4,3,8,7 num classes 10 batch size tf.size labels labels表示的標籤,5張有5個標籤。batch size...