一直在使用sklearn的库函数LabelEncoder,今天就尝试简单地复现一下~。LabelEncoder 是一种用于将类别变量转换为数字编码的工具。它可以将每个不同的类别标签映射到一个整数值,使得算法可以更好地处理这些数据。
核心代码:
class LabelEncoder:
def __init__(self):
super(LabelEncoder, self).__init__()
## 初始化
self.labels = None
def fit(self, y):
## 获取所有不重复标签
self.labels = list(set(y))
def transform(self, y):
## 将标签转换为编码
encoder_labels = []
for label in y:
if label in self.labels:
encoder_labels.append(self.labels.index(label))
else:
raise ValueError(f"y contains previously unseen labels: {label}")
return encoder_labels
def fit_transform(self, y):
self.fit(y)
return self.transform(y)
def inverse_transform(self, encoder_labels):
## 将编码转换为标签
y = []
for i in encoder_labels:
y.append(self.labels[i])
return y
测试代码:
labelEncoder = LabelEncoder()
# y = ["apple", "banana", "char", None]
y = ["male", "female", "apple", "add", "sub", "one", "apple"]
labelEncoder.fit(y)
encoder_labels = labelEncoder.transform(["male", "female", "one"])
labels = labelEncoder.inverse_transform(encoder_labels)
print(encoder_labels)
print(labels)
测试结果:
上述代码只是LabelEncoder的简单实现,并没有深究可能遇到的各种错误问题。值得注意的是,您在运行上述代码的时候可能发现每次打印的结果都不一样,其实这并不是错误,这是由于集合是无序的,因此其元素的排列顺序可能会发生变化。