推定されるのかについては、上図「HyperLogLogの基礎」もしくはスライドをご参照ください。レジスタM2の場合レジスタM1と同様に推定します。各レジスタで出た推定値をもとに、最終的な推定値を出すレジスタM1、M2で推定値が出ましたが、実はそれぞれは指数の推定値となっているため、単純な算術平均は望ましくありません。mean(調和平均)を計算します。meanを計算しています。meanは、以下のように計算されます(逆数の算術平均の逆数)。cardinalityは整数のため、ここでは四捨五入して、最終的な推定値は「5」であるとします。保持に必要な最大のビット数」で済みます。以上、HyperLogLogの基本的な考え方がお分かりいただけましたでしょうか?実際にはもう少し複雑ですし、さらにその推定値の改善手法がいくつか提案されています。今回の例ではcardinalityの推定値と真値が一致しましたが、実際にはデータのcardinalityの真値が小さいと誤差が大きくなってしまうであろうというのは、すぐに予想できると思います。詳しく知りたい方は、スライドをご参照ください。approx_distinctとは」の段落の最後に、「Presto内部のapprox_distinctの実装を追ってみると、HyperLogLogと呼ばれるアルゴリズムが利用されていることがわかった」と書きました。そこで、最後にHyperLogLogのPrestoにおける実装のどのあたりに記述があるのかを、少しだけご紹介したいと思います。approx_distinctの実装まずは、approx_distinctの実装を見てみます。github.comすると、ソースコードにそのまま「HyperLogLog」という文字列が出てきます。詳細を確認すると、内部では「Airlift」というパッケージを利用していることがわかります。AirliftにおけるHyperLogLogの実装では、利用しているAirliftにおけるHyperLogLogの実装を見ていきます。github.comここでは、別のパッケージのHyperLogLogを利用するということはなく、そのまま実装されているようです。Airliftにおける実装でわかったことを簡単にまとめておくと、以下3点です。Inc.まとめ今回は「理論編」として、大量ログからユニークユーザー数を高速に推定するための背景やアルゴリズム(HyperLogLog)、そしてそのPrestoにおける実装と利用法について、簡単にご紹介しました。HyperLogLogのアルゴリズムの基礎的考え方は、単純でありながらとても賢く、とても面白いと思います。その改善提案にも、計算途中の結果をうまく利用するような賢いものがあります。しますね!また、Prestoは全てをインメモリでかつ分散して高速に処理しようという、一見すると力づくにも見えるコンセプトながらも、HyperLogLogのようなアルゴリズムも実装されており、非常に使いやすくなっています。Platform)とは、広告主・メディア・ECサイトなどが保有するさまざまな大量データを収集・分析し、主にマーケティング用途での利用・活用を可能にするデータ基盤のこと。今回の検証では、アルゴリズムについて論文を読んで調べたり、実装内容を検証したり、さまざまなことを自分の手で行うことができ、非常に面白かったです。した先進的な取り組みをぜひ自分でもやってみたいという方を、ブレインパッドでは募集しています。...強化学習入門の第3弾。採用ページスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。