Das kommt sehr oft vor und es ist überraschend, dass es keine Standardlösung zu geben scheint. Angenommen, ich habe eine Reihe von numerischen Attributen - Sie können sich vorstellen, diese für ein Ranking von Hochschulen oder Städten zu verwenden, basierend auf einer Reihe von Komponentenwerten wie Schüler / Lehrer-Verhältnis oder Umweltverschmutzung oder was auch immer - und sie in eine einzige Punktzahl verwandeln möchten. p>
Ich möchte einige Beispiele nehmen und interpolieren, um eine konsistente Bewertungsfunktion zu erhalten.
Vielleicht gibt es standardmäßige mehrdimensionale Kurvenanpassungs- oder Datenglättungsbibliotheken oder etwas, das dies einfach macht?
Weitere Beispiele:
tl; dr: Schau dir HiScore an. Es ermöglicht Ihnen, Bewertungsfunktionen, die sich auf sinnvolle Weise verhalten, schnell zu schreiben und zu pflegen.
Um Ihr einfaches Beispiel instanziieren zu können, nehmen wir an, Sie haben eine App, die eine Reihe von Entfernungen und Zeiten als Eingabe erhält und sie mit einem Wert zwischen 1 und 100 abbilden soll. Zum Beispiel erhalten Sie (1,2 Meilen, 8:37) und Sie möchten zum Beispiel 64 zurückkehren.
Der typische Ansatz besteht darin, mehrere Basisfunktionen auszuwählen und dann mit den Koeffizienten dieser Basisfunktionen herumzuzählen, um Punkte zu erhalten, die "richtig aussehen". Zum Beispiel können Sie eine lineare Basisfunktion für Minuten pro Meile haben, mit zusätzlichen Basisfunktionen für die Entfernung (möglicherweise sowohl linear in der Entfernung als auch linear in der Quadratwurzel der Entfernung). Sie können zum Beispiel auch radiale Basisfunktionen für eine komplexere Ausdruckskraft in Ihrem Eingabebereich verwenden. (Dies ist sehr ähnlich zu dem, was andere Antworten in Bezug auf ML-Algorithmen wie SVMs und dergleichen vorgeschlagen haben.)
Dieser Ansatz ist normalerweise ziemlich schnell, aber es gibt viele Nachteile. Zuerst müssen Sie die Basisfunktionen richtig einstellen, was für abstraktere und expressivere Funktionen schwierig sein kann. Zweitens werden Sie feststellen, dass sich Ihre Punktzahl schnell verknöchern wird: Wenn Sie eine Eingabe finden, die Ihrer Meinung nach falsch bewertet wurde, wird es schwierig, herauszufinden, wie Sie sie ändern und gleichzeitig sicherstellen können, dass der Rest der Scoring-Funktion "richtig aussieht". Drittens kann das Hinzufügen eines anderen Attributs zur Punktzahl (z. B. wenn der Läufer männlich oder weiblich ist) schwierig sein, da Sie vielleicht feststellen müssen, dass Sie Ihrer Basis noch viele weitere Begriffe hinzufügen müssen. Schließlich gibt es keine explizite Garantie in diesem Ansatz, dass sich Ihr Punktestand intelligent verhält - abhängig von den gewählten Basisfunktionen und Koeffizienten kann jemand, der eine Meile in 7:03 fährt, einen höheren Punktestand erzielen als jemand, der 1,1 Meilen läuft 7:01 .
Ein anderer Ansatz existiert in Form von HiScore, einer Python-Bibliothek, die ich geschrieben habe , als ich mit einem ähnlichen Problem konfrontiert wurde. Mit HiScore kennzeichnen Sie eine Referenzmenge von Elementen mit Scores und generieren dann eine Scoring-Funktion, die diese Scores intelligent interpoliert. Zum Beispiel könnten Sie die letzten 100 Eingaben zu Ihrer App nehmen, kombinieren Sie sie mit einer Handvoll Ihrer extremsten Eingaben (nehmen Sie vielleicht die konvexe Hülle) Ihrer eingereichten Eingaben in (Abstand, Zeit) Abstand), beschriften Sie sie und verwenden Sie HiScore, um eine vernünftige Bewertungsfunktion zu erstellen. Und wenn es jemals zu einem Ergebnis kommt, dem Sie nicht zustimmen, fügen Sie es einfach dem Referenz-Set mit der richtigen Bezeichnung hinzu und erstellen Sie die Scoring-Funktion neu, weil HiScore die Interpolation durch den Referenz-Satz garantiert.
Eine Eigenschaft von HiScore ist, dass Ihre Attribute monoton sein müssen oder immer größer oder kleiner sein müssen. Dies ist kein Problem für die Einstellung "Laufzeiten", da die Punktzahl mit zunehmender Entfernung (für eine feste Zeit) und mit steigender Zeit (für eine feste Entfernung) steigen sollte. Die Monotonität von HiScore gibt Ihnen Sicherheit, dass Ihr Score sich wie erwartet verhält; es garantiert, dass jemand, der eine Meile in 7:03 rennt, nicht höher erzielt als jemand, der in 7:01 1,1 Meilen fährt.
Die Blutdruckeinstellung, die Sie aufrufen, ist interessant, weil sie nicht monoton ist. Niedriger Blutdruck ist schlecht, aber hoher Blutdruck ist auch schlecht. Sie können HiScore jedoch auch weiterhin verwenden: Teilen Sie jede Messung in eine Komponente für "hohen Blutdruck" und "niedrigen Blutdruck" auf, wobei mindestens eine davon Null ist. Zum Beispiel würde ein systolischer Wert von 160 in ein systolisches + Attribut von 60 und ein systolisches - Attribut von 0 abgebildet werden. Das Ergebnis sollte in diesen beiden neuen Attributen abnehmen, und so wird aus diesem Ansatz ein nicht monotones zweidimensionales Problem (mit Attributen systolisch und diastolisch ) in ein monotones vierdimensionales (mit Attributen systolisch +, systolisch) -, diastolisch, diastolisch - ). (Dieser Trick ähnelt einem, der lineare Programme in das kanonische Formular bringt.)
Sie müssen es lehren, welche korrekten Werte sind. Es gibt keinen anderen Weg, genau zu bestimmen, was eine korrekte Lösung ist. Wie du in den Kommentaren oben gesagt hast, brauchst du einen Menschen, der ihm sagt, was der richtige Wert (oder was die richtige Richtung ist) ist.
Genau das ist Supervised Machine Learning. Sie müssen eine Sammlung von klassifizierten Werten haben und dann trainieren Sie Ihren Algorithmus, indem Sie ihm eine Teilmenge der Sammlung geben, die den Werten entspricht, und dann die verbleibende Teilmenge der Sammlung als Maß dafür nutzen, wie genau sie ist.
Ein Beispiel hierfür sind ANN (Künstliche Neuronale Netze) und SVM (Support Vector Machines)
Hier haben wir ein Beispiel für eine SVM, die ein Modell an Daten mit 2 Werten anpasst (dargestellt als X- und Y-Achse) und das 2 Cluster hat. Man könnte sich Rot als ein hohes Risiko für eine Herzkrankheit vorstellen und Blau als ein geringes Risiko für Herzerkrankungen und die Werte als eine Art von Messung.
Natürlich hätten Sie in realen Beispielen eine viel höhere Dimension von Werten und vielleicht mehr Klassen.
Wenn Sie die Antworten dann für sich selbst benötigen, könnten Sie in einigen Fällen die Werte aus dem ANN-Algorithmus verwenden.
Wenn Sie das System mit Score-Werten für eine Reihe von numerischen Attributen kombinieren können, ist Ihr Problem tatsächlich multivariate Interpolation . Höchstwahrscheinlich handelt es sich um unregelmäßige Datenpunkte .
Wenn Ihre Verteilung der Beispielpunkte ausreichend homogen ist, radial Basisfunktionsinterpolation ist ein guter Ausgangspunkt.
Mit der Interpolation können Sie eine Punktzahl aus numerischen Attributwerten berechnen, die zuvor nicht angezeigt wurden. Stellen Sie sicher, dass Sie genügend Trainingsdaten bereitstellen, um die gesamte Domain abzudecken. Andernfalls können Sie an einigen Stellen sinnlose Schätzungen erhalten. Tatsächlich baut es eine FunktionS(X; X0, X1, X2, ... Xn)
auf, wobei X
das Unbekannte und% Xi
bekannte Beispiele sind, mit dem bekannten Ergebnis Si
; Interpolation ist so, dass S(Xi; X0, X1, X2, ... Xn) = Si
.
Sie können auch Näherungstechniken in Betracht ziehen, die eine Funktion wie S(Xi; X0, X1, X2, ... Xn) ~ Si
mit einiger Genauigkeit aufbauen. Der Vorteil ist, dass diese sich reibungsloser verhalten und Fehler in den Eingabedaten "beheben" können.
Es gibt keine Standardlösung aus zwei Gründen:
Wenn Ihre Etiketteninformationen ordinal sind (z. B. Rangordnungsdaten), sollten Sie die Rangfolge Ansätze verwenden. Einer von ihnen ist der SVM-Rang .
Es funktioniert folgendermaßen: Sie fügen Ihr Dataset in eine Datei im Format Svmlight ein und trainieren einen Klassifizierer über svm_rank_learn
. Vielleicht möchten Sie Parameter optimieren, es könnte Ihnen eine bessere Genauigkeit geben. Wenn Sie dann svm_rank_classify
in einen anderen Datensatz (mit unbekannter Rangfolge) eingeben, erhalten Sie Punkte, die Sie entweder für das Ranking oder für sich selbst verwenden können.
Eine weitere erwähnenswerte Tatsache ist, dass SVM Rank standardmäßig den linearen Kernel verwendet, das bedeutet, dass die Scoring-Funktion eine gewichtete Kombination von Attributen ist. Sie können andere Kernel ausprobieren (wie Radial-Basis-Funktionen), aber Autoren von SVM Rank warnen Sie:
Sie können prinzipiell Kernel in SVM rank mit der Option '-t' verwenden, genau wie in SVMlight, aber es ist schmerzhaft langsam und Sie sind wahrscheinlich besser dran mit SVM light .
Vielleicht können Sie einen probabilistischen Ansatz zwischen den verschiedenen Maßnahmen verwenden. Schau dir als Beispiel das folgende 8min Video an , in dem C. Sagan die Drake-Gleichung benutzt, um die Wahrscheinlichkeit anderer fortgeschrittener Zivilisationen zu schätzen im Universum, basierend auf mehreren (und unterschiedlichen) Messungen / Schätzungen.
Sie könnten in ähnlicher Weise Ihre Schätzung und dann eine darauf basierende Punktzahl erstellen.
Tags und Links optimization math machine-learning multidimensional-array curve-fitting