【火炉炼AI】机器学习002-标记编码方法

【火炉炼AI】机器学习002-标记编码方法

【本文所使用的Python库和版本号】: Python 3.5, Numpy 1.14, scikit-learn 0.19

 

监督学习中的标记的形式有各种各样,比如对于人脸识别的标记,可能是[“小红”,“小花”,“翠花”。。。],这些标记对于机器学习来说,如同天书一般,故而为了让机器学习“看懂”这些标记,需要将这些文本类的标记进行一定的编码,形成比如【3,2,4,0,…】等形式

1. 编码方法

有很多python模块可以实现对标记进行编码,此处使用scikit-learn模块中的preprocessing包来进行编码。àTalk is cheap, just show me the code….

# *****************对label进行编码********************************  
from sklearn import preprocessing  
  
# 构建编码器  
encoder=preprocessing.LabelEncoder() # 先定义一个编码器对象  
raw_labels=['翠花','张三','王宝强','芙蓉姐姐','凤姐','王宝强','凤姐']  
encoder.fit(raw_labels) # 返回自己的一个实例  
print('编码器列表:{}'.format(encoder.classes_)) # 返回编码器中所有类别,已经排除了重复项  
for index,item in enumerate(encoder.classes_):  
    print('{} --> {}'.format(item,index))  
      
# 使用编码器来编码新样本数据  
need_encode_labels=['王宝强','芙蓉姐姐','翠花']  
# need_encode_labels=['王宝强','芙蓉姐姐','翠花','无名氏']   
# '无名氏'不存在编码器列表中,会报错  
encoded_labels=encoder.transform(need_encode_labels)  
print('\n编码之前的标记:{}'.format(need_encode_labels))  
print('编码之后的标记:{}'.format(encoded_labels))  
  
# 使用编码器将编码数字解码成原来的文本标记,注意最大值不能超过编码器中的长度  
encoded=[1,3,0,4]  
# encoded=[1,3,0,4,5] # 5不存在与编码器中,故报错  
decoded_labels=encoder.inverse_transform(encoded)  
print('\n已经编码的标记代码:{}'.format(encoded))  
print('解码后的标记:{}'.format(decoded_labels))  

编码器列表:['凤姐' '张三' '王宝强' '翠花' '芙蓉姐姐']

凤姐 --> 0

张三 --> 1

王宝强 --> 2

翠花 --> 3

芙蓉姐姐 --> 4

 

编码之前的标记:['王宝强', '芙蓉姐姐', '翠花']

编码之后的标记:[2 4 3]

 

已经编码的标记代码:[1, 3, 0, 4]

解码后的标记:['张三' '翠花' '凤姐' '芙蓉姐姐']

 

小结:

u 1,使用sklearn的preprocessing模块对标记进行编码是非常简单的,首先构建一个基于所有标记数据的编码器,然后使用该编码器进行编码或解码

u 2,需要注意,在编码时,如果遇到编码器中没有的标记时会报错,在解码时也一样。

 

注:本部分代码已经全部上传到(我的github)上,如有任何问题,请联系我。

参考:Python机器学习经典实例,Prateek Joshi著,陶俊杰,陈小莉译

猜你喜欢

转载自blog.csdn.net/dingustb/article/details/81189046
今日推荐