博主原創文章,轉載請注明出處
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(分布式)更加合適。