Bonjour à tous,

Je travaille actuellement sur un projet et suite à l'analyse exploratoire de mes données, j'ai proposé plusieurs modèles. Je cherche à savoir quel est le meilleur, assez classiquement.

Pour cela, je cherche à couper l’échantillon d’apprentissage en deux jeux de données train_train et train_test et à mesurer la pertinence des modèles en compétition par cross validation à l’aide du critère RMSLE, comme demandé dans le devoir. Afin de m’assurer de la stabilité des résultats , je cherche à réaliser 10 cross- validation. Le tout pour ces deux modèles, pour voir quel est le plus performant.

Vous trouverez ci-dessous le code que j'implémente pour cela (exemple sur un modèle en particulier), je cherche ainsi à :
> Je mélange de manière aléatoire la table des observations et je conserve uniquement une sous table contenant 1/9e des lignes
> Je crée à partir de cette table une table d'apprentissage et une table de test (train_train et train_test)
> On fait la régression sur le set d'apprentissage et stocke les coefficients dans la matrice résultats_reg
> Je vérifie les performances prédictives sur le jeu test et stocke les résultats RMSE dans perf_pred

Malheureusement, R m'annonce : "Erreur : unexpected input in:
" perf_pred[1,i]=mean((log(p+1)-log(train_test$len+1))^2)^0.5"

Je ne comprends pas d'où vient le problème dans mon code. Pouvez-vous svp m'aider à comprendre comment réaliser cette cross validation et corriger mon code ?

Merci pour votre aide !

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
reg=survreg(Surv(len, censure)~CALL_TYPE+wday+hour+d_st+d_end+distance+angle_diff+hour*CALL_TYPE+wday*CALL_TYPE,data=train,dist="exponential")
 
results_reg = matrix(0,length(reg$coefficients),1)
results_pred = matrix(0,n,1)
perf_pred = matrix(0,1,10)
 
for (i in 1:10){
  k = sample(n,0.9*n) 
  train_train = train[k,] 
  train_test = train[-k,]
  reg=survreg(Surv(len, censure)~CALL_TYPE+wday+hour+d_st+d_end+distance+angle_diff+hour*CALL_TYPE+wday*CALL_TYPE, data=train_train,dist="exponential")
  results_reg=cbind(results_reg,reg$coefficients)
  p=predict(reg, new=train_test,type="quantile", p=0.5) 
  perf_pred[1,i]=mean((log(p+1)-log(train_test$len+1))^2)^0.5}
 
results_reg = results_reg[,-1]
results_pred = results_pred[,-1]
perf_pred