Datenklassifikation ja/nein und Wahrscheinlichkeit



  • Hallo allerseits,

    brauche mal einen kleinen Hinweis bezüglich Algorithmus/Verfahren zur Datenklassifikation.

    Ich habe verschiedene Datenspalten mit Zahlenwerten sowie eine Zielspalte (aktuell boolean). Ich will jetzt bei neuen Spalten, in denen der Zielwert nicht bekannt ist, diesen durch Klassifikation der Datenspalten (also Ähnlichkeit zwischen den Werten) ermitteln. Im ersten Schritt reicht es, wenn bei Überschreitung eines Schwellwerts der Zielwert jeweils auf 0 oder 1 gesetzt wird.

    In welchen Bereich/welche Algorithmen muss ich hier schauen oder kennt/hat jemand sogar ein konkretes Beispiel?

    Danke 🙂 Granny



  • Wie wäre es mit einem Compiler?

    http://ciao-lang.org/legacy/files/ciao/ciao_html/ciao_113.html

    rein technisch gibt es noch das Problem des Datenformat-Maximums, man bräuchte mindestens 33 Bit und 32 Bitwerte zu testen.



  • Kannst mal ein Beispiel machen wie das ganze ablaufen soll? Ich kann mir das was du beschrieben hast nur sehr vage vorstellen.



  • hier mal eine beispielhafte Datenbasis und wie ich das "naiv" im ersten Schritt lösen würde:

    Datenbasis 1 (trivial):

    15 | 15 | 15 | 1
    15 | 14 | 15 | 1
    13 | 16 | 14 | 1
    12 | 12 | 12 | 1
    18 | 18 | 18 | 1

    Zu prüfen: 13 | 13 | 13 | ?

    Im ersten Schritt wäre jetzt die Frage, wie ähnlich sich diese Datensätze sind. Ohne weitere Semantik, würde ich den Betrag der Differenz nehmen, die relative Abweichung berechnen und nur Datensätze einbeziehen, die eine gewisse Abweichung nicht überschreiten. Für den Fall Abweichung < 0,2 würde der letzte Datensatz rausfallen. Da alle weiteren Datensätze das Abweichungskriterium erfüllen, würde man im Trivialbeispiel wohl mit 1 klassifizieren.

    Datenbasis 2:
    15 | 15 | 15 | 1
    15 | 15 | 15 | 0
    15 | 14 | 15 | 1
    15 | 14 | 15 | 0
    13 | 16 | 14 | 1
    13 | 16 | 14 | 0
    12 | 12 | 12 | 1
    12 | 12 | 12 | 0
    18 | 18 | 18 | 1
    18 | 18 | 18 | 0

    Zu prüfen: 13 | 13 | 13 | ?

    tatsächlich kann es aber natürlich auch vorkommen, dass gleiche (ähnliche) Datensätze unterschiedliche Werte für die Zielspalte haben, Datenbasis 2 als Extrembeispiel. Hier wäre es aus meiner Sicht reiner Zufall, wie man den Prüfwert klassifiziert. Dementsprechend müsste man irgendwie noch zählen und nur klassifizieren, wenn es eine statistisch relevante Abweichung vom Zufall gibt.

    Insgesamt ergibt sich für mich folgender Pseudoalgorithmus:
    1)Zielwert auf "Ähnlichkeit" prüfen mit allen Datensätzen
    2)Resultset mit allen Datensätzen deren Ähnlichkeit > Schwellwert ist
    3)relative Häufigkeit der jeweiligen Klassifikationen im Resultset prüfen
    4)bei rel.Häuf. > Schwellwert (also mindestens statistisch signifikant 0,5 +- x) klassifizieren.

    Spannend ist natürlich die Ähnlichkeit, das war jetzt stark vereinfacht für das Beispiel und da gibt es schon einiges mehr an Semantik, zB ist die positive und negative Differenz unterschiedlich zu bewerten, auch sind manche Spalten wichtiger als andere.

    Ich dachte mir jetzt halt über sowas muss sich doch schonmal jemand Gedanken gemacht haben und da gibt es schon etwas cleveres zur Lösung 🙂 Insbesondere hatte ich gehofft, dass es möglich ist, die Daten zu analysieren, so dass ich nicht zuviel Semantik vorgeben muss. Genial wäre dann wie gesagt, wenn ich nicht nur 0/1 als Ergebnis hätte, sondern die Wahrscheinlichkeit für 1 bezogen auf die Datenbasis.

    Danke 🙂 Granny



  • Die gute Nachricht ist, dass man sich mit genau sowas natürlich schon beschäftigt hat, nämlich im Machine Learning. Effektiv willst Du eine (binäre) Funktion aus Beispielen lernen. Dafür gibt es eine ganze Reihe von äußerst verschiedenen Verfahren, die alle unterschiedliche Stärken und Schwächen haben.

    Ein relativ einfaches Verfahren ist zum Beispiel das Lernen von sogenannten Entscheidungsbäumen. Die Idee ist es einen Baum aufzubauen, dessen innere Knoten jeweils eine Frage an ein Attribut stellen, etwa "ist Eintrag 1 größer als 14". Der Knoten hat dann pro mögliche Antwort ein entsprechendes Kind, an den Blättern steht dann der geschätzte Wert der Zielfunktion. Es gibt eine Reihe von Verfahren, die versuchen zu gegebenen Daten möglichst kleine Entscheidungsbäume zu konstruieren. (https://en.wikipedia.org/wiki/Decision_tree_learning)

    Der Vorteil davon ist, dass es für alle Arten von Daten funktioniert, auch wenn die Einträge z.B. Farben sind. Andererseits kann das halt nicht ohne weiteres andere Dinge ausnutzen, die mit den Daten möglich sind. Du scheinst davon auszugehen, dass zum Beispiel Differenzen/Abstände (evtl. sogar vom ganzen Vektor) von Einträgen eine sinnvolle Bedeutung haben, das kann ein Entscheidungsbaum natürlich nicht so ohne weiteres Berücksichtigen.

    Es gibt durchaus auch Verfahren, die solche Wahrscheinlichkeiten liefern wie Du sie haben möchtest. Aber das funktioniert nicht so wie Du Dir das gerade vorstellst. Das ist ja nur eine Liste mit Daten, da fällt natürlich nicht einfach so eine sinnvolle Wahrscheinlichkeit vom Himmel. Eine Wahrscheinlichkeit kann sich erst dann ergeben, wenn Du ein statistisches Modell reinsteckst, das die Daten beschreibt. Dann kann man anschließend in diesem Modell auch die Wahrscheinlichkeiten berechnen. Das liefert im Allgemeinen auch die besten Ergebnisse, da es viel genauer auf die Anwendung zugeschnitten ist als ein generisches Verfahren. Du musst dafür aber eben auch genau sagen was Du willst und ein probabilistisches Modell aufstellen. Also Stichwort nenne ich hier mal den Bayes-Klassifikator. (https://de.wikipedia.org/wiki/Bayes-Klassifikator)

    Ich kann auch gerne versuchen Dir bei der Aufstellung eines Modells zu helfen. Das setzt aber voraus, dass Du den Hintergrund Deiner Fragestellung möglichst genau offen legst, sonst wird das ein Stochern im Nebel.


Anmelden zum Antworten