2017-05-15 2 views
-1

Ich habe ein Ähnlichkeitsproblem hier. Ich möchte den Verkehr einer neuen Regel anhand von historischen Daten vorhersagen (Der Verkehr von Regeln, die in der Vergangenheit implementiert wurden). Traffic bedeutet hier, wie oft eine Regel einer Person entspricht. Hier ist ein Beispiel für eine Regel:Wie berechne ich die Ähnlichkeit zwischen logischen Regeln

Person.Age<20 and 
(Person.number_of_children==3 or Person.married==True) and 
Person.Work==student and 
Person.Car.isSportCar==False and 
Person.Car.Color in [blue,pink,red] 

Wie Sie sehen können, in der Regel gibt es eine Menge von Attributen mit Booleschen Ausdrücken verknüpft. Die Regel passt zu einer Person, wenn sie und ihr Fahrzeug einige Kriterien erfüllen. Um den Verkehr einer Regel vorherzusagen, muss ich einen Abstand oder eine Ähnlichkeitsmetrik zwischen meinen Regeln finden, aber es fällt mir schwer, die Regeln in einem Spaltenausdruck zu reduzieren. Wenn ich es tun werde ich Informationen verlieren und hier ist der Grund: Ein Beispiel für Spalte Präsentation meiner Regel:

Person.Age : 20 
Person.number_of_children:3 
Person.married:True 
Person.work:student 
Person.Car.isSportCar:False 
Person.Car.Color:[blue,pink,red] 

Damit ich die ‚OR‘ und ‚<‘ und ‚in‘

verlieren

Verflacht meine Regeln Ausdruck eine gute Idee oder gibt es eine andere? Sollte ich meine Regeln in eine andere Datenstruktur (z. B. eine Baumdatenstruktur) konvertieren, um den Ähnlichkeitswert zwischen ihnen besser abzufangen? Hast du ein paar Vorschläge?

+1

Da Ihr Problem über Theorie ist, sollten Sie es auf https: // Statistiken veröffentlichen.stackexchange.com/ – pltrdy

+1

Ich stimme ab, diese Frage als Off-Topic zu schließen, da übergeordnete Statistikfragen zu [Cross Validated] gehören (https://stats.stackexchange.com/) – Prune

+0

Tut mir leid, dass ich das nicht getan habe Ich weiß, dass es eine andere Plattform auf dem Stapel gibt, auf der ich Statistikfragen posten kann. –

Antwort

0

Lassen Sie mich einen anderen Ansatz vorschlagen:

Basis der Ähnlichkeitswert auf den Prozentsatz der Menschen, für die die beiden Regeln das gleiche Ergebnis. Natürlich brauchen Sie eine große und heterogene Bevölkerung.

Wenn beide Regeln ein ähnliches Ergebnis für den größten Teil der Population haben (z. B. "falsch"), können Sie das Ergebnis nur auf Testfälle stützen, bei denen mindestens eines der Ergebnisse "wahr" ist.

+0

Dieser Ansatz ist interessant! Ich habe vorher darüber nachgedacht, aber ich lief auf einige Komplikationen und ich gab es auf. Ich werde es noch einmal versuchen –

0

Was ich in einem Fall wie diesem tun würde, wäre zu versuchen, die Spezifikationen der Regeln in Sätze zu konvertieren, so dass es sinnvoll ist, sie zu reduzieren und dann einen Jaccard-Abstand zu berechnen. Die Jaccard-Distanz wird durch den Schnitt über die Vereinigung der Mengen definiert. Schließlich, gewichten Sie die verschiedenen Attribute (oder nicht und verwenden Sie eine einzige Menge für alles).

Zum Beispiel gegeben:

Person.Age < 20 und (Person.number_of_children == 3 oder Person.married == True) und Person.Work == Schüler und Person.Car. isSportCar == Falsch und Person.Car.Color in [blau, rosa, rot]

und:

Person.Age < 15 und (Person. NUMBER_OF_CHILDREN == 2 oder Person.married == False) und Person.Work == Schüler und Person.Car.isSportCar == Falsch und Person.Car.Color in [rosa, rot, weiß]

wandeln sie in etwa so:

Person.Age (5,5,5,5) 
Person.Relatives (Child,Child,Child,Wife) 
Person.CarColor (blue,pink,red) 

Person.Age (5,5,5) 
Person.Relatives (Child,Child) 
Person.CarColor (pink,red,white) 

Und dann Jaccard Abstand wird so etwas wie:

Person.Age = 3/4 
Person.Relatives = 2/4 
Person.CarColor = 2/4 

und aggregieren sie (gewichtet falls erforderlich).

+0

Es ist in der Tat ein interessanter Ansatz, aber ich werde das gleiche Problem haben: Ich werde die Informationen über die logischen Ausdrücke wie 'UND', 'ODER' verlieren. Es ist, als würde man jeden logischen Ausdruck in AND umwandeln –

Verwandte Themen