Heim  >  Artikel  >  Backend-Entwicklung  >  Wie extrahiere ich Entscheidungsregeln aus Scikit-Learn-Entscheidungsbäumen?

Wie extrahiere ich Entscheidungsregeln aus Scikit-Learn-Entscheidungsbäumen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-27 09:14:03870Durchsuche

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

Entscheidungsregelextraktion aus Scikit-Learn-Entscheidungsbäumen

Problemstellung:

Kann das Sollen Entscheidungsregeln, die einem trainierten Entscheidungsbaummodell zugrunde liegen, als Textliste extrahiert werden?

Lösung:

Mit der Funktion „tree_to_code“ ist es möglich, eine gültige Python-Funktion zu generieren stellt die Entscheidungsregeln eines Scikit-Learn-Entscheidungsbaums dar:

<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>

Beispiel:

Für einen Entscheidungsbaum, der versucht, seine Eingabe zurückzugeben (eine Zahl zwischen 0 und 10) würde die Funktion „tree_to_code“ die folgende Python-Funktion ausgeben:

<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>

Vorbehalte:

Vermeiden Sie die folgenden häufigen Probleme:

  • Verlassen Sie sich nicht auf tree_.threshold == -2, um Blattknoten zu identifizieren; Prüfen Sie stattdessen „tree.feature“ oder „tree.children_*“.
  • Geben Sie Feature-Namen korrekt an und vermeiden Sie Ganzzahlen, die undefinierten Features entsprechen könnten.
  • Einzelne if-Anweisungen reichen in der rekursiven Funktion aus.

Das obige ist der detaillierte Inhalt vonWie extrahiere ich Entscheidungsregeln aus Scikit-Learn-Entscheidungsbäumen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn