ランダムフォレスト分類にカテゴリデータタイプを適合させるにはどうすればよいですか?


11

ランダムフォレストアルゴリズムを適用して、トレーニングデータセットの精度を見つける必要があります。しかし、私のデータセットのタイプは、カテゴリーと数値の両方です。これらのデータをフィッティングしようとすると、エラーが発生します。

'入力にNaN、無限大、またはdtype(' float32 ')には大きすぎる値が含まれています。

問題はオブジェクトのデータ型です。RFを適用するために変換せずにカテゴリデータを適合させるにはどうすればよいですか?

これが私のコードです。

スクリーンショット

スクリーンショット

スクリーンショット


他の方法のように距離を測定しないため、ツリーモデルを使用している場合は、one_hotを実行する必要はありません。
Jun Yang

1
@ JunYang、scikit-learnは現在、カテゴリをエンコードする必要があります。
Ben Reiniger

回答:


11

カテゴリー特徴を数値属性に変換する必要があります。一般的なアプローチは、ワンホットエンコーディングを使用することですが、それが間違いなく唯一のオプションではありません。カテゴリレベルの数が多い変数がある場合は、レベルを組み合わせるか、ハッシュトリックを使用することを検討する必要があります。Sklearnには、いくつかのアプローチが用意されています(「関連項目」セクションを参照してください):1つのホットエンコーダーハッシュトリック

sklearnにコミットしていない場合、h2oランダムフォレストの実装は、カテゴリ機能を直接処理します。


0

私の知る限り、このタイプのエラーを取得するにはいくつかの問題があります。1つ目は、データセットに余分なスペースが存在するため、エラーが表示される理由です。次に、Pythonはどのタイプのオブジェクト値でも機能しません。このオブジェクトの値を数値に変換する必要があります。オブジェクトを数値に変換するには、ラベルエンコーダーと1つのホットエンコーダーの2種類のエンコーディングプロセスがあります。ラベルエンコーダーが0からn_classes-1までのオブジェクト値をエンコードし、1つのホットエンコーダーが0から1までの値をエンコードします。私の作業では、あらゆる種類の分類方法にデータを適合させる前に、値を変換するためにラベルエンコーダーを使用し、変換する前に、データセットに空白スペースがありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.