Bonjour, c'est mon premier message sur ce forum et j'ai besoin d'aide en R s'il vous plaît
J'ai un projet de machine Learning à rendre et ça fait 6h que j'essaie de débuguer mes if mais je n'y arrive pas
je vous montre mon code :
# Partie II : Super learning pour le choix des hyper paramètres k et d ( ou plus précisement du choix de la Matrice de poids des hyper paramètres k et d )
On definit la fonction de perte de mauvaise classification.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 ```{r} perte <- function(u,y){ if(u==y) return(1) else return(0) } ```
On definit un kNN un peu special où l'on ne s'interesse qu'à une seule des 7 dimension de X pour lui atribuer une étiquette Y ( dans un premier temps dans [0;1]).
On choisit un seuillage basique car nous n'avons pas de preference d'erreur dans les donnés du problème, il n'est pas plus grave de classer un 1 en 0 que de classer un 0 en 1 donc on choisit un seuil pile au milieu : 0.5.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 ```{r} algo<-function(k,d,A,x){ c<-0 # on initialise le compteur c à 0. for (i in 1:k){ # on cherche dans la boucle les k plus b<-which.min(abs(x[d]-A[,d])) # proches voisins pour la coordonnée d c<-c+1/k*A[b,8] # avec d entre 1 et 7. enfin, on fait la A<-A[-b,] # somme des étiquettes divisé par k. } return(c) } ```
calcul de la taille de la matrice de poids (que l'on notera SL)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 ```{r} seuil<-function(c){ if(c<0.5){ return(0) }else{ return(1) } } ```
```{r}
200*7
```
preparation de l'algorithme :
Algorithme de Super-Learning fait maison :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ```{r} risque<-(rep(0,25)) # Initialisation du risque pour l'algo suivant. SL<-matrix(rep(0, 1400), 200, 7) # De même pour la matrice des poids. ```
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 ```{r} for (k in 1:200){ for (d in 1:7){ # Pour tout d et pour tout k on fait la grande boucle for (i in 1:25){ test<-dat[50*(i-1)+1:50*i,] # on retire le i-ème volet et on le nomme train<-dat[-(50*(i-1)+1:50*i),] # test, tandis que on appelle le reste for (j in 1: 50){ # train. ( entrainement en anglais ) testy<-test[j,8] testx<-test[j,-8] # on separe les X et les Y de test. c<-algo(k,d,train,testx) # on applique l'algorithme entrainé (on c<-seuil(c) # l'entraine en même temps à vrai dire) risque[i]<-risque[i]+1/50*perte(testy,c) # calcul du risque associé à } # ce volet } SL[k,d]<-1/25*sum(risque) # Calcul du poids (avant normalisation) associé } # k et d } ```
le truc c est que quand j'utilise seuil ou perte dans un contexte normal ça marche très bien mais des que c'est dans les boucles de l'algorithme ça veut pas... J'ai essayé de bidouiller mais tantôt ça me sort '' Error in if (c < 0.5) { : l'argument est de longueur nulle '' comme c'est le cas actuellement tantôt c'est plutot " Error in if (u == y) return(1) else return(0) :
l'argument est de longueur nulle " ou encore " Erreur boucle if : "la condition a une longueur > 1 "
je suis dépité...
Partager