web-dev-qa-db-ja.com

TypeError:__init __()が予期しないキーワード引数 'categorical_features'を取得しました

スパイダー(python 3.7)

ここで次のエラーに直面しています。私はすでにanaconda Promptからすべてのライブラリを更新しています。しかし、問題の解決策を見つけることができません。

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X_1 = LabelEncoder()
X[:, 1] = labelencoder_X_1.fit_transform(X[:, 1])
labelencoder_X_2 = LabelEncoder()

X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])
onehotencoder = OneHotEncoder(categorical_features = [1])
X = onehotencoder.fit_transform(X).toarray()
Traceback (most recent call last):

File "<ipython-input-4-05deb1f02719>", line 2, in <module>
onehotencoder = OneHotEncoder(categorical_features = [1])

TypeError: __init__() got an unexpected keyword argument 'categorical_features'
5
Rafsan Sadman

したがって、コードに基づいて、次のことを行う必要があります。

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.compose import ColumnTransformer

# Country column
ct = ColumnTransformer([("Country", OneHotEncoder(), [1])], remainder = 'passthrough')
X = ct.fit_transform(X)

# Male/Female
labelencoder_X = LabelEncoder()
X[:, 2] = labelencoder_X.fit_transform(X[:, 2])

最初のLabelEncoderがどのように削除されたかに注目して、エンコードされたラベルと1つのホットエンコーダーの両方を列に適用する必要はありません。

(私はあなたの例がML Udemyコースから来たと少し想定しています。最初の列は国のリストで、2番目の列は男性/女性のバイナリ選択です)

3

documentation によると、これは __init__ 行です:

class sklearn.preprocessing.OneHotEncoder(categories='auto', drop=None, sparse=True, dtype=<class 'numpy.float64'>, handle_unknown='error')

ご覧のとおり、initは変数categorical_featuresを取得していません

categoriesフラグがあります:

カテゴリー 'auto'または配列のような、default = 'auto'カテゴリー(機能ごとのカテゴリー)のリスト:

'auto':トレーニングデータから自動的にカテゴリを決定します。

list:categories [i]は、i番目の列で予期されるカテゴリを保持します。渡されたカテゴリは、単一の機能内で文字列と数値を混在させないでください。数値の場合は並べ替える必要があります。

使用されるカテゴリは、categories _属性にあります。

属性:categories_list配列のフィッティング中に決定された各特徴のカテゴリ( Xおよび変換の出力に対応)。これには、ドロップで指定されたカテゴリ(存在する場合)が含まれます。

2
Amiram
from sklearn.preprocessing import OneHotEncoder, LabelEncoder

from sklearn.compose import ColumnTransformer

label_encoder_x_1 = LabelEncoder()
X[: , 2] = label_encoder_x_1.fit_transform(X[:,2])
transformer = ColumnTransformer(
    transformers=[
        ("OneHot",        # Just a name
         OneHotEncoder(), # The transformer class
         [1]              # The column(s) to be applied on.
         )
    ],
    remainder='passthrough' # donot apply anything to the remaining columns
)
X = transformer.fit_transform(X.tolist())
X = X.astype('float64')

魅力のように働く:)

1
Samuel Arthurs

これがUdemyの完全なコードのMLコースの問題であると想定すると、上記のコメントでAntoine Jaussoinが提案したように、ラベルエンコーダ1を列変換器に置き換えました。

カテゴリーデータ

from sklearn.preprocessing import LabelEncoder,OneHotEncoder
from sklearn.compose import ColumnTransformer
ct = ColumnTransformer([("Geography", OneHotEncoder(), [1])], remainder = 'passthrough')
X = ct.fit_transform(X)

あなたの性別列は今インデックス4を持っています

 labelencoder_x_2=LabelEncoder()
 X[:,4]=labelencoder_x_2.fit_transform(X[:,4])

ダミー変数トラップを回避する

 X=X[:, 1:]
1
RaviSole
    from sklearn.preprocessing import OneHotEncoder
    from sklearn.compose import ColumnTransformer
    columnTransformer = ColumnTransformer([('encoder', OneHotEncoder(), [0])],     remainder='passthrough')
    X=np.array(columnTransformer.fit_transform(X),dtype=np.str)

Sklearnライブラリの最新のビルドが削除されたため、onehotencoderクラスのcategorical_featuresパラメータが削除されました。カテゴリカルデータセットにはColumnTransformerクラスを使用することをお勧めします。詳細については、sklearnの公式ドキュメントを参照してください。

1
Vishaal S