Bonjour à tous,
Toujours sur mes analyses discriminantes.
Je trouve des résultats contradictoires sur le jeu de données bien connu de tous Iris. Je cherche à faire une boucle qui prend toutes les combinaisons de traits pour déterminer l'erreur minimale de la lda. Voici donc mon script :
Jusque-là tout marche bien. Regardons alors les résultats :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 test_data=iris elmt = colnames(test_data[,-5]) nbelmt = length(elmt) combelmt = lapply(seq(1:nbelmt),function(index) combinations(nbelmt,index,elmt)) ## jeu d'entrainement summary(test_data$Species) data.strata<-strata(test_data,stratanames=c("Species"),size=c(9,4,2),method="srswor") levels(test_data$Species) names(data.strata) data.training<-test_data[rownames(test_data) %in% data.strata$ID_unit,] data.test<-test_data[!rownames(test_data) %in% data.strata$ID_unit,] nrow(data.test) ## modèle liste=list() for(i in 1:nbelmt){ res_error=vector(length=250) for(j in 1:((dim(combelmt[[i]])[1]))){ print(paste("get('",combelmt[[i]][j,],"')",collapse="+",sep="")) fit.1<-lda(Species~eval(parse(text=paste("get('",combelmt[[i]][j,],"')",collapse="+",sep=""))), data= data.training) pred<-predict(fit.1,data.test)$class confusion(pred,data.test$Species) print(attributes(confusion(pred,data.test$Species))$error) res_error[j]=attributes(confusion(pred,data.test$Species))$error } liste[[i]]=res_error }
Donc pour vérifier mes résultats, je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 [1] "get('Petal.Length')" [1] 0.04444444 [1] "get('Petal.Width')" [1] 0.02962963 [1] "get('Sepal.Length')" [1] 0.5259259 [1] "get('Sepal.Width')" [1] 0.4666667 [1] "get('Petal.Length')+get('Petal.Width')" [1] 0.03703704 [1] "get('Petal.Length')+get('Sepal.Length')" [1] 0.1333333 [1] "get('Petal.Length')+get('Sepal.Width')" [1] 0.1555556 [1] "get('Petal.Width')+get('Sepal.Length')" [1] 0.1777778 [1] "get('Petal.Width')+get('Sepal.Width')" [1] 0.6962963 [1] "get('Sepal.Length')+get('Sepal.Width')" [1] 0.6962963 [1] "get('Petal.Length')+get('Petal.Width')+get('Sepal.Length')" [1] 0.0962963 [1] "get('Petal.Length')+get('Petal.Width')+get('Sepal.Width')" [1] 0.06666667 [1] "get('Petal.Length')+get('Sepal.Length')+get('Sepal.Width')" [1] 0.2740741 [1] "get('Petal.Width')+get('Sepal.Length')+get('Sepal.Width')" [1] 0.5777778 [1] "get('Petal.Length')+get('Petal.Width')+get('Sepal.Length')+get('Sepal.Width')" [1] 0.1481481
or jusqu' présent 0.14 différent 0.04
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 fit.1<-lda(Species~Sepal.Length+Sepal.Width+Petal.Length+Petal.Width, data= data.training) > pred<-predict(fit.1,data.test)$class > confusion(pred,data.test$Species) true predicted setosa versicolor virginica setosa 41 0 0 versicolor 0 42 2 virginica 0 4 46 attr(,"error") [1] 0.04444444 > print(attributes(confusion(pred,data.test$Species))$error) [1] 0.04444444
Je ne vois pas où est mon erreur ??
Avez vous une idée ?
Merci d'avance,
Charlotte
Partager