大家都知道,最近人工智能是比較火熱的,那么,人工智能主要應用的就是機器學習,但是機器學習對其要求還是比較高的。在使用機器學習處理數據的時候,會經常性的用到One-Hot代碼,下面小編就具體給大家介紹下這種編碼的實現方式。
1.為什么使用one-hot編碼?
在人工智能算法中,大家難免會遇到歸類基本特征,比如說:人的性別有男人女人,國家有日本,韓國,朝鮮等。這類特征值并不是連續不斷的,反而是分離的,混亂的。
目的:
如果要作為機器學習算法的輸入,通常我們需要對其進行特征數字化。什么是特征數字化呢?例如:
性別特征:["男","女"]
祖國特征:["日本","韓國,"朝鮮"]
運動特征:["網球","游泳","田徑","排球"]
瓶頸:
假如某個樣本(某個人),他的特征是["男","中國","乒乓球"],我們可以用[0,0,4]來表示,但是這樣的特征處理并不能直接放入機器學習算法中。因為類別之間是無序的。
2.什么是one-hot編碼?
定義:
獨熱編碼即One-Hot編寫代碼,又被稱為一個有效的編寫代碼。其方法采用N位狀態寄存器的方式對N個工作狀態開展編寫代碼,每一個工作狀態都有其自主的存儲器位,而且在隨意情況下,在其中僅有一個有效的。
理解:
One-Hot編碼是分類變量作為二進制向量的表示。
(1)將分類值映射到整數值。
(2)然后,每個整數值被表示為二進制向量,除了整數的索引之外,它都是零值,它被標記為1。
舉例1:
舉個例子,假設我們有四個樣本(行),每個樣本有三個特征(列),如圖:
上述feature_1有兩種可能的取值,比如是男/女,這里男用1表示,女用2表示。feature_2和feature_3各有4種取值(狀態)。
one-hot編碼就是保證每個樣本中的單個特征只有1位處于狀態1,其他的都是0。
上述狀態用one-hot編碼如下圖所示:
舉例2:
按照N位狀態寄存器來對N個狀態進行編碼的原理,處理后應該是這樣的
性別特征:["男","女"](這里只有兩個特征,所以N=2):
男=>10
女=>01
祖國特征:["中國","美國,"法國"](N=3):
中國=>100
美國=>010
法國=>001
運動特征:["足球","籃球","羽毛球","乒乓球"](N=4):
足球=>1000
籃球=>0100
羽毛球=>0010
乒乓球=>0001
所以,當一個樣本為["男","中國","乒乓球"]的時候,完整的特征數字化的結果為:
[1,0,1,0,0,0,0,0,1]
下圖可能會更好理解:
python代碼示例:
fromsklearnimportpreprocessing enc=preprocessing.OneHotEncoder() enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]])#訓練。這里共有4個數據,3種特征 array=enc.transform([[0,1,3]]).toarray()#測試。這里使用1個新數據來測試 printarray#[[100100001]]#獨熱編碼結果
以上對應關系可以解釋為下圖:
3.one-hot編碼優缺點?
優點:
(1)化解了訓練樣本不太好解決離散數據的情況。
a.歐幾里得空間。在重歸,歸類,層次聚類等人工智能算法中,基本特征之間距離計算或相似度計算是很重要的,也許我們常見的相距或相似性的計算方法都會在歐幾里得空間的相似度計算,計算余弦相似性,基于的就是歐幾里得空間。
b.one-hot編寫代碼。使用one-hot編寫代碼,將離散特征的選值擴大到了歐幾里得空間,離散特征跟某個選值就相匹配歐幾里得空間跟某個點。將離散型基本特征使用one-hot編寫代碼,確實會讓基本特征之間的距離計算更加合理。
(2)在很大程度上起到了很好的擴大特點的功效。
缺點:
在文本特征表示上有些缺點就非常突出了。
(1)它是一個詞袋模型,不考慮詞與詞之間的順序(文本中詞的順序信息也是很重要的);
(2)它假設詞與詞相互獨立(在大多數情況下,詞與詞是相互影響的);
(3)它得到的特征是離散稀疏的(這個問題最嚴重)。
上述第3點展開:
(1)為什么得到的特征是離散稀疏的?
例如,如果將世界所有城市名稱作為語料庫的話,那這個向量會過于稀疏,并且會造成維度災難。如下:
杭州[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]
在語料庫中,杭州、上海、寧波、北京各對應一個向量,向量中只有一個值為1,其余都為0。
(2)能不能把詞向量的維度變小呢?
a)Dristributedrepresentation:
可以解決Onehotrepresentation的問題,它的思路是:
1.通過訓練,將每個詞都映射到一個較短的詞向量上來。
2.所有的這些詞向量就構成了向量空間,
3.進而可以用普通的統計學的方法來研究詞與詞之間的關系。
這個較短的詞向量維度是多大呢?這個一般需要我們在訓練時自己來指定。
b)舉例:
1.比如將詞匯表里的詞用"Royalty","Masculinity","Femininity"和"Age"4個維度來表示,King這個詞對應的詞向量可能是(0.99,0.99,0.05,0.7)。
2.在實際情況中,并不能對詞向量的每個維度做一個很好的解釋。
3.將king這個詞從一個可能非常稀疏的向量坐在的空間,映射到現在這個四維向量所在的空間,必須滿足以下性質:
(1)這個映射是單射;
(2)映射之后的向量不會丟失之前的那種向量所含的信息。
4.這個過程稱為wordembedding(詞嵌入),即將高維詞向量嵌入到一個低維空間。如圖:
5.經過我們一系列的降維神操作,有了用representation表示的較短的詞向量,我們就可以較容易的分析詞之間的關系了,比如我們將詞的維度降維到2維,有一個有趣的研究表明,用下圖的詞向量表示我們的詞時,我們可以發現:
6.出現這種現象的原因是,我們得到最后的詞向量的訓練過程中引入了詞的上下文。舉例:
想到得到"learning"的詞向量,但訓練過程中,你同時考慮了它左右的上下文,那么就可以使"learning"帶有語義信息了。通過這種操作,我們可以得到近義詞,甚至cat和它的復數cats的向量極其相近。
以上為止,小編就給大家介紹到這里了,希望可以能給各位讀者帶來幫助。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/127829.html
摘要:特征編碼類型本篇,我們主要說一下分類型特征的編碼方式。下面,我們要對這個變量進行編碼,在中有現成的獨熱編碼方法,代碼如下原來的變量被拆分為兩個單獨的變量,這兩個變量就是原來的分類特征值有電梯和無電梯。 作者:xiaoyu 微信公眾號:Python數據科學 知乎:python數據分析師 showImg(https://segmentfault.com/img/remote/146000...
摘要:特征編碼類型本篇,我們主要說一下分類型特征的編碼方式。下面,我們要對這個變量進行編碼,在中有現成的獨熱編碼方法,代碼如下原來的變量被拆分為兩個單獨的變量,這兩個變量就是原來的分類特征值有電梯和無電梯。 作者:xiaoyu 微信公眾號:Python數據科學 知乎:python數據分析師 showImg(https://segmentfault.com/img/remote/146000...
摘要:背景知識泰坦尼克號年月從英國南安普頓出發,途徑法國,愛爾蘭在美國大西洋碰觸冰山沉沒,一部分人幸免于難,一部分人沒有生存,這個案例中就是要通過機器學習的算法來預測一下中人的生存狀況。 背景知識: 泰坦尼克號1912年4月從英國南安普頓出發,途徑法國,愛爾蘭在美國大西洋碰觸冰山沉沒,一部分人幸免于難,一部分人沒有生存,這個案例中就是要通過機器學習的算法來預測一下test.csv中418人的...
閱讀 911·2023-01-14 11:38
閱讀 878·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1982·2023-01-14 10:34
閱讀 942·2023-01-14 10:24
閱讀 819·2023-01-14 10:18
閱讀 499·2023-01-14 10:09
閱讀 572·2023-01-14 10:02