2016-08-03 7 views
3

私はパンダの列にscit-learn LabelEncoderをフィッティングしていますdfLabelEncoderパンダスのためのフィット順

遭遇した文字列が整数にマップされる順序はどのように決定されますか?それは決定論的ですか?

さらに重要なことに、この注文を指定することはできますか?

import pandas as pd 
from sklearn import preprocessing 

df = pd.DataFrame(data=["first", "second", "third", "fourth"], columns=['x']) 
le = preprocessing.LabelEncoder() 
le.fit(df['x']) 
print list(le.classes_) 
### this prints ['first', 'fourth', 'second', 'third'] 
encoded = le.transform(["first", "second", "third", "fourth"]) 
print encoded 
### this prints [0 2 3 1] 

私は、これは文字列が列に表示される順序であるため、le.classes_[0 1 2 3]、であることを["first", "second", "third", "fourth"]、その後encodedことを期待します。これはできますか?

+0

私はLabelEncoderを使って文字列を整数ラベルにエンコードしています。数字ラベルを表示するには、記述したように特定の順序が必要です。どのようにそれを行うかを理解する?私はおそらく自分自身を書く必要があります。 –

+1

あなたが言ったようにカスタムソリューションをロールしたり、Scickit-learnバージョンを修正したり、Mephyの答えに記載されているソート順に頼ってください。それは私のように見えます。 – tkja

+1

ええええええええええええええええええええええええええええええええ、それはとにかくかなり速いです。ありがとう –

答えて

1

ソート順で行われます。文字列の場合、アルファベット順に行われます。そこには、このドキュメントはませんが、LabelEncoder.transformのソースコードを見て、私たちは仕事のほとんどは次のドキュメントで、機能numpy.setdiff1dに委任されて見ることができます。

2つの配列の差集合を検索します。

ソートを返します。これは、ar1にar2以外の値があります。

(強調鉱山)。

これは文書化されていないため、おそらく実装定義であり、バージョン間で変更できます。私がソート順を使用していたバージョンだけがscikit-learnの他のバージョンでこの動作を変更する可能性があります(numpy.setdiff1dを使用しない)。

+0

少なくとも現在のバージョンでは、それがどのように行われているかがはっきりしており、それは確定的に動作します。 – tkja

+0

@tkjaしかし、私はむしろこれに頼ることはありません。アプリケーションにとって重要な場合は、エンコーディングを自分で実装することもできます。あなたがそれに頼り、それが変わると、バグを追跡するのが非常に難しくなります。 – Mephy

関連する問題