詳解one-hot編碼


博主原創文章,轉載請注明出處

https://www.cnblogs.com/shuaishuaidefeizhu/p/11269257.html

 

一、什么是one-hot編碼?

One-Hot編碼,又稱為一位有效編碼,主要是采用N位狀態寄存器來對N個狀態進行編碼,每個狀態都由他獨立的寄存器位,並且在任意時候只有一位有效。

One-Hot編碼是分類變量作為二進制向量的表示。這首先要求將分類值映射到整數值。然后,每個整數值被表示為二進制向量,除了整數的索引之外,它都是零值,它被標記為1。

二、one-hot編碼過程詳解

比如我們要對 “hello world” 進行one-hot編碼,怎么做呢?

1.確定要編碼的對象--hello world,

2.確定分類變量--h  e  l  l  o  空格  w  o  r  l  d,共27種類別(26個小寫字母 + 空格,);

3.以上問題就相當於,有11個樣本,每個樣本有27個特征,將其轉化為二進制向量表示,

這里有一個前提,特征排列的順序不同,對應的二進制向量亦不同(比如我把空格放在第一列和a放第一列,one-hot編碼結果肯定是不同的)

因此我們必須要事先約定特征排列的順序:

1.、27種特征首先進行整數編碼:a--0,b--1,c--2,......,z--25,空格--26

2、27種特征按照整數編碼的大小從前往后排列

得到的one-hot編碼如下:

 

再比如:我們要對["中國", "美國", "日本"]進行one-hot編碼,

怎么做呢?

1.確定要編碼的對象--["中國", "美國", "日本", "美國"],

2.確定分類變量--中國    美國    日本,共3種類別;

3.以上問題就相當於,有3個樣本,每個樣本有3個特征,將其轉化為二進制向量表示,

 

我們首先進行特征的整數編碼:中國--0,美國--1,日本--2,並將特征按照從小到大排列

得到one-hot編碼如下:

["中國", "美國", "日本", "美國"]  --->   [[1,0,0], [0,1,0], [0,0,1], [0,1,0]]

 

三、為什么需要one-hot編碼?

one hot編碼是將類別變量轉換為機器學習算法易於利用的一種形式的過程。

上面的 hello world 相當於多分類的問題(27分類),每個樣本只對應於一個類別(即只在對應的特征處值為1,其余地方值為0),而我們的分類結果,得到的往往是隸屬於某個類別的概率,這樣在進行損失函數(例如交叉熵損失)或准確率計算時,變得非常方便

 

四、one-hot編碼的缺陷

one-hot編碼要求每個類別之間相互獨立,如果之間存在某種連續型的關系,或許使用distributed respresentation(分布式)更加合適。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM