ホームページ  >  記事  >  バックエンド開発  >  Scikit-Learn デシジョン ツリーからデシジョン ルールを抽出するにはどうすればよいですか?

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

DDD
DDDオリジナル
2024-10-28 02:26:02887ブラウズ

How to Extract Decision Rules from a Scikit-Learn Decision Tree?

Scikit-Learn デシジョン ツリーからのデシジョン ルールの抽出

広く使用されている機械学習アルゴリズムであるデシジョン ツリーは、意思決定をモデル化することで洞察を提供しますプロセスはルールの階層構造として扱われます。ただし、これらの決定ルールを明示的に抽出するのは困難な場合があります。この記事では、トレーニングされた Scikit-Learn デシジョン ツリーからテキストのデシジョン ルールを抽出するための包括的なアプローチについて概説します。

デシジョン ルール抽出用の Python コード

次の Python コード スニペットは、 Scikit-Learn デシジョン ツリーの基礎となるデータ構造をトラバースして、人間が判読できるデシジョン パスを生成します:

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)

有効な Python 関数の作成

このコードは、ツリーを再帰的に実行し、各条件付き分割としきい値を出力します。結果は、トレーニングされたデシジョン ツリーの意思決定プロセスを効果的にエミュレートする有効な Python 関数です。

出力例

たとえば、次のようなツリーを考えてみます。入力である 0 から 10 までの数値を返します。生成された 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.]]

利点と注意

このメソッドは、明確な機能と注意点を提供します。ツリーの決定ルールのテスト可能な表現。ただし、コードではツリー内の各ノードが二分決定ノードであると想定していることに注意してください。デシジョン ツリーに非バイナリ デシジョン ノードが含まれている場合は、それに応じてコードを調整する必要があります。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。