柚子快報邀請碼778899分享:pandas 解決get
柚子快報邀請碼778899分享:pandas 解決get
??今天對表格類型的數(shù)據(jù)集做數(shù)據(jù)處理的時候,用pandas中的get_dummies()方法對離散的字符型特征做獨熱編碼處理,碰到一個問題:編碼出來的結(jié)果不是0、1,全是布爾型的True和False,查了網(wǎng)上很多資料,解決問題后特此記錄。 ??one-hot編碼是對離散的特征數(shù)據(jù)進行特征數(shù)字化的常用方法,又稱為一位有效編碼,主要是采用N位狀態(tài)寄存器來對N個狀態(tài)進行編碼,每個狀態(tài)都由他獨立的寄存器位,并且在任意時候只有一位有效。 ??比如對性別特征:[“男”,“女”]進行One-Hot編碼,按照N位狀態(tài)寄存器來對N個狀態(tài)進行編碼的原理,處理后應該是這樣的(有兩種特征,所以N=2):[10,01],就是把原來的特征轉(zhuǎn)化成了n個二元數(shù)值型的特征,原來的特征有多少種就有多少位,是哪種特征該位置上就是1,其他位置就是0,這樣就可以解決分類器不好處理屬性數(shù)據(jù)(字符型)的問題。 ??get_dummies是pandas庫實現(xiàn)one-hot編碼的方式。官方文檔:pandas.get_dummies
pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)
舉例:
import pandas as pd
df = pd.DataFrame([
['zhang' , 'A'],
['wang' , 'B']])
df.columns = ['name', 'gender']
pd.get_dummies(df)
??這樣就可以對df進行one-hot編碼,也可以只對表格中的某幾種特征進行one-hot編碼:
pd.get_dummies(df,columns=['name','gender'])
??只要指定columns列表就行了,這里要注意一個問題,就是編碼完之后得到的表里只有你編碼的那幾種特征,你要在原來的數(shù)據(jù)表里把這幾種特征刪了,在把get_dummies的結(jié)果加進去。 ??如果你的版本比較新,你可能會得到這么一個結(jié)果: ??查了資料,原因:
get_dummies函數(shù)在pandas1.6.0版本之前返回numpy.uint8,無符號八位整數(shù),在1.6.0版本開始更改為返回numpy.bool_,numpy布爾值。 該修改由#45848提出,認為返回值是無符號整型變量將導致難以跟蹤的錯誤,于#48022中完成修復。
??但是這樣子給模型訓練有可能就會報錯,如果你需要int型的,你需要自己指定:
pd.get_dummies(df,columns=['name','gender'],dtype=int)
??結(jié)果: ??問題解決。
??更新:有些特征值的取值太多會導致ont-hot編碼后的特征矩陣太大無法計算,書接下文:解決one-hot編碼時特征值太多導致矩陣維度太大的問題
柚子快報邀請碼778899分享:pandas 解決get
精彩內(nèi)容
本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。