机器学习,分析认识sklearn的OrdinalEncoder编码器
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
sklearn
里面内置了很多编码器,用于把人类认识的单词转化为程序认识的数字。本文描述第二个编码器OrdinalEncoder
(序数编码器),它和上一个LabelEncoder
在编码的原理上是很相似的。但是,它接受的输入变量有些不同。LabelEncoder
接受的是一维向量作为输入,OrdinalEncoder
接受的是二维数组或者是dataframe
作为输入项目。这就是两者最大的区别。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程所见所闻。本文测试环境:win10
,python@3.12.0
,scikit-learn@1.3.2
。
基本使用
下面演示OrdinalEncoder
的基本使用方法,和以前的类似编码器对比,使用方法基本一致。可以参考文章:
基本定义:
from sklearn import preprocessing
oe = preprocessing.OrdinalEncoder()
X = [
["虎子", 5, "dog"],
["老许", 3, "bird"],
["二赖子", 6, "fish"],
["老白", 8, "catty"],
["小黑", 10, "puppy"],
]
可以.fit()
和.transform()
分开调用
oe.fit(X)
a = oe.transform(X)
print(a,type(a))
也可以两者同时调用:
a = oe.fit_transform(X)
print(a,type(a))
输出:
[[4. 1. 2.]
[3. 0. 0.]
[0. 2. 3.]
[2. 3. 1.]
[1. 4. 4.]] <class 'numpy.ndarray'>
这个为什么某个单词转化为0
,而不是1
。这个编码顺序可以参考unicode
编码。
这里的输入项目是二维数组,一列代表着一个相同的特性描述。所以,它的字典编码也是以一列为单位的。
获取.classes_
然而,和LabelEncoder
不同的是,OrdinalEncoder
没有.classes_
属性。这个就暂不做探讨了。
AttributeError: 'OrdinalEncoder' object has no attribute 'classes_'
逆转编码
b = oe.inverse_transform([[1,1,0]]) # [['小黑' 5 'bird']]
注意的是:被逆转的数据列数必须和输入项相等。否则报错,例如:
a = oe.inverse_transform([[1,1]])
# ValueError: Shape of the passed X data is not correct. Expected 3 columns, got 2.
c = oe.inverse_transform([[1,1,0,0]])
# ValueError: Shape of the passed X data is not correct. Expected 3 columns, got 4.
输入项对比
正如文章开头所描述的一样,LabelEncoder
接受的是一维向量作为输入,OrdinalEncoder
接受的是二维数组或者是dataframe
作为输入项目。这就是两者最大的区别。
from sklearn import preprocessing
oe = preprocessing.OrdinalEncoder()
X = [
["虎子", 5, "dog"],
["老许", 3, "bird"],
["二赖子", 6, "fish"],
["老白", 8, "catty"],
["小黑", 10, "puppy"],
]
# 注意看这里
import pandas as pd
X= pd.DataFrame(X)
# 注意看这里
oe.fit(X)
b = oe.inverse_transform([[1,1,0]])
print(b)
横着的一维向量是不能作为输入的,例如:
X = ["虎子", 5, "dog"]
报错信息是:
# Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
改成竖直的二维数组,就可以作为输入了:
from sklearn import preprocessing
oe = preprocessing.OrdinalEncoder()
import numpy as np
X = ["虎子", 5, "dog"]
X = np.array(X)
X = X.reshape(-1,1)
oe.fit(X)
b = oe.inverse_transform([[1]]) # [['dog']]
print(b)
结语
更多苏南大叔的sklearn
相关经验文章,请点击:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。