摘要:特征編碼類型本篇,我們主要說一下分類型特征的編碼方式。下面,我們要對這個變量進行編碼,在中有現成的獨熱編碼方法,代碼如下原來的變量被拆分為兩個多帶帶的變量,這兩個變量就是原來的分類特征值有電梯和無電梯。
作者:xiaoyu
微信公眾號:Python數據科學
知乎:python數據分析師
我們拿到的數據通常比較臟亂,可能會帶有各種非數字特殊符號,比如中文。下面這個表中顯示了我們最原始的數據集。而實際上機器學習模型需要的數據是數字型的,因為只有數字類型才能進行計算。因此,對于各種特殊的特征值,我們都需要對其進行相應的編碼,也是量化的過程。
2. 特征編碼類型本篇,我們主要說一下分類型特征的編碼方式。對于分類型數據的編碼,我們通常會使用兩種方式來實現,分別是:one-hot encoding 和 label-encoding。下面我們先介紹一下這兩種編碼。
One-hot encoding
one-hot encoding也就是我們常常聽到的獨熱編碼(啞變量)。那么到底什么是獨熱編碼呢?我們來看一個例子,是二手房房價分析中所使用的數據:
可以看到,圖中的Elevator和Renovation都是定類型數據。除去缺失值,Elevator分類有電梯和無電梯兩種。Renovation分為有精裝,簡裝,毛坯和其它四種。下面,我們要對Elevator這個變量進行編碼,在pandas中有現成的獨熱編碼方法get_dummy,代碼如下:
pd.get_dummies(lianjia_df["Elevator"])
原來的Elevator變量被拆分為兩個多帶帶的變量,這兩個變量就是原來的分類特征值:有電梯和無電梯。并且新變量的特征值用數字0和1來替代,代表是否或者有無的概念。比如無電梯變量的1代表是(沒有電梯),相反,0就代表否(有電梯)。因此概括一下,獨熱編碼就是將原始特征變量轉換成以原始特征值分類的多維度的變量,并用是否(0,1)這種方式的新特征值替代和量化。
Label encoding
label-encoding就是用標簽進行編碼的意思,即我們給特征變量自定義數字標簽,量化特征。來看一個例子:
Class=["大一","大二","大三","大四"] df = pd.DataFrame({"Class":Class}) df
Class特征是定序數據類型,也是分類類型,但比定類更高級,因為有排序。Label encoding就是對特征值進行自定義式的標簽編碼。比如將大一變為1,大二變為2,大三為3,大四為4。那么經過編碼后,特征值將變為以下的樣子:
classMap = {"大一":1,"大二":2,"大三":3,"大四":4} df["Class"] = df["Class"].map(classMap) df
上面就將Class特征進行相應的編碼。其實,Label encoding并沒有任何限制,你也可以將Class定義為10,20,30,40,只不過1,2,3,4看起來比較方便。因此總結概括,Label encoding就是將原始特征值編碼為自定義的數字標簽完成量化編碼過程。
3. 兩種編碼方式的優缺點One-hot encoding
優點:解決了分類器不好處理分類數據的問題,在一定程度上也起到了擴充特征的作用。它的值只有0和1,不同的類型存儲在垂直的空間。
缺點:當類別的數量很多時,特征空間會變得非常大,容易造成維度災難。
Label encoding
優點:解決了分類編碼的問題,可以自由定義量化數字。但其實也是缺點,因為數值本身沒有任何含義,只是排序。如大中小編碼為123,也可以編碼為321,即數值沒有意義。
缺點:可解釋性比較差。比如有[dog,cat,dog,mouse,cat],我們把其轉換為[1,2,1,3,2],這里就產生了一個奇怪的現象:dog和mouse的平均值是cat。因此,Label encoding編碼其實并沒有很寬的應用場景。
4. 兩種編碼該如何區分和使用?明白這兩種編碼方式并不難,難的是如何區分和使用。好多朋友面對數據,會產生困惑,不知該使用哪種編碼方式最為合適。對于這個問題,有以下幾點需要考量:
特征的數據類型
所要使用的模型
事先聲明:編碼方式沒有固定的方式,具體問題還需具體分析。對模型結果有利的編碼才是最正確的。所以,實際中如果分不清哪種更好的時候,可能需要將兩種都嘗試進行對比。
下面分享一下自己淺顯的經驗(一般情況下的使用):
特征數據類型對于定類類型的數據,建議使用one-hot encoding。定類類型就是純分類,不排序,沒有邏輯關系。比如性別分男和女,男女不存在任何邏輯關系,我們不能說男就比女好,或者相反。再者,中國各省市分類也可以用獨熱編碼,同樣各省不存在邏輯關系,這時候使用one-hot encoding會合適些。但注意,一般會舍去一個變量,比如男的對立面肯定是女,那么女就是重復信息,所以保留其中一個變量即可。
對于定序類型的數據,建議使用label encoding。定序類型也是分類,但有排序邏輯關系,等級上高于定類。比如,學歷分小學,初中,高中,本科,研究生,各個類別之間存在一定的邏輯,顯然研究生學歷是最高的,小學最低。這時候使用Label encoding會顯得更合適,因為自定義的數字順序可以不破壞原有邏輯,并與這個邏輯相對應。
所使用的模型對數值大小敏感的模型必須使用one-hotencoding。典型的例子就是LR和SVM。二者的損失函數對數值大小是敏感的,并且變量間的數值大小是有比較意義的。而Label encoding的數字編碼沒有數值大小的含義,只是一種排序,因此對于這些模型都使用one-hot encoding。
對數值大小不敏感的模型(如樹模型)不建議使用one-hotencoding。一般這類模型為樹模型。如果分類類別特別多,那么one-hot encoding會分裂出很多特征變量。這時候,如果我們限制了樹模型的深度而不能向下分裂的話,一些特征變量可能就因為模型無法繼續分裂而被舍棄損失掉了。因此,此種情況下可以考慮使用Label encoding。
以上兩點考量需要綜合考慮,而非多帶帶判斷。也就是說需要結合數據類型和模型的情況來具體選擇編碼方式。
5. 總結以上是博主對于兩種編碼方式的一些理解,如果有什么不對或者需要補充的地方,請大家指正。而對于連續型的變量,如果需要編碼首先需要進行離散化(分箱),然后再使用上述編碼方式編碼。數據離散化的內容我們后續進行介紹。
關注微信公眾號:Python數據科學,發現更多精彩內容。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/42228.html
摘要:特征編碼類型本篇,我們主要說一下分類型特征的編碼方式。下面,我們要對這個變量進行編碼,在中有現成的獨熱編碼方法,代碼如下原來的變量被拆分為兩個單獨的變量,這兩個變量就是原來的分類特征值有電梯和無電梯。 作者:xiaoyu 微信公眾號:Python數據科學 知乎:python數據分析師 showImg(https://segmentfault.com/img/remote/146000...
摘要:翁哥是一個不折不扣的程序員,曾經在互聯網公司做了十幾年,可是期間他接觸了很多養魚的商人與愛好者,主要還是因為他喜歡魚與自然。唯一有點欠缺的就是,我們翁哥沒有分享他的商業模式,不過看到這里已經很佩服他的激情與勇氣了。 本博客 貓叔的博客,轉載請申明出閱讀本文約3分鐘適讀人群:IT/互聯網工作者 身邊很多朋友最近都和我訴苦說有點迷茫... 我大多都詢問他們最近是否有制定什么目標,為什么制...
摘要:對于上述問題,混合云架構無疑是企業的最佳選擇。解決方案將本地環境與公有云連通組成混合云架構,實現對本地環境計算能力的快速擴展。前言當前各行各業在積極擁抱云計算,但由于一些歷史原因和合規要求導致很多企業全面上云比較困難,比如企業監管制度及合規要求一些核心數據庫必須保留在本地數據中心;本地數據中心作為企業固定資產不容易完全拋棄;有些大型集團企業IT架構復雜,全面遷移上云的影響難以評估等等。因此,...
摘要:對于上述問題,混合云架構無疑是企業的最佳選擇。解決方案將本地環境與公有云連通組成混合云架構,實現對本地環境計算能力的快速擴展。前言當前各行各業在積極擁抱云計算,但由于一些歷史原因和合規要求導致很多企業全面上云比較困難,比如企業監管制度及合規要求一些核心數據庫必須保留在本地數據中心;本地數據中心作為企業固定資產不容易完全拋棄;有些大型集團企業IT架構復雜,全面遷移上云的影響難以評估等等。因此,...
閱讀 2661·2021-09-09 09:33
閱讀 2818·2019-08-30 15:54
閱讀 2876·2019-08-30 14:21
閱讀 2363·2019-08-29 17:15
閱讀 3588·2019-08-29 16:13
閱讀 2766·2019-08-29 14:21
閱讀 3433·2019-08-26 13:25
閱讀 2034·2019-08-26 12:14