Video: Kevin Richard - How to rank on Google Turkey? A machine learning-based ranking factor study 2024
Bir Bloom filtresi bir akıştan gelen nesneleri izleyebiliyor olsa bile, orada kaç nesne olduğunu söyleyemez. Biriyle dolu bir bit vektör (hash sayısına ve çarpışma olasılığına bağlı olarak) aynı adreste hash edilen gerçek nesne sayısını gizleyebilir.
Nesnelerin sayısının bilinmesi, kaç farklı kullanıcının belirli bir web sitesi sayfasını veya farklı arama motoru sorgusu sayısını gördüğünü bilmek istediğiniz zamanlarda olduğu gibi çeşitli durumlarda yararlıdır. Tüm öğeleri saklama ve aralarında bulunan kopyaları bulma, özellikle bir akıştan gelen milyonlarca elementle çalışamaz. Bir akıştaki farklı nesnelerin sayısını öğrenmek isterseniz, hala bir karma işleve güvenmek zorundasınız, ancak yaklaşım sayısal bir eskiz almayı gerektiriyor.
Eskiz yaklaşımı almak demektir; bu, tam olarak yanlış olmayan fakat tam olarak yanlış olmayan bir değerdir. Yaklaşım kabul edilebilir, çünkü gerçek değer ondan çok uzak değildir. Olasılık ve yaklaşıklığa dayanan bu akıllı algoritmada, HyperLogLog,, akıştan üretilen sayıların özelliklerini gözlemliyorsunuz. HyperLogLog, bilgisayar bilimcileri Nigel Martin ve Philippe Flajolet'in çalışmalarından kaynaklanmaktadır. Flajolet, ilk algoritması olan Flajolet-Martin (veya LogLog algoritması) daha iyi olan HyperLogLog sürümüne geçti:
- Bir karma akıştan alınan her öğeyi bir sayıya dönüştürür.
- Algoritma, sayıları ikili olarak, bilgisayarların kullandığı taban 2 sayısal standarda çevirir.
- Algoritma, ikili sayıdaki başlangıç sıfırlarının sayısını ve gördüğü maksimum sayıdaki parçayı sayar, bu n 'dır.
- Algoritma, akışı aktarılan farklı öğelerin sayısını n kullanarak tahmin eder. Farklı öğelerin sayısı 2 ^ n 'dır.
Örneğin, dizedeki ilk öğe köpek sözcüğüdür. Algoritma onu bir tamsayı değerine dönüştürür ve ikili olarak dönüştürür, 01101010 sonucunu verir. Numaranın başında sadece bir sıfır görünür, böylece algoritma bunu en fazla izlenen sıfır sayısı olarak kaydeder. Ardından algoritma, ikili eşdeğerleri 11101011 ve 01101110 olan n'yi değiştirmeden bırakan papağan ve kurt, sözcüklerini görür. Bununla birlikte, kedi sözcüğü geçtiğinde, çıktı 00101110, dolayısıyla n 2 olur. Ayrı öğelerin sayısını tahmin etmek için, algoritma 2 ^ n, yani 2 ^ 2 = 4'ü hesaplar. Şekil bu işlemi göstermektedir.
Yalnızca önde gelen sıfırları sayma.Algoritmanın püf noktası, karması rastgele sonuçlar üretiyorsa (Bloom filtresinde olduğu gibi) eşit olarak dağıtılırken, ikili gösterime bakarak, bir sıfır dizisinin göründüğü olasılığı hesaplayabilirsiniz. Tek bir ikili sayının 0 olması olasılığı ikide bir olduğundan, sıfırların sıralarının olasılığını hesaplamak için, bu 1/2 olasılığın, sıfırların sırasının uzunluğu kadar bir çok kez çarparsınız:
- yüzde 50 0
- ile başlayan sayılar için olasılık (1/2) olasılığı 00
- ile başlayan sayıların% 25'i (1/2 * 1/2) olasılık 12. K sıfırlar ile başlayan sayılarda 000
- (1/2) ^ k ile başlayan sayılar için yüzde 5 (1/2 * 1/2 * 1/2) olasılık. (Birçok çarpmanın daha hızlı hesaplanması için güç kullanırsınız. aynı sayı)
HyperLogLog'un gördüğü sayılar ne kadar az olursa, o zaman hatalılık artar. Doğruluk, farklı karma işlevleri kullanarak birçok kez HyperLogLog hesaplamasını kullandığınızda artar ve her hesaplamadan gelen cevapların ortalaması alınır, ancak birçok karma işlemi zaman alır ve akışlar hızlıdır. Alternatif olarak, aynı bölü çizelgesini kullanabilir, ancak akışın gruplara bölünebileceği (varış siparişine göre öğeleri gruplara ayırıp ayırarak) ve her grup için en fazla sayıda sıfırın arkasındaki sıfırları takip etmiş olursunuz. Sonunda, her bir grup için ayrı öğe tahminini hesaplar ve tüm tahminlerin aritmetik ortalamasını hesaplarsınız. Bu yaklaşım stokastik ortalamadır ve algoritmayı tüm akışa uygulamaktan daha kesin tahminler sağlar.