01_什么是one-hot编码、one-hot编码过程详解、为什么需要one-hot编码?one-hot编码的优缺点、使用sklearn中的API举例
以下資料來自:網絡+最后的整合
https://www.cnblogs.com/shuaishuaidefeizhu/p/11269257.html
https://www.cntofu.com/book/85/ml/clean-feature/one-hot.md
一、什么是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編碼如下:
三、為什么需要one-hot編碼?
one hot編碼是將類別變量轉換為機器學習算法易于利用的一種形式的過程。
上面的 hello world 相當于多分類的問題(27分類),每個樣本只對應于一個類別(即只在對應的特征處值為1,其余地方值為0),而我們的分類結果,得到的往往是隸屬于某個類別的概率,這樣在進行損失函數(例如交叉熵損失)或準確率計算時,變得非常方便。
四、one-hot編碼的缺陷
one-hot編碼要求每個類別之間相互獨立,如果之間存在某種連續型的關系,或許使用distributed respresentation(分布式)更加合適。
五、one-hot的好處:
1、解決了分類器不好處理屬性數據的問題。
2、在一定程度上也起到了擴充特征的作用。
六、舉例
from sklearn import preprocessingenc = preprocessing.OneHotEncoder() enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]) print(enc.transform([[0, 1, 3]]).toarray())輸出結果為:
[[1. 0. 0. 1. 0. 0. 0. 0. 1.]]總結
以上是生活随笔為你收集整理的01_什么是one-hot编码、one-hot编码过程详解、为什么需要one-hot编码?one-hot编码的优缺点、使用sklearn中的API举例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 万向节多少钱 了解万向节的价格和购买渠道
- 下一篇: 北京梅源里小区附近卖电动车的实体店?