0

だからのように私のコードは次のとおりです。新しいラベルにscikit LabelEncoderを使用するにはどうすればよいですか?

>>> le = preprocessing.LabelEncoder() 
>>> le.fit(train["capital city"]) 
LabelEncoder() 
>>> list(le.classes_) 
['amsterdam', 'paris', 'tokyo'] 
>>> le.transform(["tokyo", "tokyo", "paris"]) 
array([2, 2, 1]) 
>>> list(le.inverse_transform([2, 2, 1])) 
['tokyo', 'tokyo', 'paris'] 

しかし、私のテストデータセットであれば、私は「北京」ではなく「北京は」トレーニングセットに存在しないようなものを持っているもの?エンコーダが地球上のすべての首都に追加することなくこれを処理する方法はありますか?

答えて

0

合計df['capital city']のリストをLabelEncoder.fit()に渡す前に、データフレームdfをtrainとtestに分割することができます。例えば

dfはこのようであれば:

df['capital city'] = ['amsterdam', 'paris', 'tokyo', 'beijing', 'tokyo', 'newyork', 'paris'] 

次に、あなたが使用することができます。

le = preprocessing.LabelEncoder(); 
le.fit(df['capital city']) 

le.classes_ 
Output: ['amsterdam', 'beijing', 'newyork', 'paris', 'tokyo'] 

その後正しく整数に変換するために電車やテストデータにtransform()を使用しています。

train["capital city integers"] = le.transform(train["capital city"]) 
test["capital city integers"] = le.transform(test["capital city"]) 

希望します。

: は、上記のsiggestionはあなたのために働く、あなたが学んでいる時に完全に受け入れているが、実際の作業のためにこれを採用した場合、あなたは現実の世界のシナリオについて検討すべきであろうが。現実世界では利用可能なデータはすべて訓練データであるため(首都を使用してコード化するため)、これまでになかった首都の価値を含む新しいデータが来ることがあります。その場合、あなたは何をしたいですか?

+0

ええと「の値の前に見たことがないとsklearn.LabelEncoder」からソリューションを試すことができます。私は現実の世界でこれを使用しています。あなたの提案はスケーラブルではないと思います。私はこの[PR](https://github.com/scikit-learn/scikit-learn/pull/9151)がマージされることを望んでいます。さもなければ、私は新しいカテゴリ的な情報をどのように扱うかについて私自身の方法を実装しようとします。 – Flair

+0

@Flair。はい、それは私が尋ねたものです。現実世界では、あなたのデータを1つに訓練し、見えないデータが予測時間に来ると、それは良い結果を得られない可能性があるため、完全に失敗する可能性があります。 –

関連する問題