scikit-learn モジュールを使用して決定木分類器のモデルを適合させようとしています。5 つの機能があり、そのうちの 1 つは数値ではなくカテゴリです
from sklearn.tree import DecisionTreeClassifier
from sklearn.preprocessing import LabelEncoder
df = pd.read_csv()
labelEncoders = {}
for column in df.dtypes[df.dtypes == 'object'].index:
labelEncoders[column] = LabelEncoder()
df[column] = labelEncoders[column].fit_transform(df[column])
print(labelEncoders[column].inverse_transform([0, 1, 2])) #['High', 'Low', 'Normal']
私は ML を初めて使用し、データ フレームをモデルに供給する前にカテゴリ特徴をエンコードする必要があること、およびラベル エンコーディングやワン ホット エンコーディングなどのエンコーディング バリアントがどのように存在するかについて読んでいます。
現在、ほとんどの文献によると、特徴の値を自然に並べ替えることができる場合、たとえば'Low'、'Normal'、'High' のように、ラベル エンコーディングを使用する必要があります。それ以外の場合は、 'Brazil'、'Congo'、'Czech Republic'など、意味的に意味のあるものがない場合に、モデルが値の間に誤解を招くような順序関係を確立しないように、1 つのホット エンコーディングを使用する必要があります。
つまり、コーディング戦略を選択する背後にあるロジックについて私が考えているところです。
scikit-learn でLabelEncoder
値の自然な順序を維持するにはどうすればよいですか。次のようにエンコードするにはどうすればよいですか。
Low -> 0
Normal -> 1
High -> 2
現在のやり方ではありません:
High -> 0
Low -> 1
Normal -> 2
これはまったくできますか?それは実際にエンコーダーの仕事ですか?エンコーディングの前に別の場所で行う必要がありますか?
ありがとう