#Lecture du fichier externe Iris de façon interactive Iris <- read.table(file.

#Lecture du fichier externe Iris de façon interactive Iris <- read.table(file.choose(), header=TRUE, sep=",", na.strings="NA", dec="." , strip.white=TRUE) # OU bien #Lecture du fichier externe Iris de façon interactive sachant où il est... Iris <- read.table("C:/Documents and Settings/Admin/My Documents/My Dropbox/Teaching/C lassification_Courses/data/iris/iris.data", header=FALSE, sep=",", na.strings="NA", dec=".", strip.white=TRUE) #Renommage des colonnes (si nécessaire, sinon à skipper) colnames(Iris)<-c("sepal.length", "sepal.width", "petal.length", "petal.width", "class") #Pour supprimer les données les lignes avec données manqunates (NA) Iris<-na.omit(Iris) # Plot d'une scatterplot matrix des données pairs(Iris[,1:4]) # Préparation d'un plot de 4 graphiques en un suivant le layout suivant: # |-----|-----| # | 1 | 2 | # |-----|-----| # | 3 | 4 | # |-----|-----| # # Création de la matrice correpondante myLayoutMatrix<-matrix(1:4, ncol=2, byrow=TRUE) # Utilisation du layont layout(myLayoutMatrix) # Démonstration du layout (juste à vertu pédagogique) layout.show(n = 4) # Récupération des nom de variables/colonnes myColNames<- colnames(Iris) # Boucle d'histogrammes de chacune des variables du dataset, en utilisant # les noms de colonnes pour les titres (main) et pour les nom d'abscisses (xlab) . for(i in 1:4) hist(Iris[,i],main = paste("Histogram of" , myColNames[i]), xlab = myColNames[i] ) #Affichons les matrices de corrélation et de covariance. cor(Iris[,1:4]) cov(Iris[,1:4]) # Rétablissement du layout avec un seul graphique à la fois. layout(matrix(1:1, ncol=1)) # Chargement du package permettant de faire de l'ACP de façon plus détaillée # qu'en utilisant la fonction princomp de base: #install.packages("ade4") library(ade4) # Exécution de l'ACP (la fonction demandera interactivement le nombre d'axes # à retenir) acp<-dudi.pca(Iris[,1:4],center = TRUE, scale = FALSE ) # Si on préfère ne pas avoir d'interruption interactive qui demande le nombre # d'axes, alors on passe scannf à FALSE et le nombre d'axes à retenir via nf. acp<-dudi.pca(Iris[,1:4], scannf=FALSE, nf=4,center = TRUE, scale = FALSE ) # Impression des valeurs propres acp$eig #Les variances cumulées cumsum(acp$eig) #Les variances en pourcentages et pourcentages cumulés : acp$eig/sum(acp$eig)*100 cumsum(acp$eig/sum(acp$eig)*100) #Une représentation en % de variance expliquée : inertie<-acp$eig/sum(acp$eig)*100 barplot(inertie,ylab="% d'inertie",names.arg=round(inertie,2)) title("Eboulis des valeurs propres en %") #Contributions des variables à la construction des axes : inertia.dudi(acp,col.inertia = T)$col.abs # Plot des "droites" de corrélation des variables avec les deux premières # composantes: score.pca(acp, xax=1) score.pca(acp, xax=2) #Le résultat de l'A.C.P a été stocké dans la variable z. Les coordonnées des #lignes et des colonnes se trouvent respectivement dans z$li et z$co #La première composante sera : cl1<-acp$li[,1] #pour les individus cc1<-acp$co[,1] #pour les variables #La deuxième sera : cl2<-acp$li[,2] #pour les individus cc2<-acp$co[,2] #pour les variables # Représentation du graphique du plan des individus : plot(cl1,cl2,type="n",main="Les individus",xlim=c(-7,7)) abline(h=0,v=0) text(cl1,cl2,row.names(acp$li)) # Affichage des individus dans le 2 premières composantes, le tablea $li # contenant les coordonnées des individus dans les composantes retenues s.label(acp$li, xax=1, yax=2) #La représentation graphique du plan des variables : plot(cc1,cc2,type="n", main="Les variables", xlim=c(-1,1),ylim=c(-1,1), asp=1, # rapport entre "Echelle X" et "Echelle Y" ylab= paste("Comp2",acp$eig[2]/sum(acp$eig)*100,"%"), xlab= paste("Comp1",a cp$eig[2]/sum(acp$eig)*100,"%")) abline(h=0,v=0) text(cc1,cc2,row.names(acp$co)) #Le cercle des corrélations : symbols(0,0,circles=1,inches=FALSE,add=TRUE) # Tracer les cercles de correlation où la longueur des flèches indique la # part de leur information représentée par les deux axes. L’angle entre deux # flèches représente la corrélation qui les lie : angle aigu = positive ; angle # droit = nulle ; angle obtus = négative. s.corcircle(acp$co) # Représentation à la fois les individus et des variables dans le premier plan # factoriel (deux premières composantes): scatter(acp) # Idem sans l histogramme des valeurs propres scatter(acp, posieig="none") # Idem mais sans étiquettes, les individus étant représenté par des points scatter(acp, posieig="none", clab.row=0) # Ajout des groupes au graphe existant s.class(dfxy=acp$li, fac=Iris[,"class"], add.plot=TRUE) # Nouveau graphe scatter(acp, posieig="none", clab.row=0) # Groupes en couleur s.class(dfxy=acp$li,fac=Iris[,"class"], add.plot=TRUE,col=c("red","blue","green" )) # On termine avec un nouveau layout comme ci-dessus pour reprendre les # différents graphiques en un seulplot. layout(matrix(c(1,2,3,4), 2, 2, byrow = TRUE)) barplot(acp$eig[1:acp$rank]) s.corcircle(acp$co) s.label(acp$li) #scatter(acp, posieig="none", clab.row=0) s.class(dfxy=acp$li,fac=Iris[,"class"], add.plot=FALSE,col=c("red","blue","green ")) layout(matrix(1:1, 1, 1, byrow = TRUE)) # Ajout des composantes au data frame initial Iris<-cbind(Iris,acp$li) # KMeans # KMeans avec k=3, 10 itération par kmeans, 10 kmeans essayés... # Copié de la console de RCommander km1 <- KMeans(model.matrix(~-1 + petal.length + petal.width + sepal.length + sep al.width, Iris), centers = 3, iter.max = 10, num.seeds = 10) # On ajoute l appartenance au cluster au dataset original (copié de RCommander) Iris$KMeans <- assignCluster(model.matrix(~-1 + petal.length + petal.width + sepal.length + sepal.width, Iris), Iris, km1$cluster) # Représentation des clusters dans les 2 premières composantes principales # (recopié de RCommander, qui utilise princomp) biplot(princomp(model.matrix(~-1 + petal.length + petal.width + + sepal.length + sepal.width, Iris)), xlabs = as.character(.cluster$cluster)) # Idem mais de façon "manuelle". #plot(Iris[,c("Axis1","Axis2")], col=Iris[,"KMeans"] ) #pairs(Iris[,1:4],col=Iris[,"KMeans"]) km1 <- KMeans(Iris[,1:4], centers = 3, iter.max = 10, num.seeds = 10) km1 <- kmeans(Iris[,1:4], centers = 3, iter.max = 10) plot(Iris[,c("Axis1","Axis2")], col=km1$cluster) pairs(Iris[,1:4],col=km1$cluster) # Classification hiérarchique ascendante (CAH) #Via RCommander # CAH avec lien moyen HClust.1 <- hclust(dist(model.matrix(~-1 + petal.length+petal.width+sepal.length+sepal.width, Iris)) , method= "average") plot(HClust.1, main= "Cluster Dendrogram for Solution HClust.1", xlab= "Observation Number in Data Set Iris", sub="Method=average; Distance=euclidian ") # On "coupe" l arbe en demandant 3 clusters hc.1<-cutree(HClust.1, k=3) plot(Iris[,c("Axis1","Axis2")], col=hc.1, main="Clusters pour le lien moyen." ) pairs(Iris[,1:4],col=hc.1) # CAH avec lien simple HClust.2 <- hclust(dist(model.matrix(~-1 + petal.length+petal.width+sepal.length+sepal.width, Iris)) , method= "single") plot(HClust.2, main= "Cluster Dendrogram for Solution HClust.2", xlab= "Observation Number in Data Set Iris", sub="Method=single; Distance=euclidian" ) hc.2<-cutree(HClust.2, k=3) plot(Iris[,c("Axis1","Axis2")], col=hc.2, main="Clusters pour le lien simple." ) pairs(Iris[,1:4],col=hc.2) # CAH avec lien complet HClust.3 <- hclust(dist(model.matrix(~-1 + petal.length+petal.width+sepal.length+sepal.width, Iris)) , method="complete") plot(HClust.3, main= "Cluster Dendrogram for Solution HClust.3", xlab= "Observation Number in Data Set Iris", sub="Method=complete; Distance=euclidia n") hc.3<-cutree(HClust.3, k=3) plot(Iris[,c("Axis1","Axis2")], col=hc.3, main="Clusters pour le lien complet." ) pairs(Iris[,1:4],col=hc.3) #load MCLUST library library(mclust) # Mclust on the 4th firts columns of Iris data IrisMclust <- Mclust(Iris[,1:4], G=3) #print the results Mc<-IrisMclust$classification #build a new data frame including the results of clustering #as factor plot(Iris[,c("Axis1","Axis2")], col=Mc, main="Clusters calculé pas MCLUST." ) pairs(Iris[,1:4],col=Mc) # Clustering Spectral # Compute the distance matrix distances = as.matrix(dist(Iris[1:4])) # Compute Weght matrix using normal distance W = exp(-distances^2) # Compute sum of rows and form a diagonal matrix with them. G = diag(rowSums(W)) # Compute the basic laplacian L = G - W # solve(G) gives the inverse of G # %*% is the matrix product L=solve(G)%*%L # eigen(L) compute the spectral decomposition of L eig = eigen(L) # kmeans! # joint <-the 3 last eigen vectors-> km2 = kmeans(cbind(eig$vectors[,148:150]),centers=3,iter.max=20,nstart=5) Sp<-km2$cluster plot(Iris[,c("Axis1","Axis2")], col=Sp, main="Clusters spectraux." ) pairs(Iris[,1:4],col=Sp) uploads/Ingenierie_Lourd/ acp-clustering-r.pdf

  • 30
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager