私は sklearn のデシジョン ツリーを使用して、長い if-elif-else チェーンとしてのビジネス ルールの乱雑で管理不可能な実装を置き換えています。すべてのラベルに対して数千のテスト ケースを使用してツリーを検証しますが、トレーニング データとして使用しているルールを含むテーブルにエラーがあり、一部のテストがランダムに失敗することがあります。
結果のテスト ケースを超えて、ツリーを検証する方法が必要です。すべての葉ノードのジニが 0.0 である場合、異なるランダム シードで生成されたツリー間で分類にランダムな変動がないと仮定するのは正しいですか? アプリケーションでそれを強制する必要がある場合、トレーニング データを更新するときにそれを確認するのは合理的ですか?
私のケースは典型的な分類問題ではないことに注意してください。なぜなら、私はすでに決定木をコードに実装しており、アルゴリズムを使用して、現実世界のデータ サンプルではなく、慎重に調整されたデータから同等のツリーを生成したいからです。私の場合、ビジネス ルールを使用してデータ セットを維持する方が、コードを維持するよりも簡単です。
そのため、私のデータ セットでは、機能が可能な値の範囲をすべてカバーし、そのための明確なラベルを 1 つ付けることが理想的です。たとえば、実際のトレーニング セットは次のようになります。
features = [[1], [1.1], [2], [2.3]]
labels = ['sativa', 'sativa', 'indica', 'indica']
そして、アルゴリズムは次のような tree1 でランダムに発生する可能性があります。
if feature < 1.75:
return 'sativa'
else:
return 'indica'
そして次のようなtree2:
if feature < 1.55:
return 'sativa'
else:
return 'indica'
ただし、私のトレーニング セットには、ランダム性が発生するギャップはありません。次のようになります。
features = [[1], [1.9], [2], [2.3]]
labels = ['sativa', 'sativa', 'indica', 'indica']
したがって、最初のランダムな状態に関係なく、ツリーは常に次のようになります (明らかに、0.1 未満の差は無視されます)。
if feature < 1.95:
return 'sativa'
else:
return 'indica'
私の問題は、トレーニング セットにエラーがあり、ランダムな変動が発生する可能性のある値のギャップがあるかどうか、または同じ機能セットが異なるラベルに割り当てられているかどうかを検証する必要があることです。ランダムな状態を修正してもその問題は解決しません。同じデータが常に同じツリーを生成することを保証するだけです。
では、ツリーを生成する前にこれらの問題についてデータを検証するか、ランダムな変動を除外するのに十分な回数の包括的なテストを実行する以外に、ツリーでこれが発生するかどうかを判断する方法はありますか?