ホームページ > バックエンド開発 > Python チュートリアル > scikit-learn デシジョン ツリーからデシジョン ルールを抽出するにはどうすればよいですか?

scikit-learn デシジョン ツリーからデシジョン ルールを抽出するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-10-27 09:14:03
オリジナル
1028 人が閲覧しました

How to Extract Decision Rules from scikit-learn Decision Trees?

scikit-learn デシジョン ツリーからのデシジョン ルールの抽出

問題ステートメント:

トレーニングされたデシジョン ツリー モデルの基礎となるデシジョン ルールをテキスト リストとして抽出できますか?

解決策:

tree_to_code 関数を使用すると、有効な Python 関数を生成できます。 scikit-learn デシジョン ツリーのデシジョン ルールを表します:

<code class="python">from sklearn.tree import _tree

def tree_to_code(tree, feature_names):
    tree_ = tree.tree_
    feature_name = [
        feature_names[i] if i != _tree.TREE_UNDEFINED else "undefined!"
        for i in tree_.feature
    ]
    print("def tree({}):".format(", ".join(feature_names)))

    def recurse(node, depth):
        indent = "  " * depth
        if tree_.feature[node] != _tree.TREE_UNDEFINED:
            name = feature_name[node]
            threshold = tree_.threshold[node]
            print("{}if {} <= {}:".format(indent, name, threshold))
            recurse(tree_.children_left[node], depth + 1)
            print("{}else:  # if {} > {}".format(indent, name, threshold))
            recurse(tree_.children_right[node], depth + 1)
        else:
            print("{}return {}".format(indent, tree_.value[node]))

    recurse(0, 1)</code>
ログイン後にコピー

例:

入力 (0 の間の数値) を返そうとするデシジョン ツリーの場合および 10)、tree_to_code 関数は次の Python 関数を出力します:

<code class="python">def tree(f0):
  if f0 <= 6.0:
    if f0 <= 1.5:
      return [[ 0.]]
    else:  # if f0 > 1.5
      if f0 <= 4.5:
        if f0 <= 3.5:
          return [[ 3.]]
        else:  # if f0 > 3.5
          return [[ 4.]]
      else:  # if f0 > 4.5
        return [[ 5.]]
  else:  # if f0 > 6.0
    if f0 <= 8.5:
      if f0 <= 7.5:
        return [[ 7.]]
      else:  # if f0 > 7.5
        return [[ 8.]]
    else:  # if f0 > 8.5
      return [[ 9.]]</code>
ログイン後にコピー

注意事項:

次の一般的な問題を回避してください:

  • リーフノードを識別するためにtree_.threshold == -2に依存しないでください。代わりに、tree.feature またはtree.children_* を確認してください。
  • 未定義の機能に対応する可能性のある整数を避けて、機能名を正しく指定してください。
  • 再帰関数では 1 つの if ステートメントで十分です。

以上がscikit-learn デシジョン ツリーからデシジョン ルールを抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート