什么是One_Hot?


1.什么是One_Hot?

對於這個問題,之前谷歌了一下,還涉及寄存器了(one-hot編碼是N位狀態寄存器為N個狀態進行編碼的方式)。。真的無語。這里不說那些很底層的,我們只需要了解one-hot編碼是將類別變量轉換為機器學習算法中容易處理的一種形式!

概念太抽象了,對太抽了,那么從實際例子來說明。

如下我們有兩個特征:

 

 

我們看到有兩個特證名為:animal與food,解釋一下兩列值意思,第一列代表的是動物的名字,第二列是食物的個數,比如第一行cat 2 描述為貓吃了兩個食物,這里是測試數據,主要是想通過,這些數據給予直觀的認識及實際操作。

而對上述數據做one-hot編碼后得結果為:

 

 

animal列數據類型是字符串,而第二列是數值型,如果我們能將這些特征值用0/1表示,是不是在機器學習中,對這些非連續值非常有幫助。

綜上,我們推論出,如果你在處理的數據中,通過特征工程這一步操作,能夠將特征的類型判別出來,哪些是連續的,哪些是非連續的,那么我們就可以對它進行特殊處理,比如此處的one-hot編碼!

對於定義我們有了基礎的了解之后,下面我們來深入了解一下為什么one-hot編碼可以用來處理非連續(離散)特征?

2.One_Hot編碼處理離散特征

在使用one-hot編碼中,我們可以將離散特征的取值擴展到歐式空間,在機器學習中,我們的研究范圍就是在歐式空間中,首先這一步,保證了能夠適用於機器學習中;而;另外了對於one-hot處理的離散的特征的某個取值也就對應了歐式空間的某個點!

那么對於上面這句話,你會有很多疑問,比如:為何one-hot編碼能將離散特征映射到歐式空間?

原因是,在統計機器學習算法中的回歸,分類這些問題中,特征之間距離的計算或相似度計算非常重要,比如大家常用的k-means,而我們常用的這些計算都在歐式空間中進行相似度計算。換句話說,就是我上面說的研究范圍在歐式空間,保證了one-hot編碼的成立!

3.One_Hot編碼實現

還是以上述animal為例:

【數據展示】

import pandas as pd data = { 'animal':['cat','dog','cat','lion'], 'food':[2,3,5,3], } data_learn = pd.DataFrame(data) data_learn

 

 

【完整特征編碼】

dummies = pd.get_dummies(data_learn,columns=data_learn.columns) dummies

 

 

【特定特征編碼】

dummies = pd.get_dummies(data_learn['animal']) dummies = dummies.add_prefix("{}_".format('animal')) data_learn.drop('animal',axis=1,inplace=True) data_learn = data_learn.join(dummies) data_learn

 

 

對於這里的特定特征編碼,我這里只選取了一個特定特征,你也可以選擇多個,通過列表存儲,遍歷操作,即可實現!


免責聲明!

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



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