2

私は訓練データとテストデータを持つ2つの異なるcsvを持っています。これらの train_features_df と test_features_df から 2 つの異なるデータフレームを作成しました。テスト データとトレーニング データには複数のカテゴリ列があるため、データセットに適しているので、それらに labelEncoder を適用する必要があることに注意してください。そのため、トレーニング データとテスト データに個別にラベル エンコーダーを適用しました。トレーニングとテスト データセットの新しいエンコードされた値を出力すると、同じ機能の同じカテゴリ値に対して、新しいエンコードされたデータからの出力が異なることがわかります。つまり、トレーニング データとテスト データをマージする必要があります。次に、ラベルのエンコーディングを適用してから、それらを再び分離しますか?

 from sklearn.preprocessing import LabelEncoder
 target=train_features_df['y']
 train_features_df=train_features_df.drop(['y'], axis=1)
 train_features_df.head()
 y = target.values
 print("printing feature column of train datasets: \n")
 print(train_features_df.values)
 le=LabelEncoder()
 X_train_label_encoded=train_features_df.apply(le.fit_transform)
 print("\n printing feature column of train datasets after label encoder: \n")
 print(X_train_label_encoded.head())

 print("printing test feature datasets: \n")
 print(test_features_df)
 X_test_label_encoded=test_features_df.apply(le.fit_transform)
 print("printing test feature encoded  datasets: \n")
 print(X_test_label_encoded)

上記の出力は以下のとおりです:-

printing feature column of train datasets: 

[['k' 'v' 'at' ... 0 0 0]
 ['k' 't' 'av' ... 0 0 0]
 ['az' 'w' 'n' ... 0 0 0]

    X0  X1  X2  X3  X4  X5  X6  X8  X10  X12  ...  X375  X376  X377  X378  \
 0  32  23  17   0   3  24   9  14    0    0  ...     0     0     1     0   
 1  32  21  19   4   3  28  11  14    0    0  ...     1     0     0     0   
 2  20  24  34   2   3  27   9  23    0    0  ...     0     0     0     0

 printing test feature datasets: 

       X0  X1  X2 X3 X4  X5 X6 X8  X10  X12  ...  X375  X376  X377  X378  X379  \
 0     az   v   n  f  d   t  a  w    0    0  ...     0     0     0     1     0   
 1      t   b  ai  a  d   b  g  y    0    0  ...     0     0     1     0     0   
 2     az   v  as  f  d   a  j  j    0    0  ...     0     0     0     1     0

       X0  X1  X2  X3  X4  X5  X6  X8  X10  X12  ...  X375  X376  X377  X378  \
 0     21  23  34   5   3  26   0  22    0    0  ...     0     0     0     1   
 1     42   3   8   0   3   9   6  24    0    0  ...     0     0     1     0   
 2     21  23  17   5   3   0   9   9    0    0  ...     0     0     0     1   
 3     21  13  34   5   3  31  11  13    0    0  ...     0     0     0     1   
 4     45  20  17   2   3  30   8  12    0    0  ...     1     0     0     0

最初の列の値をエンコードした後のトレーニングデータフレームazで最初の列の値が値20に変換されたのに対し、最初の列の値をレベルエンコードした後のテストデータフレームでaz値21に変換されたことがわかります.

4

1 に答える 1

3

トレーニング セットとテスト セットに現れる一意の値が異なる可能性があります。その場合、エンコーディングも異なります。

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
le.fit_transform([1,2,3,4,5])
# array([0, 1, 2, 3, 4], dtype=int64)
le.fit_transform([2,3,4,5])
# array([0, 1, 2, 3], dtype=int64)

同じエンコーディングを取得するには、トレーニングデータに適合し、次にtransformテストデータに適合する必要があります。

l_train = [1,2,3,4,5]
le.fit(l_train)
le.transform(l_train)
# array([0, 1, 2, 3, 4], dtype=int64)
le.transform([2,3,4,5])
#array([1, 2, 3, 4], dtype=int64)

ただし、カテゴリ機能にラベル エンコーダーを使用しないでください。カテゴリ機能については、LabelEncoder を参照してください。理由の説明のために。LabelEncoderラベルにのみ使用してください。OneHotEncoderたとえば、あなたは見ているは​​ずです。

于 2020-07-31T11:10:07.320 に答える