大家都知道,最近人工智能是比較火熱的,那么,人工智能主要應(yīng)用的就是機(jī)器學(xué)習(xí),但是機(jī)器學(xué)習(xí)對(duì)其要求還是比較高的。在使用機(jī)器學(xué)習(xí)處理數(shù)據(jù)的時(shí)候,會(huì)經(jīng)常性的用到One-Hot代碼,下面小編就具體給大家介紹下這種編碼的實(shí)現(xiàn)方式。
1.為什么使用one-hot編碼?
在人工智能算法中,大家難免會(huì)遇到歸類基本特征,比如說:人的性別有男人女人,國(guó)家有日本,韓國(guó),朝鮮等。這類特征值并不是連續(xù)不斷的,反而是分離的,混亂的。
目的:
如果要作為機(jī)器學(xué)習(xí)算法的輸入,通常我們需要對(duì)其進(jìn)行特征數(shù)字化。什么是特征數(shù)字化呢?例如:
性別特征:["男","女"]
祖國(guó)特征:["日本","韓國(guó),"朝鮮"]
運(yùn)動(dòng)特征:["網(wǎng)球","游泳","田徑","排球"]
瓶頸:
假如某個(gè)樣本(某個(gè)人),他的特征是["男","中國(guó)","乒乓球"],我們可以用[0,0,4]來表示,但是這樣的特征處理并不能直接放入機(jī)器學(xué)習(xí)算法中。因?yàn)轭悇e之間是無序的。
2.什么是one-hot編碼?
定義:
獨(dú)熱編碼即One-Hot編寫代碼,又被稱為一個(gè)有效的編寫代碼。其方法采用N位狀態(tài)寄存器的方式對(duì)N個(gè)工作狀態(tài)開展編寫代碼,每一個(gè)工作狀態(tài)都有其自主的存儲(chǔ)器位,而且在隨意情況下,在其中僅有一個(gè)有效的。
理解:
One-Hot編碼是分類變量作為二進(jìn)制向量的表示。
(1)將分類值映射到整數(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)寄存器來對(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代碼示例:
fromsklearnimportpreprocessing 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ù)來測(cè)試 printarray#[[100100001]]#獨(dú)熱編碼結(jié)果
以上對(duì)應(yīng)關(guān)系可以解釋為下圖:
3.one-hot編碼優(yōu)缺點(diǎn)?
優(yōu)點(diǎn):
(1)化解了訓(xùn)練樣本不太好解決離散數(shù)據(jù)的情況。
a.歐幾里得空間。在重歸,歸類,層次聚類等人工智能算法中,基本特征之間距離計(jì)算或相似度計(jì)算是很重要的,也許我們常見的相距或相似性的計(jì)算方法都會(huì)在歐幾里得空間的相似度計(jì)算,計(jì)算余弦相似性,基于的就是歐幾里得空間。
b.one-hot編寫代碼。使用one-hot編寫代碼,將離散特征的選值擴(kuò)大到了歐幾里得空間,離散特征跟某個(gè)選值就相匹配歐幾里得空間跟某個(gè)點(diǎn)。將離散型基本特征使用one-hot編寫代碼,確實(shí)會(huì)讓基本特征之間的距離計(jì)算更加合理。
(2)在很大程度上起到了很好的擴(kuò)大特點(diǎn)的功效。
缺點(diǎn):
在文本特征表示上有些缺點(diǎn)就非常突出了。
(1)它是一個(gè)詞袋模型,不考慮詞與詞之間的順序(文本中詞的順序信息也是很重要的);
(2)它假設(shè)詞與詞相互獨(dú)立(在大多數(shù)情況下,詞與詞是相互影響的);
(3)它得到的特征是離散稀疏的(這個(gè)問題最嚴(yán)重)。
上述第3點(diǎn)展開:
(1)為什么得到的特征是離散稀疏的?
例如,如果將世界所有城市名稱作為語料庫的話,那這個(gè)向量會(huì)過于稀疏,并且會(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]
在語料庫中,杭州、上海、寧波、北京各對(duì)應(yīng)一個(gè)向量,向量中只有一個(gè)值為1,其余都為0。
(2)能不能把詞向量的維度變小呢?
a)Dristributedrepresentation:
可以解決Onehotrepresentation的問題,它的思路是:
1.通過訓(xùn)練,將每個(gè)詞都映射到一個(gè)較短的詞向量上來。
2.所有的這些詞向量就構(gòu)成了向量空間,
3.進(jìn)而可以用普通的統(tǒng)計(jì)學(xué)的方法來研究詞與詞之間的關(guān)系。
這個(gè)較短的詞向量維度是多大呢?這個(gè)一般需要我們?cè)谟?xùn)練時(shí)自己來指定。
b)舉例:
1.比如將詞匯表里的詞用"Royalty","Masculinity","Femininity"和"Age"4個(gè)維度來表示,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ì):
?。?)這個(gè)映射是單射;
?。?)映射之后的向量不會(huì)丟失之前的那種向量所含的信息。
4.這個(gè)過程稱為wordembedding(詞嵌入),即將高維詞向量嵌入到一個(gè)低維空間。如圖:
5.經(jīng)過我們一系列的降維神操作,有了用representation表示的較短的詞向量,我們就可以較容易的分析詞之間的關(guān)系了,比如我們將詞的維度降維到2維,有一個(gè)有趣的研究表明,用下圖的詞向量表示我們的詞時(shí),我們可以發(fā)現(xiàn):
6.出現(xiàn)這種現(xiàn)象的原因是,我們得到最后的詞向量的訓(xùn)練過程中引入了詞的上下文。舉例:
想到得到"learning"的詞向量,但訓(xùn)練過程中,你同時(shí)考慮了它左右的上下文,那么就可以使"learning"帶有語義信息了。通過這種操作,我們可以得到近義詞,甚至cat和它的復(fù)數(shù)cats的向量極其相近。
以上為止,小編就給大家介紹到這里了,希望可以能給各位讀者帶來幫助。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/127829.html
摘要:特征編碼類型本篇,我們主要說一下分類型特征的編碼方式。下面,我們要對(duì)這個(gè)變量進(jìn)行編碼,在中有現(xiàn)成的獨(dú)熱編碼方法,代碼如下原來的變量被拆分為兩個(gè)單獨(dú)的變量,這兩個(gè)變量就是原來的分類特征值有電梯和無電梯。 作者:xiaoyu 微信公眾號(hào):Python數(shù)據(jù)科學(xué) 知乎:python數(shù)據(jù)分析師 showImg(https://segmentfault.com/img/remote/146000...
摘要:特征編碼類型本篇,我們主要說一下分類型特征的編碼方式。下面,我們要對(duì)這個(gè)變量進(jìn)行編碼,在中有現(xiàn)成的獨(dú)熱編碼方法,代碼如下原來的變量被拆分為兩個(gè)單獨(dú)的變量,這兩個(gè)變量就是原來的分類特征值有電梯和無電梯。 作者:xiaoyu 微信公眾號(hào):Python數(shù)據(jù)科學(xué) 知乎:python數(shù)據(jù)分析師 showImg(https://segmentfault.com/img/remote/146000...
摘要:背景知識(shí)泰坦尼克號(hào)年月從英國(guó)南安普頓出發(fā),途徑法國(guó),愛爾蘭在美國(guó)大西洋碰觸冰山沉沒,一部分人幸免于難,一部分人沒有生存,這個(gè)案例中就是要通過機(jī)器學(xué)習(xí)的算法來預(yù)測(cè)一下中人的生存狀況。 背景知識(shí): 泰坦尼克號(hào)1912年4月從英國(guó)南安普頓出發(fā),途徑法國(guó),愛爾蘭在美國(guó)大西洋碰觸冰山沉沒,一部分人幸免于難,一部分人沒有生存,這個(gè)案例中就是要通過機(jī)器學(xué)習(xí)的算法來預(yù)測(cè)一下test.csv中418人的...
閱讀 928·2023-01-14 11:38
閱讀 902·2023-01-14 11:04
閱讀 759·2023-01-14 10:48
閱讀 2065·2023-01-14 10:34
閱讀 968·2023-01-14 10:24
閱讀 844·2023-01-14 10:18
閱讀 512·2023-01-14 10:09
閱讀 591·2023-01-14 10:02