スパイダー(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'
したがって、コードに基づいて、次のことを行う必要があります。
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番目の列は男性/女性のバイナリ選択です)
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および変換の出力に対応)。これには、ドロップで指定されたカテゴリ(存在する場合)が含まれます。
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')
魅力のように働く:)
これが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:]
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の公式ドキュメントを参照してください。