Heim  >  Artikel  >  Backend-Entwicklung  >  Wie extrahiere ich Entscheidungsregeln aus einem Scikit-Learn-Entscheidungsbaum?

Wie extrahiere ich Entscheidungsregeln aus einem Scikit-Learn-Entscheidungsbaum?

DDD
DDDOriginal
2024-10-28 02:26:02887Durchsuche

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

Entscheidungsregeln aus dem Scikit-Learn-Entscheidungsbaum extrahieren

Entscheidungsbäume, ein weit verbreiteter Algorithmus für maschinelles Lernen, liefern Erkenntnisse durch Modellierung der Entscheidungsfindung Prozesse als hierarchische Struktur von Regeln. Das explizite Extrahieren dieser Entscheidungsregeln kann jedoch eine Herausforderung sein. Dieser Artikel beschreibt einen umfassenden Ansatz zum Extrahieren textueller Entscheidungsregeln aus einem trainierten Scikit-Learn-Entscheidungsbaum.

Python-Code für die Extraktion von Entscheidungsregeln

Das folgende Python-Code-Snippet verwendet die zugrunde liegenden Datenstrukturen von Scikit-Learn-Entscheidungsbäumen, um menschenlesbare Entscheidungspfade zu durchlaufen und zu generieren:

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)

Erstellen einer gültigen Python-Funktion

Dieser Code durchläuft die Baum rekursiv und druckt jede bedingte Aufteilung und jeden Schwellenwert aus. Das Ergebnis ist eine gültige Python-Funktion, die den Entscheidungsprozess des trainierten Entscheidungsbaums effektiv emuliert.

Beispielausgabe

Stellen Sie sich zum Beispiel einen Baum vor, der dies versucht gibt seine Eingabe zurück, eine Zahl zwischen 0 und 10. Die generierte Python-Funktion würde so aussehen:

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

Vorteile und Vorsichtshinweise

Diese Methode bietet eine klare und testbare Darstellung der Entscheidungsregeln des Baums. Beachten Sie jedoch, dass der Code davon ausgeht, dass jeder Knoten im Baum ein binärer Entscheidungsknoten ist. Wenn Ihr Entscheidungsbaum nicht-binäre Entscheidungsknoten enthält, müssen Sie den Code entsprechend anpassen.

Das obige ist der detaillierte Inhalt vonWie extrahiere ich Entscheidungsregeln aus einem Scikit-Learn-Entscheidungsbaum?. 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