sql >> Databáze >  >> RDS >> Mysql

Vícesloupcové celočíselné řazení

Zdá se, že máte problém s tím, že každý sloupec má jiné měřítko, a tak je nelze snadno kombinovat. Tento problém lze vyřešit pomocí techniky zvané bělení. To zahrnuje výpočet průměru a směrodatné odchylky každého sloupce (můžete to udělat v 1 příkazu SQL) a poté změnu měřítka každého sloupce na tento při výběru:

colSortPos = (colValue-colMean) / colStdev

Tímto způsobem získáte každý sloupec v rozsahu kolem 0, což je +/- 1 směrodatná odchylka v rozsahu +/- 1. Trik pak spočívá v jejich zkombinování, aby byla podobná data pohromadě. Problém je v tom, že se nejedná o dvourozměrný problém, a tak musíte myslet vícerozměrně. Takže můj návrh je vzít euklidovskou vzdálenost jako pořadí řazení.

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

Jediný problém s tím je, že to promítá váš problém do 1 dimenzionálního prostoru, takže vám mohou uniknout některé korelace. Chcete-li to obejít, navrhuji použít techniku ​​shlukování, jako je K-means, která je docela jednoduchá na implementaci a je opravdu rychlá. To vám umožní seskupit data do k clusterů, které vykazují největší podobnost [ http:// en.wikipedia.org/wiki/K-means_clustering ]. Pokud máte nezpracovaná data a chcete si pohrát s těmito (a dalšími) technikami, pak doporučuji vyzkoušet sadu nástrojů weka [ http://www.cs.waikato.ac.nz/ml/weka/ ], což vám umožní hrát si s těmito technikami.



  1. Stanovení a identifikace cílů řádků v prováděcích plánech

  2. DateTimeField obdržel naivní datum a čas

  3. MySQL BLOB vs soubor pro ukládání malých obrázků PNG?

  4. SQL Server Vysvětlení NĚKTERÉHO operátora