Thompson Sampling

Kategori: Machine Learning , 19 Aralık 2019 , JanFranco


Bir önceki yazıda Upper Confidence Bound algoritmasını görmüştük. Bu sefer yine benzer bir uygulamayı Thompson Sampling ile yapacağız. Algoritma oldukça basit. 10.000 satırlık reklam veri setimiz üzerinden anlatayım:

1- Her bir satır için 10 reklamın toplam ödül vermesi ve vermemesi değerlerini alıyoruz. Yani eğer o reklam seçildiyse ve ödül var ise o reklamın toplam ödül verme değeri bir artıyor. Bu değeri alıyoruz. Aynı şey ödül olmaması için de geçerli tabi.

2- Bu elde edilen sayılar ile beta dağılımında rastgele bir sayı üretiyoruz. Beta(Ödül sayısı + 1, Ödül olmama sayısı + 1)

3- En yüksek beta değerine sahip reklamı alıyoruz.

Uppor Confidence Bound algoritmasına oldukça benzemekte. Beta dağılımı olasılıksal bir dağılımdır. Beta dağılımı formülü aşağıdadır:

Thompson Sampling

Thompson Sampling

Beta dağılımını araştırabilirsiniz. Ayrıca Beta dağılımı ile ilgili istatistik ve olasılık bölümünde bir yazı yazacağım. Python ile Thompson samplingi görelim:


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

pd.set_option('display.max_rows', 200)
pd.set_option('display.max_columns', 20)
pd.set_option('display.width', 1000)

df = pd.read_csv('Ads_CTR_Optimisation.csv')
print(df)

rows, columns = df.shape
selected = []
totalReward = 0
ones = [0] * columns
zeros = [0] * columns

for n in range(rows):
    ad = 0
    max_thm = 0
    for i in range(columns):
        randomBeta = np.random.beta(ones[i] + 1, zeros[i] + 1)
        if randomBeta > max_thm:
            max_thm = randomBeta
            ad = i
    selected.append(ad)
    reward = df.values[n, ad]
    if reward:
        ones[ad] += 1
    else:
        zeros[ad] += 1
    totalReward += reward

plt.title('Thompson Total Reward = ' + str(totalReward))
plt.hist(selected)
plt.show()
Thompson Sampling


Sonraki Yazı: Natural Language Processing
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın