Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mehrspaltige Ganzzahlreihenfolge

Das Problem, das Sie zu haben scheinen, ist, dass jede Spalte einen anderen Maßstab hat und Sie sie daher nicht einfach kombinieren können. Dieses Problem kann mit einer Technik namens Bleaching gelöst werden. Dies beinhaltet die Berechnung des Durchschnitts und der Standardabweichung jeder Spalte (Sie könnten dies in 1 SQL-Anweisung tun) und dann die Neuskalierung jeder Spalte auf diese, wenn Sie Folgendes auswählen:

colSortPos = (colValue-colMean) / colStdev

Wenn Sie dies tun, erhalten Sie jede Spalte im Bereich um 0, was +/- 1 Standardabweichung innerhalb des Bereichs +/- 1 entspricht. Der Trick besteht dann darin, diese so zu kombinieren, dass ähnliche Daten zusammenkommen. Das Problem hierbei ist, dass dies kein zweidimensionales Problem ist und Sie daher mehrdimensional denken müssen. Mein Vorschlag ist also, die euklidische Distanz als Sortierreihenfolge zu verwenden.

SELECT
    date,
    i,
    j,
    k,
    SQRT( POW(([email protected])/@iStdDEv, 2) + POW(([email protected])/@jStdDEv, 2) + POW(([email protected])/@kStdDEv, 2) )
AS
    sort_order
FROM
    table
ORDER BY
    sort_order

Das einzige Problem dabei ist, dass es Ihr Problem auf einen 1-dimensionalen Raum projiziert, der dazu führen kann, dass Sie einige Korrelationen verpassen. Um dies zu umgehen, schlage ich vor, eine Clustering-Technik wie K-Means zu verwenden, die ziemlich einfach zu implementieren und sehr schnell ist. Auf diese Weise können Sie Ihre Daten in k Cluster gruppieren, die die größte Ähnlichkeit aufweisen [ http:// en.wikipedia.org/wiki/K-means_clustering ]. Wenn Sie die Rohdaten haben und mit diesen (und anderen) Techniken herumspielen wollen, dann schlage ich vor, das Weka-Toolkit auszuprobieren [ http://www.cs.waikato.ac.nz/ml/weka/ ], wodurch Sie mit diesen Techniken herumspielen können.