web-dev-qa-db-ja.com

sklearnランダムフォレストはカテゴリフィーチャを直接処理できますか?

値をとるカテゴリ機能である色があるとします

[「赤」、「青」、「緑」、「オレンジ」]、

ランダムフォレスト内の何かを予測するために使用したいです。ワンホットエンコード(つまり、4つのダミー変数に変更する)する場合、4つのダミー変数が実際に1つの変数であることをsklearnに伝えるにはどうすればよいですか?具体的には、sklearnが異なるノードで使用する機能をランダムに選択する場合、赤、青、緑、オレンジのダミーを一緒に含めるか、それらを含めないようにする必要があります。

これを行う方法はないと聞いたことがありますが、数字などのように任意にコード化せずにカテゴリ変数を処理する方法があるはずだと思います。

44
hahdawg

いいえ、ありません。誰かの これに取り組んでいます とパッチはいつかメインラインにマージされるかもしれませんが、現在はダミー(ワンホット)エンコーディングを除いてscikit-learnのカテゴリ変数のサポートはありません。

29
Fred Foo

カテゴリ入力を受け入れるランダムフォレスト(および他の多くの機械学習アルゴリズム)のほとんどの実装は、カテゴリ機能のエンコードを自動化するか、 多数のカテゴリに対して計算上扱いにくい になるメソッドを使用するかのいずれかです。

注目すべき例外はH2Oです 。 H2Oには、カテゴリデータを直接処理するための非常に 効率的な方法 があり、ワンホットエンコードを必要とするツリーベースのメソッドにEdgeを与えることがよくあります。

Will McGinnisによるこの記事では、ワンホットエンコーディングと代替案について非常に良い議論があります

Nick DingwallとChris Pottsによるこの記事では、カテゴリ変数とツリーベースの学習者について非常に良い議論があります

11
denson

カテゴリ変数を一連のダミー変数にする必要があります。はい、私はその迷惑を知っており、不必要に思えますが、それがsklearnの仕組みです。パンダを使用している場合。 pd.get_dummiesを使用すると、非常にうまく機能します。

9