2016-08-04 7 views
1

で2.0カテゴリ特長。一部のフィーチャセットは、数千のユニークな値を含む大きなものです。私はJavaでパイプラインとデータフレームの新しいイディオムを使用しようとしています。私は、各カテゴリのフィーチャ列に対して、いくつかのStringIndexerパイプラインステージを持つパイプラインを構築しました。次に、VectorAssemblerを使用してフィーチャベクタを作成します。結果のデータフレームは、VectorAssemblerステージの後に私にとって完璧に見えます。私はノーマライザーを使用してこの問題を解決することができますスパークMLLib私は、ログファイルに基づいて決定木を構築しようとしているパイプライン

DecisionTree requires maxBins (= 32) to be at least as large as the number of values in each categorical feature, but categorical feature 5 has 49 values. Considering remove this and other categorical features with a large number of values, or add more training examples.

、:私のパイプラインは約

よう

StringIndexer-> StringIndexer-> StringIndexer-> VectorAssembler-> DecisionTreeClassifier

しかし、私は次のエラーを取得するに見えますオリジナルのフィーチャ値を持つDSLデシジョンツリーを生成する必要があるため、結果のデシジョンツリーは私のニーズには使用できません。パイプライン全体が一緒に実行されるため、maxBinsを手動で設定することはできません。結果の決定木にStringIndexerの値を生成させたいと思います(例:Feature 5 < = 132)。さらに重要ではありませんが、フィーチャーに自分の名前を指定することができます(たとえば、 'Feature 5'ではなく 'domain'の代わりに)

答えて

0

DecisionTreeアルゴリズムは、取るべき分割の数。デフォルト値は(= 32)です。 maxBinsは、カテゴリフィーチャのカテゴリの最大数以上にする必要があります。あなたの機能5には49の異なる値があるので、maxBinsを49以上に増やす必要があります。

DecisionTreeアルゴリズムは、いくつかのハイパーを持ち、自分のデータにそれらをチューニング精度を向上させることができます。自動的にハイパーパラメータのグリッドをテストし、最良のものを選択するSparkのクロスバリデーションフレームワークを使用して、この調整を行うことができます。 Pythonのテストで3 maxBins [49、52、55]

dt = DecisionTreeClassifier(maxDepth=2, labelCol="indexed") 
paramGrid = ParamGridBuilder().addGrid(dt.maxBins, [49, 52, 55]).addGrid(dt.maxDepth, [4, 6, 8]).addGrid(rf.impurity, ["entropy", "gini"]).build() 
pipeline = Pipeline(stages=[labelIndexer, typeIndexer, assembler, dt]) 
+0

は、私は二つのことを必要と判明ここ

は例です:カテゴリの最大数のカウントよりも大きい値に設定さMaxCategoriesとVectorIndexerをフィーチャ、およびDecisionTreeClassifierのmaxBinsを、最大数のカテゴリフィーチャの数よりも大きな値に設定します。すべての私の機能は、私が最初に警告生成MAX_INT、指定したカテゴリですので、「DecisionTreeMetadata:DecisionTree削減maxBinsを...」。両方の値をDataFrameのサンプル数に設定するだけで十分です。 – Mike

+0

限り、あなたの機能は、すべてのカテゴリいる、あなたはVectorIndexerと安全ですが、あなたのトレーニングは機能を継続している場合は注意してください。 VectorIndexerは、連続とカテゴリ間の選択をmaxCategoriesパラメータに基づいて行います。それは、連続的な機能をカテゴリに変えることができます。この回答または他の誰かがあなたの問題を解決した場合は、それを合格とマークしてください。ありがとう – igorsf

+0

フォローアップありがとう。 VectorIndexerは実際には間違いでした。パイプラインは.setMaxBinsコールとベクトルアセンブラ、そして最後にDecisionTreeClassifier続く文字列インデクサーのシリーズで構成されています。あなたが正しく指摘したように、私たちがミックスの中で連続した特徴を持っていれば、私たちは困っています。どのように他の人がこれを処理するのだろうか?多数の値を持つカテゴリ化されたフィーチャと、フィーチャ値の数が比較的少ない連続フィーチャを持つことは簡単に考えられます。 – Mike

関連する問題