ホームページ > データベース > mysql チュートリアル > 重み付けされた確率を使用してテーブルから行をランダムに選択するにはどうすればよいですか?

重み付けされた確率を使用してテーブルから行をランダムに選択するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-01 13:38:10
オリジナル
620 人が閲覧しました

How Can I Randomly Select a Row from a Table with Weighted Probabilities?

加重確率によるランダムな行選択

問題:

「id」などの列を持つテーブルがあると想像してください。 「内容量」と「重量」です。 「重み」の値を考慮して、このテーブルから行をランダムに選択したいとします。たとえば、3 つの行が存在する場合:

id content weight
1 some content 60
2 other content 40
3 something 100

最初の行の選択の確率は 30%、2 行目の選択の確率は 20%、3 行目の選択の確率は 50% です。

解決策:

1 つのアプローチは、加重リザーバーを適用することです。サンプリング:

SELECT
  id,
  -LOG(RAND()) / weight AS priority
FROM
  your_table
ORDER BY priority
LIMIT 1;
ログイン後にコピー

このメソッドを使用すると、重みに比例する確率で多くの要素から 1 つを選択できます。これは、単一の要素を選択する場合に効果的に機能します。

この手法については、[加重リザーバー サンプリング](https://bit.ly/weighted-res-sampling) の記事で詳しく説明されています。この記事では POW(RAND(), 1/weight) の最大値を選択していますが、これは -LOG(RAND()) /weight の最小値を選択するのと同じであることに注意してください。

以上が重み付けされた確率を使用してテーブルから行をランダムに選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート