欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

機(jī)器學(xué)習(xí)數(shù)據(jù)預(yù)處理之獨(dú)熱One-Hot編碼及其代碼詳解

 更新時(shí)間:2022年07月12日 11:10:53   作者:夢(mèng)dancing  
獨(dú)熱編碼即 One-Hot 編碼,又稱(chēng)一位有效編碼。其方法是使用 N位 狀態(tài)寄存器來(lái)對(duì) N個(gè)狀態(tài) 進(jìn)行編碼,每個(gè)狀態(tài)都有它獨(dú)立的寄存器位,并且在任意時(shí)候,其中只有一位有效,這篇文章主要介紹了機(jī)器學(xué)習(xí)數(shù)據(jù)預(yù)處理之獨(dú)熱One-Hot編碼及其代碼詳解,需要的朋友可以參考下

1. 為什么使用 one-hot 編碼?

問(wèn)題:

在機(jī)器學(xué)習(xí)算法中,我們經(jīng)常會(huì)遇到分類(lèi)特征,例如:人的性別有男女,祖國(guó)有中國(guó),美國(guó),法國(guó)等。 這些特征值并不是連續(xù)的,而是離散的,無(wú)序的。

目的:

如果要作為機(jī)器學(xué)習(xí)算法的輸入,通常我們需要對(duì)其進(jìn)行特征數(shù)字化。什么是特征數(shù)字化呢?例如:

性別特征:["男","女"]

祖國(guó)特征:["中國(guó)","美國(guó),"法國(guó)"]

運(yùn)動(dòng)特征:["足球","籃球","羽毛球","乒乓球"]

瓶頸:

假如某個(gè)樣本(某個(gè)人),他的特征是["男","中國(guó)","乒乓球"] ,我們可以用 [0,0,4] 來(lái)表示,但是這樣的特征處理并不能直接放入機(jī)器學(xué)習(xí)算法中。因?yàn)轭?lèi)別之間是無(wú)序的。

2. 什么是 one-hot 編碼?

定義:

獨(dú)熱編碼即 One-Hot 編碼,又稱(chēng)一位有效編碼。其方法是使用 N位 狀態(tài)寄存器來(lái)對(duì) N個(gè)狀態(tài) 進(jìn)行編碼,每個(gè)狀態(tài)都有它獨(dú)立的寄存器位,并且在任意時(shí)候,其中只有一位有效。

理解:

One-Hot 編碼是分類(lèi)變量作為二進(jìn)制向量的表示。

(1) 將分類(lèi)值映射到整數(shù)值。

(2) 然后,每個(gè)整數(shù)值被表示為二進(jìn)制向量,除了整數(shù)的索引之外,它都是零值,它被標(biāo)記為1。

舉例1:

舉個(gè)例子,假設(shè)我們有四個(gè)樣本(行),每個(gè)樣本有三個(gè)特征(列),如圖:

上述feature_1有兩種可能的取值,比如是男/女,這里男用1表示,女用2表示。feature_2 和 feature_3 各有4種取值(狀態(tài))。

one-hot 編碼就是保證每個(gè)樣本中的單個(gè)特征只有1位處于狀態(tài)1,其他的都是0

上述狀態(tài)用 one-hot 編碼如下圖所示:

舉例2:

按照 N位狀態(tài)寄存器 來(lái) 對(duì)N個(gè)狀態(tài) 進(jìn)行編碼的原理,處理后應(yīng)該是這樣的

性別特征:["男","女"] (這里只有兩個(gè)特征,所以 N=2):

男 => 10

女 => 01

祖國(guó)特征:["中國(guó)","美國(guó),"法國(guó)"](N=3):

中國(guó) => 100

美國(guó) => 010

法國(guó) => 001

運(yùn)動(dòng)特征:["足球","籃球","羽毛球","乒乓球"](N=4):

足球 => 1000

籃球 => 0100

羽毛球 => 0010

乒乓球 => 0001

所以,當(dāng)一個(gè)樣本為 ["男","中國(guó)","乒乓球"] 的時(shí)候,完整的特征數(shù)字化的結(jié)果為:

[1,0,1,0,0,0,0,0,1]

下圖可能會(huì)更好理解:

python 代碼示例:

from sklearn import preprocessing  
   
enc = preprocessing.OneHotEncoder()  
enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]])  # 訓(xùn)練。這里共有4個(gè)數(shù)據(jù),3種特征
   
array = enc.transform([[0,1,3]]).toarray()  # 測(cè)試。這里使用1個(gè)新數(shù)據(jù)來(lái)測(cè)試
   
print array   # [[ 1  0  0  1  0  0  0  0  1]] # 獨(dú)熱編碼結(jié)果

以上對(duì)應(yīng)關(guān)系可以解釋為下圖:

3. one-hot 編碼優(yōu)缺點(diǎn)?

優(yōu)點(diǎn):

(1) 解決了 分類(lèi)器不好處理離散數(shù)據(jù) 的問(wèn)題。

a. 歐式空間。在回歸,分類(lèi),聚類(lèi)等機(jī)器學(xué)習(xí)算法中,特征之間距離計(jì)算相似度計(jì)算是非常重要的,而我們常用的距離或相似度的計(jì)算都是在歐式空間的相似度計(jì)算,計(jì)算余弦相似性,基于的就是歐式空間。

b. one-hot 編碼。使用 one-hot 編碼,將離散特征的取值擴(kuò)展到了歐式空間,離散特征的某個(gè)取值 就 對(duì)應(yīng)歐式空間的某個(gè)點(diǎn)。將離散型特征使用 one-hot 編碼,確實(shí)會(huì)讓特征之間的距離計(jì)算更加合理。

(2) 在一定程度上也起到了 擴(kuò)充特征 的作用。

缺點(diǎn):

在文本特征表示上有些缺點(diǎn)就非常突出了。

(1) 它是一個(gè)詞袋模型,不考慮詞與詞之間的順序(文本中詞的順序信息也是很重要的);

(2) 它假設(shè)詞與詞相互獨(dú)立(在大多數(shù)情況下,詞與詞是相互影響的);

(3) 它得到的特征是離散稀疏的 (這個(gè)問(wèn)題最嚴(yán)重)。

上述第3點(diǎn)展開(kāi):

(1) 為什么得到的特征是離散稀疏的?

例如,如果將世界所有城市名稱(chēng)作為語(yǔ)料庫(kù)的話,那這個(gè)向量會(huì)過(guò)于稀疏,并且會(huì)造成維度災(zāi)難。如下:

杭州 [0,0,0,0,0,0,0,1,0,……,0,0,0,0,0,0,0]
上海 [0,0,0,0,1,0,0,0,0,……,0,0,0,0,0,0,0]
寧波 [0,0,0,1,0,0,0,0,0,……,0,0,0,0,0,0,0]
北京 [0,0,0,0,0,0,0,0,0,……,1,0,0,0,0,0,0]

在語(yǔ)料庫(kù)中,杭州、上海、寧波、北京各對(duì)應(yīng)一個(gè)向量,向量中只有一個(gè)值為1,其余都為0。

(2)能不能把詞向量的維度變小呢?

a) Dristributed representation:

可以解決 One hot representation 的問(wèn)題,它的思路是:

1. 通過(guò)訓(xùn)練,將每個(gè)詞都映射到一個(gè)較短的詞向量上來(lái)。

2. 所有的這些 詞向量 就構(gòu)成了 向量空間,

3. 進(jìn)而可以用 普通的統(tǒng)計(jì)學(xué)的方法 來(lái)研究詞與詞之間的關(guān)系。

這個(gè)較短的詞向量維度是多大呢?這個(gè)一般需要我們?cè)谟?xùn)練時(shí)自己來(lái)指定。

b) 舉例:

1. 比如將詞匯表里的詞用 "Royalty", "Masculinity", "Femininity" 和 "Age" 4個(gè)維度來(lái)表示,King 這個(gè)詞對(duì)應(yīng)的詞向量可能是 (0.99,0.99,0.05,0.7)。

2. 在實(shí)際情況中,并不能對(duì)詞向量的每個(gè)維度做一個(gè)很好的解釋。

3.將king這個(gè)詞從一個(gè)可能非常稀疏的向量坐在的空間,映射到現(xiàn)在這個(gè) 四維向量 所在的空間,必須滿足以下性質(zhì):

(1)這個(gè)映射是單射;
(2)映射之后的向量 不會(huì)丟失之前的 那種向量 所含的信息 。

4.這個(gè)過(guò)程稱(chēng)為word embedding(詞嵌入),即將高維詞向量嵌入到一個(gè)低維空間。如圖:

5.經(jīng)過(guò)我們一系列的降維神操作,有了用 representation 表示的較短的詞向量,我們就可以較容易的分析詞之間的關(guān)系了,比如我們將詞的維度降維到 2維,有一個(gè)有趣的研究表明,用下圖的詞向量表示我們的詞時(shí),我們可以發(fā)現(xiàn):

6. 出現(xiàn)這種現(xiàn)象的原因是,我們得到最后的詞向量的訓(xùn)練過(guò)程中引入了詞的上下文。舉例:

想到得到 "learning" 的詞向量,但訓(xùn)練過(guò)程中,你同時(shí)考慮了它左右的上下文,那么就可以使 "learning" 帶有語(yǔ)義信息了。通過(guò)這種操作,我們可以得到近義詞,甚至 cat 和它的復(fù)數(shù) cats 的向量極其相近。

--------------------------------------------------------------------

參考博客:

通俗理解word2vec

機(jī)器學(xué)習(xí):數(shù)據(jù)預(yù)處理之獨(dú)熱編碼(One-Hot)

到此這篇關(guān)于機(jī)器學(xué)習(xí)數(shù)據(jù)預(yù)處理之獨(dú)熱One-Hot編碼及其代碼詳解的文章就介紹到這了,更多相關(guān)one-hot 編碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中使用pprint函數(shù)進(jìn)行格式化輸出的教程

    Python中使用pprint函數(shù)進(jìn)行格式化輸出的教程

    這篇文章主要介紹了Python中使用pprint函數(shù)進(jìn)行格式化輸出的教程,包括能夠控制輸出寬度等非常有用的特性,需要的朋友可以參考下
    2015-04-04
  • 利用Python實(shí)現(xiàn)定時(shí)程序的方法

    利用Python實(shí)現(xiàn)定時(shí)程序的方法

    在 Python 中,如何定義一個(gè)定時(shí)器函數(shù)呢?本文主要介紹了2種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Python socket實(shí)現(xiàn)的簡(jiǎn)單通信功能示例

    Python socket實(shí)現(xiàn)的簡(jiǎn)單通信功能示例

    這篇文章主要介紹了Python socket實(shí)現(xiàn)的簡(jiǎn)單通信功能,結(jié)合實(shí)例形式分析了Python socket通信的相關(guān)概念、原理、客戶端與服務(wù)器端實(shí)現(xiàn)技巧以及socketserver模塊多并發(fā)簡(jiǎn)單實(shí)現(xiàn)方法,需要的朋友可以參考下
    2018-08-08
  • python3.6使用pickle序列化class的方法

    python3.6使用pickle序列化class的方法

    今天小編就為大家分享一篇python3.6使用pickle序列化class的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Pyqt5 關(guān)于流式布局和滾動(dòng)條的綜合使用示例代碼

    Pyqt5 關(guān)于流式布局和滾動(dòng)條的綜合使用示例代碼

    這篇文章主要介紹了Pyqt5 關(guān)于流式布局和滾動(dòng)條的綜合使用示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 實(shí)現(xiàn)Python圖形界面框架TkInter寫(xiě)GUI界面應(yīng)用簡(jiǎn)介過(guò)程操作

    實(shí)現(xiàn)Python圖形界面框架TkInter寫(xiě)GUI界面應(yīng)用簡(jiǎn)介過(guò)程操作

    TkInter是Python用于開(kāi)發(fā)GUI界面的標(biāo)準(zhǔn)庫(kù),如果你想快速開(kāi)發(fā)一個(gè)帶有GUI界面的小工具(笑小程序),且又能同時(shí)在Linux、Windows、Mac上使用,TkInter天生支持跨平臺(tái),天生具備穩(wěn)定性,我認(rèn)為它能滿足內(nèi)部工具的簡(jiǎn)單需求
    2021-09-09
  • Python中使用__new__實(shí)現(xiàn)單例模式并解析

    Python中使用__new__實(shí)現(xiàn)單例模式并解析

    單例模式是一個(gè)經(jīng)典設(shè)計(jì)模式,簡(jiǎn)要的說(shuō),一個(gè)類(lèi)的單例模式就是它只能被實(shí)例化一次,實(shí)例變量在第一次實(shí)例化時(shí)就已經(jīng)固定。 這篇文章主要介紹了Python中使用__new__實(shí)現(xiàn)單例模式并解析 ,需要的朋友可以參考下
    2019-06-06
  • pycharm中cv2的package安裝失敗問(wèn)題及解決

    pycharm中cv2的package安裝失敗問(wèn)題及解決

    這篇文章主要介紹了pycharm中cv2的package安裝失敗問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Python中文分詞庫(kù)jieba(結(jié)巴分詞)詳細(xì)使用介紹

    Python中文分詞庫(kù)jieba(結(jié)巴分詞)詳細(xì)使用介紹

    這篇文章主要介紹了Python中文分詞庫(kù)jieba(結(jié)巴分詞)提取詞,加載詞,修改詞頻,定義詞庫(kù)詳細(xì)使用介紹,需要的朋友可以參考下
    2022-04-04
  • 用 Python 連接 MySQL 的幾種方式詳解

    用 Python 連接 MySQL 的幾種方式詳解

    這篇文章主要介紹了用 Python 連接 MySQL 的幾種方式,大家可以根據(jù)實(shí)際情況選擇合理的連接方式,需要的朋友可以參考下
    2018-04-04

最新評(píng)論