data<-read.table("change.txt",header=TRUE) N <- 4:155; fin <- length(N); eta = 20; loss <- function(x,y){(x-y)^2;} donnees <- data; donnees[1:fin, 1] <- data[N, 2]; donnees[1:fin, 2:7] <- data[N+1, 3:8] # donnees[1:fin, 8] <- data[N+3, 9] nbExperts <- 4; donnees[1:fin, 1:(1+nbExperts)] <- donnees[seq(fin, 1, -1), 1:(1+nbExperts)]; L <- array(0, nbExperts); perte <- array(0, fin); p <- matrix(array(0, fin*nbExperts), nrow=fin, ncol=nbExperts); for (t in 1:fin){ p[t, ] <- exp(-eta * L) / sum(exp(-eta*L)); pred <- sum(p[t, ] * donnees[t, 2:(nbExperts+1)]); perte[t] = loss(pred, donnees[t, 1]); for (j in 1:nbExperts){ L[j] <- L[j] + loss(donnees[t, 1], donnees[t, 1+j]); } } meilleurePerte <- cumsum(loss(donnees[1:fin,1], donnees[1:fin,2])); plot(1:fin, cumsum(perte) - meilleurePerte, xlim = c(0, fin), ylim = c(0, 0.01)) for (j in 1:nbExperts){ lines(1:fin, cumsum(loss(donnees[1:fin,1], donnees[1:fin,1+j])) - meilleurePerte,col='red') points(1:fin, cumsum(loss(donnees[1:fin,1], donnees[1:fin,1+j])) - meilleurePerte, pch=20, col='red', cex = (p[,j]-0.20)/(0.29-p[,j])) } lines(1:fin, cumsum(perte) - meilleurePerte, lwd = 3) title('Regret de l\'agrégateur et des experts (poids = taille du point)')