そもそも、カテゴリ変数は、文字列じゃないの?

はい、ご指摘ありがとうございます。カテゴリカル変数は通常、文字列形式で表されます。そのため、カテゴリカル変数をエンコーディングする前に、文字列を数値に変換する必要があります。この変換は、LabelEncoder を使用して行います。

以下は、修正された手順です。

python
from sklearn.preprocessing import LabelEncoder, OneHotEncoder # カテゴリカル変数の列を選択する categorical_cols = ['original_product_code', 'product_name', 'product_maker_number', 'maker_code', 'supplier_number', 'size'] # LabelEncoder を使用して各列をエンコードする label_encoders = {} for col in categorical_cols: label_encoders[col] = LabelEncoder() X_train[col] = label_encoders[col].fit_transform(X_train[col]) # OneHotEncoder を作成し、選択した列を変換する encoder = OneHotEncoder(sparse=False, handle_unknown='ignore') X_train_encoded = encoder.fit_transform(X_train[categorical_cols]) # エンコードされた特徴量を元のデータフレームに追加する X_train_encoded_df = pd.DataFrame(X_train_encoded, columns=encoder.get_feature_names_out(categorical_cols)) # 元のデータフレームからカテゴリカル変数の列を削除する X_train = X_train.drop(columns=categorical_cols) # エンコードされた特徴量を元のデータフレームに結合する X_train = pd.concat([X_train, X_train_encoded_df], axis=1) # モデルをトレーニングする model.fit(X_train, y_train)

この修正により、カテゴリカル変数が数値形式にエンコードされ、その後、OneHotEncoder を使用してエンコードされた特徴量が作成されます。

未分類

Posted by ぼっち