新的 Sklearn 语法

New Sklearn syntax

我如何重写此代码,使其适用于 scikit-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()

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

有一件事是肯定的,你不应该使用 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]]