新Sklearn语法

2024-09-20 23:04:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我如何重写这段代码,使它能与sckit learn 0.22版本一起工作

from sklearn.preprocessing import LabelEncoder, OneHotEncoderlabelencoder = LabelEncoder()

x[:,0] = labelencoder.fit_transform(x[:,0])

onehotencoder = OneHotEncoder(categories = 0)

x = onehotencoder.fit_transform(x).toarray()

Tags: 代码fromimport版本transformsklearnlearnfit
1条回答
网友
1楼 · 发布于 2024-09-20 23:04:00

最好知道您试图解决什么问题,因为不清楚您的代码应该做什么

有一点是肯定的,您不应该使用LabelEncoder来编码数据(即X),而应该直接使用OneHotEncoder。因此,对一个类别矩阵进行热编码:

import numpy as np
from sklearn.preprocessing import OneHotEncoder

X = np.array(
    [['a', 'b'],
     ['b', 'a']],
    dtype=object
)

encoder = OneHotEncoder()
X_trans = encoder.fit_transform(X)
print(X_trans.A)

你会得到:

[[1. 0. 0. 1.]
 [0. 1. 1. 0.]]

如果只想在列的子集上应用编码器,那么需要使用ColumnTransformer

import numpy as np
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder


X = np.array(
    [['a', 'b', 1],
     ['b', 'a', 2]],
    dtype=object
)

preprocessor = ColumnTransformer(
    [('cat-encoder', OneHotEncoder(), [0, 1])],
    remainder="passthrough"
)

X_trans = preprocessor.fit_transform(X)
print(X_trans)

你会得到这样的结果:

[[1.0 0.0 0.0 1.0 1]
 [0.0 1.0 1.0 0.0 2]]

相关问题 更多 >

    热门问题