当前位置: 首页 > 知识库问答 >
问题:

为什么来自skLearning的LabelEncoder只能用于目标变量?

闻人德庸
2023-03-14

我试图用LabelEncoder创建一个管道来转换分类值。

cat_variable = Pipeline(steps = [
    ('imputer',SimpleImputer(strategy = 'most_frequent')),
    ('lencoder',LabelEncoder())
])
                        
num_variable = SimpleImputer(strategy = 'mean')

preprocess = ColumnTransformer (transformers = [
    ('categorical',cat_variable,cat_columns),
    ('numerical',num_variable,num_columns)
])

odel = RandomForestRegressor(n_estimators = 100, random_state = 0)

final_pipe = Pipeline(steps = [
    ('preprocessor',preprocess),
    ('model',model)
])

scores = -1 * cross_val_score(final_pipe,X_train,y,cv = 5,scoring = 'neg_mean_absolute_error')

但这会抛出一个类型错误:


TypeError: fit_transform() takes 2 positional arguments but 3 were given

在进一步的参考中,我发现像LabelEncoders这样的变压器不应该与功能一起使用,而应该只在预测目标上使用。

从文件:

类sklearn.preprocessing.LabelEncoder

编码目标标签,其值介于0和n_classes-1之间。

该转换器应用于编码目标值,即y,而不是输入X。

我的问题是,为什么我们不能在特征变量上使用标签编码器,还有其他变压器有这样的情况吗?

共有1个答案

解阳荣
2023-03-14

LabelEncoder可用于规范化标签或转换非数字标签。对于输入分类,您应该使用OneHotEncoder。

区别在于:

le = preprocessing.LabelEncoder()
le.fit_transform([1, 2, 2, 6])
array([0, 0, 1, 2])

enc = OneHotEncoder(handle_unknown='ignore')
enc.fit_transform([[1], [2], [2], [6]]).toarray()
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
 类似资料:
  • c 17引入了结构化绑定。它们能够声明从元组或结构初始化的多个变量。 此代码使用编译器进行编译。 如果我没有用声明变量,我会得到错误 错误:lambda表达式[d2,i2]的预期主体=元组; 我使用了clang version 4.0.0和编译选项-std=c 1z。 我可以将现有变量分配给结构化绑定吗?我需要使用?

  • 由于这里有一些很好的答案,我基本上(显然是以有限的方式)理解了Haskell的的目的,并且它的定义是 然而,我不太清楚为什么是这个定义的一部分。据我所知,这就是本身的定义所在,但相关的留档并没有对此做太多说明。 我认为在

  • 问题内容: 在这里只能是最终的。为什么?如何在不保留为私有成员的情况下重新分配方法? 单击该如何返回? 问题答案: 如注释中所述,其中一些在Java 8中变得无关紧要,在Java 8中final可以隐式使用。但是,只能在匿名内部类或lambda表达式中使用有效的最终变量。 这基本上是由于Java管理闭包的方式。 创建匿名内部类的实例时,该类中使用的任何变量都将通过自动生成的构造函数复制其值。这样避

  • 因此,我用javascript呈现了一个add minus按钮,因为我需要数据库中的数据,如果我不用javascript呈现它,它可以工作,但它不工作。 HTML: JS(渲染): JS(加减按钮): (调用所有函数) 我的测试使我认为问题可能是val()函数没有改变输入HTML的值,因为如果我使用console.log来显示它,它可以工作,但它不会在web上更新

  • 问题内容: 在这里只能是最终的。为什么?如何在不保留为私有成员的情况下重新分配方法? 单击该如何返回?我的意思是, 问题答案: 如注释中所述,其中一些在Java 8中变得无关紧要,在Java 8中final可以隐式使用。但是,只能在匿名内部类或lambda表达式中使用有效的最终变量。 这基本上是由于Java管理闭包的方式。 创建匿名内部类的实例时,该类中使用的任何变量都将通过自动生成的构造函数复制

  • 所以我想知道,为什么一个PHP网站可以请求任何资源,但是有了JS,很多都因为CORS而被阻止了。有人能给我解释一下吗?

  • 当我导入此接口并尝试调用方法时,它将失败,并出现以下错误: 我已经创建了一个intellij kotlin应用程序,它的工作是正确的。是新Kotlin gradle插件的bug吗?