sklearn.preprocessing.OneHotEncoder
2021/5/17 18:25:22
本文主要是介绍sklearn.preprocessing.OneHotEncoder,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.概要
sklearn中的OneHotEncoder函数,可以将分类特征的每个元素转换为一个可以用来计算的值。
2. 解析
函数sklearn.preprocessing.OneHotEncoder,格式为:
OneHotEncoder(n_values=’auto’, categorical_features=’all’, dtype=<class ‘numpy.float64’>, sparse=True, handle_unknown=’error’)
方便理解,举例如下:
from sklearn.preprocessing import OneHotEncoder enc = OneHotEncoder() enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]) ans = enc.transform([[0, 1, 3]]).toarray() # 如果不加 toarray() 的话,输出的是稀疏的存储格式,即索引加值的形式,也可以通过参数指定 sparse = False 来达到同样的效果 print(ans) # 输出 [[ 1. 0. 0. 1. 0. 0. 0. 0. 1.]]
下面解释输出结果的意思。对于输入数组,依旧是把每一行当做一个样本,每一列当做一个特征。
第一个特征,即第一列[0,1,0,1],也就是说它有两个取值0或者1,那么one-hot就会使用两位来表示这个特征,[1,0]表示0,[0,1]表示1。在上例的输出结果中[[ 1. 0. 0. 1. 0. 0. 0. 0. 1.]]前两位表示该特征为0。
第二个特征,第二列[0,1,2,0],它有三种值,那么one-hot就会使用三位来表示这个特征,[1,0,0]表示0,[0,1,0]表示1,[0,1,1]表示2,在上例输出结果中[[ 1. 0. 0. 1. 0. 0. 0. 0. 1.]]的第三位到第五位表示该特征为1。
第三个特征,第三例[3,0,1,2],它有四种值,那么one-hot就会使用四位来表示这个特征,[1,0,0,0]表示为0,[0,1,0,0]表示为1,[0,0,1,0]表示为2,[0,0,0,1]表示为3,在上例输出结果中[[ 1. 0. 0. 1. 0. 0. 0. 0. 1.]]的最后四位表示该特征为3。
注意:虽然训练样本中的数值仅仅代表类别,但是也必须使用数值格式的数据,如果使用字符串格式的数据会报错。
参数的意义:
n_values='auto':表示每个特征使用几维由数据集自动推断,即几种类别就使用几位来表示。
当然也可以自己指定。举例:
from sklearn.preprocessing import OneHotEncoder enc = OneHotEncoder(n_values = [2, 3, 4]) enc.fit([[0, 0, 3], [1, 1, 0]]) ans = enc.transform([[0, 2, 3]]).toarray() print(ans) # 输出 [[ 1. 0. 0. 0. 1. 0. 0. 0. 1.]]
注意到训练样本中第二个特征列没有类别2,但是结果依然将类别2给编码了出来,这就是自己指定维数的作用(我们使用3位来表示第二个特征,自然包括了类别2),第三列特征同样如此。这也告诫我们,如果训练样本中有丢失的分类特征值,我们就必须显示的设置参数n_value了,这样防止编码出错。
categorical_features='all':这个参数指定对哪些特征进行编码,默认对所有类别都进行编码。
也可以自己指定选择哪些特征,通过索引或者bool值来指定。举例:
from sklearn.preprocessing import OneHotEncoder enc = OneHotEncoder(categorical_features = [0,2]) # 等价于 [True, False, True] enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]) ans = enc.transform([[0, 2, 3]]).toarray() print(ans) # 输出 [[ 1. 0. 0. 0. 0. 1. 2.]]
输出结果中前两位[1,0]表示0,中间四位[0,0,0,1]表示对第三个特征3编码,第二个特征2没有进行编码,就放在最后一位。
dtype=<class 'numpy.float64'>:表示编码数值格式,默认为浮点型。
sparse=True:表示编码的格式,默认为True,稀疏的格式,指定False就不用toarray()了。
handle_unknown='error':其值可以为‘error’或'ignore',即如果碰到未知的类别,是返回一个错误还是忽略。
来自:https://www.cnblogs.com/zhoukui/p/9159909.html
这篇关于sklearn.preprocessing.OneHotEncoder的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-13Slicm 框架怎么进行用户认证?-icode9专业技术文章分享
- 2024-11-13在查询时将 map_coord 列的值转换为字符串有哪些方法?-icode9专业技术文章分享
- 2024-11-13如何将微信地区改成自定义文案?-icode9专业技术文章分享
- 2024-11-13DNS 缓存存在问题有哪些症状和解决方法?-icode9专业技术文章分享
- 2024-11-13HTTP 状态码(405)-Method Not Allowed是什么意思?-icode9专业技术文章分享
- 2024-11-13HTTP 状态码(500)-Internal Server Error是什么意思?-icode9专业技术文章分享
- 2024-11-13在 Element UI 中无法修改 $confirm 的取消按钮文字是什么原因?-icode9专业技术文章分享
- 2024-11-13unity XR是什么?-icode9专业技术文章分享
- 2024-11-13伴随矩阵是什么?-icode9专业技术文章分享
- 2024-11-13怎么使用grep -E 来查找匹配最后 2 条数据?-icode9专业技术文章分享