简单实现LabelEncoder(2023/07/17)

        一直在使用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的简单实现,并没有深究可能遇到的各种错误问题。值得注意的是,您在运行上述代码的时候可能发现每次打印的结果都不一样,其实这并不是错误,这是由于集合是无序的,因此其元素的排列顺序可能会发生变化。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
TabNet是一种基于注意力机制的自动特征选择算法,可以用于表格数据的分类和回归问题。在Python中,我们可以使用PyTorch和TabNet的开源实现库pytorch-tabnet来实现TabNet。 以下是一个简单的TabNet分类模型的实现示例: 首先,安装必要的库: ```python !pip install pytorch-tabnet ``` 然后,导入必要的库并准备数据: ```python import numpy as np import pandas as pd import torch from sklearn.model_selection import train_test_split from sklearn.preprocessing import LabelEncoder from pytorch_tabnet.tab_model import TabNetClassifier # Load data data = pd.read_csv('data.csv') # Preprocess data target = 'class' features = [col for col in data.columns if col != target] cat_idxs = [i for i, f in enumerate(features) if data[f].dtype == 'O'] cat_dims = [len(data[f].unique()) for i, f in enumerate(features) if data[f].dtype == 'O'] encoder = LabelEncoder() for i in cat_idxs: data[features[i]] = encoder.fit_transform(data[features[i]]) X_train, X_val, y_train, y_val = train_test_split(data[features], data[target], test_size=0.2, random_state=42) ``` 接下来,定义并训练模型: ```python # Define model model = TabNetClassifier(cat_idxs=cat_idxs, cat_dims=cat_dims) # Train model model.fit(X_train=X_train.values, y_train=y_train.values, eval_set=[(X_val.values, y_val.values)], max_epochs=100, patience=10, batch_size=1024, virtual_batch_size=32) # Predict y_pred = model.predict(X_val.values) ``` 最后,评估模型性能: ```python from sklearn.metrics import accuracy_score accuracy = accuracy_score(y_val.values, y_pred) print(f'Accuracy: {accuracy}') ``` 这是一个简单的TabNet分类模型的实现示例。你可以根据自己的需求和数据进行修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值