CS计算机代考程序代写 # BS1033 Lecture 8 Analysis

# BS1033 Lecture 8 Analysis
# Author: Chris Hansman
# Email: chansman@imperial.ac.uk
# Date : 25/02/20

#Loading Libraries
library(tidyverse)

#Function to Plot Images
plt_img <- function(x){ image(matrix(as.numeric(x), nrow = 64, byrow = T), col = grey(seq(0, 1, length = 256))) } #Loading Face Data (Faces are Rows) faces <- read_csv("olivetti.csv") %>%
as.matrix()

#Plotting One ca
plt_img(faces[105,1:4096])

#Loading Labels
y_df<- sort(rep(1:40, times = 10)) # Look for the average face for each person. #Group by label then take average of every variable (pixel) AverageFace <- data.frame(faces) %>%
mutate(label=y_df) %>%
group_by(label) %>%
summarise_all(mean)

#Plot
plt_img(AverageFace[1, 2:4097]) # For 1st subject

#PCA
pc <- prcomp(faces, center = T, scale=F) eigenvalues <- as.matrix((pc$sdev^2)) eigenvectors <- as.matrix(pc$rotation) princomp <- pc$x #Recovering Initial Photos recover <- eigenvectors%*%t(pc$x)+ pc$center plt_img(recover[,12]) # For 1st subject plt_img(faces[12,1:4096]) #First 40 Eigenvalues Explain 85% of the variance sum(eigenvalues[1:40])/sum(eigenvalues) #Selecting Those: eigen40=eigenvectors[,1:40] princomp40 <- pc$x[,1:40] center=pc$center #Recreating Images with Just the first 40 Principle Components recover <- eigen40%*%t(princomp40)+ pc$center plt_img(recover[,30]) plt_img(faces[30,]) #Projecting a photo onto first 40 eigenvalues: PF1 <- as.matrix((faces[88,]-center)%*%eigen40) PFall <-princomp40 # as.matrix(faces-center)%*%eigen40 #Closest Options test <- matrix(rep(1,400),nrow=400,byrow=T) test_PF1 <- test %*% PF1 Diff <- PFall-(test_PF1) a <- diag(Diff%*%t(Diff)) # Find the Most Similar Faces y <- diag(Diff%*%t(Diff)) x=c(1:400) newdf=data.frame(cbind(x,y)) a<-newdf[order(newdf[,2]),] a[1:10,] plt_img(faces[88,]) plt_img(faces[84,])