sql >> データベース >  >> RDS >> Mysql

複数列の整数の順序

    あなたが抱えていると思われる問題は、各列のスケールが異なるため、それらを簡単に組み合わせることができないことです。この問題は、ホワイトニングと呼ばれる手法を使用して解決できます。これには、各列の平均と標準偏差を計算し(1つのSQLステートメントでこれを行うことができます)、次を選択するときに各列をこれに再スケーリングすることが含まれます。

    colSortPos = (colValue-colMean) / colStdev
    

    これを行うと、0前後の範囲の各列が得られ、+ /-1の範囲内で+/-1標準偏差になります。次に、これらを組み合わせて、類似した日付が一緒になるようにします。ここでの問題は、これは2次元の問題ではないため、多次元的に考える必要があるということです。だから私の提案は、あなたのソート順としてユークリッド距離を取ることです。

    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
    

    これに関する唯一の問題は、問題を1次元空間に投影するため、いくつかの相関関係を見逃す可能性があることです。これを回避するには、K-meansのようなクラスタリング手法を使用することをお勧めします。これは、実装が非常に簡単で、非常に高速です。これにより、日付を最も類似性の高いk個のクラスターにグループ化できます[ http:// en.wikipedia.org/wiki/K-means_clustering ]。生データがあり、これらの(およびその他の)手法を試してみたい場合は、wekaツールキット[ http://www.cs.waikato.ac.nz/ml/weka/ ]これにより、これらのテクニックを試すことができます。



    1. 1ページで多くのクエリを実行するにはどうすればよいですか?

    2. java-Oracleストアドプロシージャで配列を渡す

    3. データベースから検索したデータをdivに表示したい検索ページを作成したいですか?

    4. OracleInstantクライアントをPythoncx_OracleのDockerコンテナにインストールします