【火爐煉AI】機(jī)器學(xué)習(xí)002-標(biāo)記編碼方法
(本文所使用的Python庫和版本號: Python 3.5, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )
監(jiān)督學(xué)習(xí)中的標(biāo)記的形式有各種各樣,比如對于人臉識別的標(biāo)記,可能是[“小紅”,“小花”,“翠花”。。。],這些標(biāo)記對于機(jī)器學(xué)習(xí)來說,如同天書一般,故而為了讓機(jī)器學(xué)習(xí)“看懂”這些標(biāo)記,需要將這些文本類的標(biāo)記進(jìn)行一定的編碼,形成比如【3,2,4,0,…】等形式.
1. 編碼方法
有很多python模塊可以實現(xiàn)對標(biāo)記進(jìn)行編碼,此處使用scikit-learn模塊中的preprocessing包來進(jìn)行編碼。Talk is cheap, just show me the code….
# *****************對label進(jìn)行編碼********************************
from sklearn import preprocessing
# 構(gòu)建編碼器
encoder=preprocessing.LabelEncoder() # 先定義一個編碼器對象
raw_labels=['翠花','張三','王寶強(qiáng)','芙蓉姐姐','鳳姐','王寶強(qiáng)','鳳姐']
encoder.fit(raw_labels) # 返回自己的一個實例
print('編碼器列表:{}'.format(encoder.classes_)) # 返回編碼器中所有類別,已經(jīng)排除了重復(fù)項
for index,item in enumerate(encoder.classes_):
print('{} --> {}'.format(item,index))
# 使用編碼器來編碼新樣本數(shù)據(jù)
need_encode_labels=['王寶強(qiáng)','芙蓉姐姐','翠花']
# need_encode_labels=['王寶強(qiáng)','芙蓉姐姐','翠花','無名氏']
# '無名氏'不存在編碼器列表中,會報錯
encoded_labels=encoder.transform(need_encode_labels)
print('\n編碼之前的標(biāo)記:{}'.format(need_encode_labels))
print('編碼之后的標(biāo)記:{}'.format(encoded_labels))
# 使用編碼器將編碼數(shù)字解碼成原來的文本標(biāo)記,注意最大值不能超過編碼器中的長度
encoded=[1,3,0,4]
# encoded=[1,3,0,4,5] # 5不存在與編碼器中,故報錯
decoded_labels=encoder.inverse_transform(encoded)
print('\n已經(jīng)編碼的標(biāo)記代碼:{}'.format(encoded))
print('解碼后的標(biāo)記:{}'.format(decoded_labels))
-------------------------------------輸---------出--------------------------------
編碼器列表:['鳳姐' '張三' '王寶強(qiáng)' '翠花' '芙蓉姐姐']
鳳姐 --> 0
張三 --> 1
王寶強(qiáng) --> 2
翠花 --> 3
芙蓉姐姐 --> 4
編碼之前的標(biāo)記:['王寶強(qiáng)', '芙蓉姐姐', '翠花']
編碼之后的標(biāo)記:[2 4 3]
已經(jīng)編碼的標(biāo)記代碼:[1, 3, 0, 4]
解碼后的標(biāo)記:['張三' '翠花' '鳳姐' '芙蓉姐姐']
--------------------------------------------完-------------------------------------
########################小**********結(jié)###############################
1,使用sklearn的preprocessing模塊對標(biāo)記進(jìn)行編碼是非常簡單的,首先構(gòu)建一個基于所有標(biāo)記數(shù)據(jù)的編碼器,然后使用該編碼器進(jìn)行編碼或解碼
2,需要注意,在編碼時,如果遇到編碼器中沒有的標(biāo)記時會報錯,在解碼時也一樣。
#################################################################
注:本部分代碼已經(jīng)全部上傳到(我的github)上,歡迎下載。
參考資料:
1, Python機(jī)器學(xué)習(xí)經(jīng)典實例,Prateek Joshi著,陶俊杰,陳小莉譯