ValueError: Length of values (1) does not match length of index (23) à la création d'une série

Bonjour,

Je fais appel à nouveau à votre précieuse aide pour trouver une solution fasse à une erreur.

l’erreur se produits à la création d’une série avec le code :

print(pd.Series(model_SVR.coef_, index = X.columns)) # Print coefficients

et renvoie l’erreur :

ValueError: Length of values (1) does not match length of index (23)

Ce qui est étrange c’est que ce même code fonctionne pour du modèle lasso, mais pas pour le modèle SVR

si je controle les dimensions avec quelques lignes de codes :

display("nombre colonnes :" ,X.columns.value_counts().sum())
display("liste des colonnes : ", X.columns.value_counts())
display("dimensions de X : ", X.shape)
display("Dimension du coef : ", model_SVR.coef_.shape)

j’obtiens en résultat :

‹ nombre colonnes : ›
23
'liste des colonnes : ’
Région 1
Nucléaire (MW) 1
Eolien terrestre 1
Déstockage batterie 1
Stockage batterie 1
Ech. physiques (MW) 1
Bioénergies (MW) 1
Pompage (MW) 1
Hydraulique (MW) 1
Solaire (MW) 1
Eolien (MW) 1
Thermique (MW) 1
Année 1
Consommation (MW) 1
Nom du jour 1
Température (°C) 1
Précipitations dans les 24 dernières heures 1
Pression station 1
Humidité 1
Vitesse du vent moyen 10 mn 1
jour 1
Mois 1
Eolien offshore 1
dtype: int64
'dimensions de X : ’
(17532, 23)
'Dimension du coef : ’
(1, 23)

Auriez vous une solution? l’ajout d’un bout de code que j’ignore ?

Merci d’avance pour vos réponses.

Bonjour Cédric,

La dimension renvoyée par model_SVR.coef_ pour un SVR est (1, 23) il s’agit en fait d’un array à deux dimensions de taille (1 * 23) (1 ligne * 23 colonnes). Pour accéder à l’ array de dimension (23, ) , il faudrait utiliser model_SVR.coef_[0].

En espérant que cela réponde à votre question.

Bonne journée

1 Like

Bonjour Maelys,

Merci je vais tester ça, et je tiens au courant du résultat. si c’est ok je partagerai le code et passerai en résolu le topique.

aussitot dit aussitot fait, et ça marche , j’en était sûr qu’il y avait une astuce simple.
ça marche parfaitement comme ça :

coeffs = list(model_SVR.coef_[0])
# on ajoute une valeur  intercept
coeffs.insert(0, model_SVR.intercept_)

feats = list(X.columns)

# on rajoute la ligne ci dessous pour ne pas avoir en erreur ValueError: Shape of passed values is (16, 1), indices imply (15, 1)
# afin d'avoir 2 df de même dimension
feats.insert(0, 'intercept')

pd.DataFrame({'valeur estimée': coeffs}, index=feats)