Importing the dataset
dataset <- read.csv('G:\\RStudio\\udemy\\ml\\Machine Learning AZ\\Part 6 - Reinforcement Learning\\Section 32 - Upper Confidence Bound (UCB)\\UCB\\Ads_CTR_Optimisation.csv')
head(dataset)
Implementing UCB algorithm
There is package to use UCB. So we will create the algorithm from scatch
# initialize variables we will be using
N <- 10000
d <- 10
ads_selected <- integer(0)
numbers_of_selections <- integer(d)
sums_of_rewards <- integer(d)
total_reward <- 0
for (n in 1:N) {
ad <- 0
max_upper_bound <- 0
for ( i in 1 : d) {
# dont use this if we are just starting out
if (numbers_of_selections[i] > 0){
average_reward <- sums_of_rewards[i] / numbers_of_selections[i]
delta_i <- sqrt(3/2 * log(n) / numbers_of_selections[i])
upper_bound <- average_reward + delta_i
} else {
upper_bound = 1e400
}
if (upper_bound > max_upper_bound) {
max_upper_bound <- upper_bound
ad <- i
}
}
ads_selected <- append(ads_selected, ad)
numbers_of_selections[ad] <- numbers_of_selections[ad] + 1
reward <- dataset[n,ad]
sums_of_rewards[ad] <- sums_of_rewards[ad] + reward
total_reward <- total_reward + reward
}
Visualising the resuls by using a histogram
hist(ads_selected,
col = "Blue",
main = "Histogram of Ad Selections",
xlab = "Ads",
ylab = "Number of times each ad was selected")

LS0tDQp0aXRsZTogIk1MUiBzZWN0aW9uIDI1IFVwcGVyIENvbmZpZGVuY2UgQm91bmQgIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KSW1wb3J0aW5nIHRoZSBkYXRhc2V0DQpgYGB7cn0NCmRhdGFzZXQgPC0gIHJlYWQuY3N2KCdHOlxcUlN0dWRpb1xcdWRlbXlcXG1sXFxNYWNoaW5lIExlYXJuaW5nIEFaXFxQYXJ0IDYgLSBSZWluZm9yY2VtZW50IExlYXJuaW5nXFxTZWN0aW9uIDMyIC0gVXBwZXIgQ29uZmlkZW5jZSBCb3VuZCAoVUNCKVxcVUNCXFxBZHNfQ1RSX09wdGltaXNhdGlvbi5jc3YnKQ0KaGVhZChkYXRhc2V0KQ0KYGBgDQoNCiMgSW1wbGVtZW50aW5nIFVDQiBhbGdvcml0aG0NClRoZXJlIGlzIHBhY2thZ2UgdG8gdXNlIFVDQi4gU28gd2Ugd2lsbCBjcmVhdGUgdGhlIGFsZ29yaXRobSBmcm9tIHNjYXRjaA0KDQpgYGB7cn0NCiMgaW5pdGlhbGl6ZSB2YXJpYWJsZXMgd2Ugd2lsbCBiZSB1c2luZw0KTiA8LSAgMTAwMDANCmQgPC0gIDEwDQphZHNfc2VsZWN0ZWQgPC0gIGludGVnZXIoMCkNCm51bWJlcnNfb2Zfc2VsZWN0aW9ucyA8LSAgaW50ZWdlcihkKQ0Kc3Vtc19vZl9yZXdhcmRzIDwtICBpbnRlZ2VyKGQpDQp0b3RhbF9yZXdhcmQgPC0gIDANCg0KZm9yIChuIGluIDE6Tikgew0KICANCiAgYWQgPC0gIDANCiAgbWF4X3VwcGVyX2JvdW5kIDwtICAwDQoNCiAgICBmb3IgKCBpIGluIDEgOiBkKSB7IA0KICAgICAgIyBkb250IHVzZSB0aGlzIGlmIHdlIGFyZSBqdXN0IHN0YXJ0aW5nIG91dA0KICAgICAgaWYgKG51bWJlcnNfb2Zfc2VsZWN0aW9uc1tpXSA+IDApew0KICAgIGF2ZXJhZ2VfcmV3YXJkIDwtICBzdW1zX29mX3Jld2FyZHNbaV0gLyBudW1iZXJzX29mX3NlbGVjdGlvbnNbaV0NCiAgICBkZWx0YV9pIDwtICBzcXJ0KDMvMiAqIGxvZyhuKSAvIG51bWJlcnNfb2Zfc2VsZWN0aW9uc1tpXSkNCiAgICB1cHBlcl9ib3VuZCA8LSAgYXZlcmFnZV9yZXdhcmQgKyBkZWx0YV9pDQogICAgICB9IGVsc2Ugew0KICAgICAgICB1cHBlcl9ib3VuZCA9IDFlNDAwDQogICAgICB9DQogICAgaWYgKHVwcGVyX2JvdW5kID4gbWF4X3VwcGVyX2JvdW5kKSB7DQogICAgICBtYXhfdXBwZXJfYm91bmQgPC0gIHVwcGVyX2JvdW5kDQogICAgICBhZCA8LSAgaQ0KICAgIH0NCiAgfQ0KICBhZHNfc2VsZWN0ZWQgPC0gIGFwcGVuZChhZHNfc2VsZWN0ZWQsIGFkKQ0KICBudW1iZXJzX29mX3NlbGVjdGlvbnNbYWRdIDwtIG51bWJlcnNfb2Zfc2VsZWN0aW9uc1thZF0gKyAxDQogIHJld2FyZCA8LSAgZGF0YXNldFtuLGFkXQ0KICBzdW1zX29mX3Jld2FyZHNbYWRdIDwtICBzdW1zX29mX3Jld2FyZHNbYWRdICsgcmV3YXJkDQogIHRvdGFsX3Jld2FyZCA8LSAgdG90YWxfcmV3YXJkICsgcmV3YXJkDQp9DQoNCmBgYA0KDQpWaXN1YWxpc2luZyB0aGUgcmVzdWxzIGJ5IHVzaW5nIGEgaGlzdG9ncmFtDQoNCmBgYHtyfQ0KaGlzdChhZHNfc2VsZWN0ZWQsIA0KICAgICBjb2wgPSAiQmx1ZSIsDQogICAgIG1haW4gPSAiSGlzdG9ncmFtIG9mIEFkIFNlbGVjdGlvbnMiLA0KICAgICB4bGFiID0gIkFkcyIsDQogICAgIHlsYWIgPSAiTnVtYmVyIG9mIHRpbWVzIGVhY2ggYWQgd2FzIHNlbGVjdGVkIikNCmBgYA0KDQo=