2017-02-21 11 views
1

タイトルが完全であるかどうかはわかりません。 私はMachine Learningを初めて使い、Scikitと意思決定ツリーを使用しています。Python - 意思決定ツリーとユニークなラベル/機能の処理

ここで私がしたいことがあります。私はすべての入力を受け取り、クライアントIDである一意の機能を含める必要があります。現在、クライアントIDは一意であり、決定木の分析で機能が通常の方法で集計することはできません。ここで起こっていることは、ツリーがクライアントIDを他の整数値として取得していることです。たとえば、クライアントIDが430未満のものは、430以上のものとは別のパスに入ります。これは正しくなく、私が望むものではありませんする。私がしたいことは、特定のフィールドをこのような方法で分析することができず、各クライアントが独自の支店を持つことを意思決定ツリーに理解させることです。これは決定木で可能ですか?

私はいくつかの回避策を用意していますが、そのうちの1つはクライアントごとに固有の決定木を作成することですが、これを訓練するのは悪夢です。もう1つの回避策を講じて、800人のクライアントがいるとしたら、ビットフィールドを持つ800個の機能を作成しますが、これも狂っています。

+0

はい、2番目のオプション(1つのホットエンコーディング)はあなたの説明のために私が提案するものです –

+0

これは非常に多くの作業のようですが、何千ものクライアントに展開する必要がある場合は、方法? – HMan06

+0

私はパンダを使用しているので、get_dummies関数はおそらく私の最善の策でしょうか? – HMan06

答えて

3

これは、機械学習ではかなり一般的な問題です。いずれの場合も、機械学習機能は各インスタンスに固有のものであってはなりません。直感的には理にかなっています。アルゴリズムはを学ぶことはできませんが、その機能から外挿することはできません。

あなたができることは、残りの機能をパスする前に決定木からその情報を分けて、IDと予測が再作成された後に再マージすることです。

IDをどのような形式でも含めるために、どのような種類の操作を行うことを強くお勧めします。機能は、アルゴリズムが決定を下すために使用することになっているものであると考えられています。あなたが使用したくない情報を与えないでください。 IDを機能として使用しないようにしたいのは、あなたが予測しようとしているものに(ほとんどの場合)IDが関係していないからです。

個々のモデルが必要な場合(また、各ユーザーに十分なデータがあれば)、それはあなたが思っているほど大きな痛みではありません。 Scikitのmodel saving featureとこの回答をsaving pickles to MySQLで使用すると、パーソナライズされたモデルを簡単に作成して保存できます。ユーザー数が非常に多い場合を除き、パーソナライズされたデシジョンツリーを作成するのにはあまり時間がかかりません。

+0

さて、ここには事があります。これは明らかに教師あり学習に基づいていますが、可能ですが、どのクライアントがどのように若干異なる結果を出す可能性があるかはわかりません。ワンホットエンコーディングのようなものを使用してクライアントに悪い結果をもたらす場合、私はテストする必要があります。しかし、あなたの上記のコメントに基づいて、私はこれを逆にして行い、私は熱く使っていません。私は精度を測るためにいくつかのテストを行い、うまくいかない場合は他のオプションを調べます。 – HMan06

+0

ワンホットエンコーディングは素晴らしいアイデアですが、ユーザーIDはほとんどどんな容量のカテゴリカルな機能でもめったにありません。私が2週間前(または後)にStackOverflowにサインアップした場合、それはユーザーとしての私たちの予測についての洞察を提供してくれるでしょうか?答えはほとんど常に「いいえ」です。 – ahjohnston25

+0

、ありがとう! – HMan06

関連する問題