問題タブ [ranking-functions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
178 参照

sql - 名前のリストを最初の文字でフォルダーに分割します

次のような一連のデータが与えられた場合:

、頭文字で区切る仮想フォルダを作りたいです。7たとえば、関数に渡して 7 つのフォルダーを取得したいとします。

  • 交流
  • DF
  • GH
  • わたしは
  • NQ
  • RS
  • TZ

…それぞれにそれぞれの値が含まれます (例:T-Zが含まれますZzz)。NTILE()目的の結果にかなり近づくために使用できることがわかりました。

目的の値を追加するために、さらに 2 つの結合を行っています。

…これは少し効率が悪いようです。

しかし、これも間違っています。重複があります (たとえば、文字が と のP両方に表示さJ-PれますP-T)。

私は正しい軌道に乗っていますか?より効率的な方法はありますか?オーバーラップを防ぐにはどうすればよいですか?

0 投票する
1 に答える
888 参照

math - スポーツレーティングライブラリ

私は、スポーツの評価/ランク付けシステムの実装を検討しています(つまり、各プレーヤーまたはチームに、スポーツ競技でのパフォーマンスに基づいて評価を与える)。

私は次のようなさまざまなアルゴリズムを見てきました。

使用するアルゴリズムを選択していません。Glickoの亜種の1つである可能性があります。ただし、それらを実装するための既存のライブラリが存在するかどうかが大きな要因になります。数学ライブラリを書くことは私が正しくなるのに長い時間がかかるでしょう、そして私はジャンプスタートが大好きです。

私はGUIを探しているのではなく、ライブラリだけを探しています。オープンソースは完璧で、ビールのように無料ですが、商用オプションも検討されます。Pythonが理想的ですが、他の言語も考慮されます。

誰かが私が見るべきライブラリを推薦できますか?

0 投票する
1 に答える
1077 参照

correlation - スピアマンの相関係数の差に関する有意性検定

人間が評価した一連のランキング (HUMAN-RANKING)、現在使用されている一般的な方法によって生成された一連のランキング (PRESENT-RANKING)、そして最後に目的の方法によって生成された一連のランキング (MY-RANKING) を取得しました。 .

HUMAN-RANKING と PRESENT-RANKING の間のスピアマンの相関を計算しました。これをヒューマン・プレゼント・スピアマンと呼ぼう。

次に、HUMAN-RANKING と MY-RANKING の間のスピアマンの相関関係を見つけました。これをヒューマン・マイ・スピアマンと呼ぼう。

HUMAN-MY-SPEARMAN と HUMAN-PRESENT-SPEARMAN の差が統計的に有意かどうかを調べるにはどうすればよいですか?

前もって感謝します。

0 投票する
1 に答える
2157 参照

python - リストが「どのようにソートされているか」を効率的に判断します。レーベンシュタイン距離

私はランキングアルゴリズムについていくつかの研究を行っており、ソートされたリストとそのリストのいくつかの順列が与えられた場合、2 つの順列間の距離を計算したいと考えています。レーベンシュタイン距離の場合、これはシーケンスとそのシーケンスのソートされたコピーとの間の距離を計算することに対応します。たとえば、「反転距離」もあり、その線形時間アルゴリズムはこちらで詳しく説明されており、実装に取り​​組んでいます。

反転距離の既存の python 実装、および/またはレーベンシュタイン距離の最適化を知っている人はいますか? 私は約 50,000 から 200,000 要素のシーケンスでこれを計算しているので、O(n^2) は遅すぎますが、O(n log(n)) 以上で十分です。

順列の類似性に関する他の測定基準も高く評価されます。


未来の人々のために編集:

レイモンド・ヘッティンガーの回答に基づく; レーベンシュタインや反転距離ではなく、「ゲシュタルト パターン マッチング」です:P

最悪のデスクトップで ~6 秒で実行されます。

Edit2:シーケンスを [1 .. n] の順列に強制できる場合、マンハッタン メトリックのバリエーションは非常に高速で、興味深い結果が得られます。

正規化係数は技術的には近似値です。(0.5 * (len(l) ** 2 - 1))偶数サイズのリストには適していますが、奇数サイズのリストには適しているはずです。

Edit3:リストの類似性をチェックするアルゴリズムは他にもいくつかあります! Kendall Tauランキング係数とSpearmanランキング係数。これらの実装はSciPyライブラリでscipy.stats.kendalltauおよびとして利用できscipy.stats.rspearman、関連する p 値とともにランクを返します。

0 投票する
4 に答える
649 参照

scalability - Web アプリケーションのスケーラブルな時間減衰

ここでの私の目標は、reddit のフロント ページと同様のシステムを生成することです。

私には物事があり、簡単にするために、これらの物事には投票があります。私が生成した最高のシステムは、時間減衰を使用することです。半減期が 7 日間の場合、今日の投票が 20 ポイントの価値がある場合、7 日後には 10 ポイントの価値があり、14 日後には 5 ポイントの価値になります。

問題は、これは私が非常に満足している結果を生み出しますが、スケールしないことです. 投票ごとに、他のすべての投票の値を効果的に再計算する必要があります。

だから、私は考えを逆転させることができるかもしれないと思った。今日の投票は 1 ポイントの価値があります。今から 7 日後の投票は 2 ポイントの価値があり、今から 14 日後の投票は 4 ポイントの価値があります。投票ごとに 1 つの行を更新するだけでよいため、これはうまく機能します。問題は、年末までに、とてつもなく膨大な数を保持できるデータ型が必要になることです。

というわけで、ひどいランキングになった線形成長を使ってみました。多項式の成長 (サイトの立ち上げと提出からの日数の 2 乗と 3 乗) を試したところ、わずかに良い結果が得られました。ただし、わずかに良い結果が得られると、すぐに維持不可能な数値に再び近づきます。

だから、私はあなたのスタックオーバーフローに来ます。天才的なアイデアを持っている人、またはこのシステムをモデル化する方法に関するアイデアへのリンクを持っている人は、Web アプリケーションに合わせて適切に拡張できます。

0 投票する
1 に答える
613 参照

sql-server-2008 - 境界を越えて均等に分散されたデータを並べて表示する方法

データのステージングに使用されるパーティション分割されたテーブルにロードする必要がある、時間ベースの一連のレコードがあります。ステージテーブルは日ごとに分割されています。効率を高めるために、ステージ テーブルへのデータ ロードを複数の「プロセッサ」(SSIS のストリーム) に分散しました。データがステージングされたら、データ マートにロードする前に、一連の重複除外操作を実行します。ただし、日付で分割されたセット全体で NTILE 関数を使用しているため、ステージングされたデータがプロセッサ間で均等に分割されないことが私の課題です。

したがって、5 プロセッサの場合、次の分布が表示される可能性があります ...

データ量は指数関数的に増加しているため、今日のロード時にはプロセッサー 4 は 6,000,000 しかありませんが、全範囲が読み込まれると、プロセッサー 4 は合計で 8,000,000 行 (レコード) を処理する可能性があります。

私の目標は、2 つのプロセッサが同じパーティション (日) で競合しないようにしながら、行数に基づいてプロセッサ間で作業を均等に分散することです。

したがって、ビジュアルとして、ディストリビューションは次のように見える必要があります...

どんなフィードバックでも大歓迎です。

0 投票する
2 に答える
442 参照

sql - ランキング関数で繰り返し出現箇所を見つける

しばらくの間苦労してきた次のクエリを生成するのを手伝ってください。月番号と、この特定の月に失敗したイベントがあったかどうかの情報を含む単純なテーブルがあるとします。

サンプルデータを生成するスクリプトの下:

「繰り返される失敗」の定義を考えると:

任意の 6 か月間で少なくとも 4 か月間にイベント障害が発生した場合、そのような障害が発生した最後の月は「繰り返しの障害」であり、クエリは次の出力を返す必要があります。

どこ:

  • R1 - 6 か月目に 1 回目の繰り返し故障 (過去 6 か月で 4 回の故障)。
  • R2 - 7 番目の月に 2 回目の故障が繰り返されました (過去 6 か月で 4 回の故障)。
  • R3 - 11 番目の月に 3 回目の故障が発生しました (過去 6 か月で 4 回の故障)。

R1 - 再び 18 番目の月に 1 回目の繰り返し失敗

繰り返される失敗は、その数に基づいて適切な乗数を適用する必要があるため、連続して数えられます。

  • 1 回目の失敗 - X2
  • 2 回目の失敗 - X4
  • 3 回目以降の繰り返しの失敗 -X5。
0 投票する
1 に答える
574 参照

sql - top_n_rank全文検索の問題

top_n_by_rank全文検索のパラメータについてです。

クエリがあります。

ここで、私は与えtop_n_by_rank = 100ました。これにより、上位100件のレコードが得られるはずです。しかし、私は61レコードしか取得していません。パラメータを削除すると、top_n_rank1000を超えるレコードが得られます。

私の質問は、top_n_by_rankパラメータは最初の100レコードのみを検索するのか、それともすべてのレコードを検索して検索結果の最初の100レコードのみを取得するのかということです。

0 投票する
1 に答える
970 参照

sql - グループ内のレコード位置+各レコードのグループのレコード数を取得します

SQL Server 2008の一時テーブルに結果セットがあります。フィールドの1つはグループIDであり、グループごとに任意の数の行を含めることができます。「行1/3」など、グループ内の行の位置を新しい列に入れたいので、一時テーブル#Data(GroupId int、Item char)がある場合

入手したい

私はなんとかこれを行うことができました

しかし、これにはあまり満足していません。これは、実際に取得する必要のあるすべての列のためにクエリが実際には少し複雑であり、グループ行数を取得するためにそれ自体と内部結合を実行し、取得するためにパーティションを実行するためです。行の位置が多すぎるようです。これを行うためのより簡単な方法はありますか?


私はティムの答えを正確に使用しませんでしたが、それは私に道を示しました: