網(wǎng)站首頁 編程語言 正文
1.介紹?
? ? ? 在計算機科學(xué)中,數(shù)據(jù)可以用很多不同的方式表示,自然而然地,每一種方式在某些領(lǐng)域都有其優(yōu)點和缺點。
? ? ? 由于計算機無法處理分類數(shù)據(jù),因為這些類別對它們沒有意義,如果我們希望計算機能夠處理這些信息,就必須準備好這些信息。
? ? ? 此操作稱為預(yù)處理。 預(yù)處理的很大一部分是編碼 - 以計算機可以理解的方式表示每條數(shù)據(jù)(該名稱的字面意思是“轉(zhuǎn)換為計算機代碼”)。
? ? ? 在計算機科學(xué)的許多分支中,尤其是機器學(xué)習和數(shù)字電路設(shè)計中,One-Hot Encoding
被廣泛使用。
? ? ? 在本文中,我們將解釋什么是 one-hot 編碼,并使用一些流行的選擇(Pandas 和 Scikit-Learn)在 Python 中實現(xiàn)它。 我們還將比較它與計算機中其他類型表示的有效性、優(yōu)點和缺點,以及它的應(yīng)用。
2.什么是One-Hot編碼?
? ? ? One-hot Encoding
是一種向量表示,其中向量中的所有元素都是 0,除了一個,它的值是 1,其中 1 表示指定元素類別的布爾值。
? ? ? 還有一個類似的實現(xiàn),稱為One-Cold Encoding
,其中向量中的所有元素都是 1,除了 1 的值是 0。
? ? ? 例如,[0, 0, 0, 1, 0] 和 [1 ,0, 0, 0, 0] 可以是One-hot 向量的一些示例。 與此類似的技術(shù),也用于表示數(shù)據(jù),例如統(tǒng)計中的虛擬變量。
? ? ? 這與其他編碼方案非常不同,其他編碼方案都允許多個位的值為 1。 下表比較了從 0 到 7 的數(shù)字在二進制、格雷碼和 one-hot 中的表示:
實際上,對于每個 one-hot 向量,我們會問 n 個問題,其中 n 是我們擁有的類別數(shù):
? ? ? 這是數(shù)字1嗎? 這是數(shù)字2嗎? ......這是數(shù)字7嗎?
? ? ? 每個“0”都是“假”,一旦我們在向量中找到“1”,問題的答案就是“真”。
? ? ? One-hot 編碼將分類特征轉(zhuǎn)換為一種更適合分類和回歸算法的格式。 它在需要多種類型數(shù)據(jù)表示的方法中非常有用。
例如,一些向量可能最適合回歸(基于以前的返回值逼近函數(shù)),而一些可能最適合分類(分類為固定集/類,通常是二元的):
這里我們有六個分類數(shù)據(jù)的樣本輸入。 此處使用的編碼類型稱為“l(fā)abel encoding”——它非常簡單:我們只需為分類值分配一個 ID。
? ? ? 我們的計算機現(xiàn)在知道如何表示這些類別,因為它知道如何處理數(shù)字。 然而,這種編碼方法并不是很有效,因為它自然會賦予更高的數(shù)字更高的權(quán)重。
? ? ? 說我們的“Strawberries”類別大于或小于“Apples”是沒有意義的,或者將類別“Lemon”添加到“Peach”會給我們一個類別“Orange”,因為這些值不是序數(shù)。
? ? ? 如果我們用 one-hot 編碼表示這些類別,我們實際上會用列替換行。 我們通過為每個給定類別創(chuàng)建一個布爾列來實現(xiàn)這一點,其中只有這些列之一可以為每個樣本取值 1:
我們可以從上表中看出,與二進制或格雷碼相比,one-hot 表示需要更多的數(shù)字。 對于n個數(shù)字,one-hot編碼只能表示n個值,而Binary或Gray編碼可以用n個數(shù)字表示2n個值。
?3.實現(xiàn)-Pandas?
? ? ? 讓我們看一個簡單的示例,說明如何通過 one-hot 編碼方案將數(shù)據(jù)集中的分類列中的值轉(zhuǎn)換為對應(yīng)的數(shù)值。? ??
我們將創(chuàng)建一個非常簡單的數(shù)據(jù)集 - 國家及其 ID 的列表:
? ? ? ?在上面的腳本中,我們使用兩個列表(即 ids 和國家/地區(qū))創(chuàng)建了一個Pandas dataframe
,稱為 df。 如果您在數(shù)據(jù)幀上調(diào)用 head() 方法,會看到以下結(jié)果:
Countries列包含分類值。 我們可以使用 get_dummies() 函數(shù)將Countries列中的值轉(zhuǎn)換為one-hot編碼向量:
我們將 Country
作為 get_dummies()
方法的前綴屬性的值傳遞,因此您可以在輸出中的每個單熱編碼列的標題之前看到字符串 Country 前綴。
?4.實現(xiàn)-Scikit-Learn?
? ? ? 另一種方法是使用另一個流行的庫 - Scikit-Learn
。 為此,它提供了 OneHotEncoder
類和 LabelBinarizer
類。
首先,導(dǎo)入庫LabelBinarizer:
打印y值:
同樣,我們可以使用支持多列數(shù)據(jù)的 OneHotEncoder 類,與之前的類不同:
5.?One-hot編碼在機器學(xué)習領(lǐng)域的應(yīng)用?
? ? ? 如上所述,計算機不太擅長處理分類數(shù)據(jù)。 雖然我們很好地理解分類數(shù)據(jù),但這是由于計算機不具備的一種先決知識。
? ? ? 大多數(shù)機器學(xué)習技術(shù)和模型使用非常有限的數(shù)據(jù)集(通常是二進制)。 神經(jīng)網(wǎng)絡(luò)消耗數(shù)據(jù)并產(chǎn)生 0..1 范圍內(nèi)的結(jié)果,我們很少會超出該范圍。
? ? ? 簡而言之,絕大多數(shù)機器學(xué)習算法都會接收樣本數(shù)據(jù)(“訓(xùn)練數(shù)據(jù)”),從中提取特征。 基于這些特征,創(chuàng)建了一個數(shù)學(xué)模型,然后用于進行預(yù)測或決策,而無需明確編程來執(zhí)行這些任務(wù)。
? ? ? 一個很好的例子是分類,其中輸入在技術(shù)上可以是無界的,但輸出通常僅限于幾個類別。 在二元分類的情況下(假設(shè)我們正在教一個神經(jīng)網(wǎng)絡(luò)對貓和狗進行分類),我們的映射為 0 代表貓,1 代表狗。
? ? ? 大多數(shù)情況下,我們希望對其進行預(yù)測的訓(xùn)練數(shù)據(jù)是分類的,就像上面提到的帶有水果的例子一樣。 同樣,雖然這對我們很有意義,但這些詞本身對算法沒有意義,因為它不理解它們。
? ? ? 在這些算法中使用one-hot
編碼來表示數(shù)據(jù)在技術(shù)上不是必需的,但如果我們想要一個有效的實現(xiàn),它非常有用。
原文鏈接:https://blog.51cto.com/u_14857544/5024208
相關(guān)推薦
- 2022-08-17 C++詳解鏈棧的實現(xiàn)_C 語言
- 2022-11-24 nginx平滑升級及nginx配置文件詳解_nginx
- 2022-06-21 Android實現(xiàn)登錄注冊功能_Android
- 2024-02-27 Action獲取表單提交數(shù)據(jù)
- 2022-12-09 Python曲線擬合多項式深入詳解_python
- 2022-12-30 React錯誤邊界Error?Boundaries詳解_React
- 2023-04-24 Python中__init__的用法和理解示例詳解_python
- 2022-01-19 錯誤:Cannot construct instance of `xxxx` (no Creator
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支