web-dev-qa-db-fra.com

sklearn: Tableaux trouvés avec un nombre incohérent d'échantillons lors de l'appel de LinearRegression.fit ()

J'essaie juste de faire une régression linéaire simple mais cette erreur me laisse perplexe car:

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, 5].values, df2.iloc[1:1000, 2].values)

qui produit:

ValueError: Found arrays with inconsistent numbers of samples: [  1 999]

Ces sélections doivent avoir les mêmes dimensions et doivent être des tableaux numpy, alors que me manque-t-il? 

88
sunny

Il semble que sklearn nécessite la forme de données de (numéro de ligne, numéro de colonne). Si votre forme de données est (numéro de ligne), comme (999, ), cela ne fonctionnera pas. En utilisant numpy.reshape(), vous devriez passer à (999, 1), par exemple. en utilisant

data.reshape((999,1))

Dans mon cas, cela a fonctionné avec ça. 

108
Yul

On dirait que vous utilisez pandas dataframe (du nom df2).

Vous pouvez également faire ce qui suit:

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, 5].to_frame(), df2.iloc[1:1000, 2].to_frame())

NOTE: J'ai supprimé les "valeurs" car cela convertit la série pandas en numpy.ndarray et numpy.ndarray n'a pas d'attribut to_frame ().

20
user24981

Vu dans le cours fondamental d’apprentissage en profondeur Udacity:

df = pd.read_csv('my.csv')
...
regr = LinearRegression()
regr.fit(df[['column x']], df[['column y']])
7
xilef

Je pense que l'argument "X" de regr.fit doit être une matrice, donc ce qui suit devrait fonctionner.

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, [5]].values, df2.iloc[1:1000, 2].values)
5
Anish

J'ai rencontré cette erreur car j'ai converti mes données en np.array. J'ai résolu le problème en convertissant mes données en un np.matrix et en prenant la transposition.

ValueError: regr.fit(np.array(x_list), np.array(y_list))

Correct: regr.fit(np.transpose(np.matrix(x_list)), np.transpose(np.matrix(y_list)))

4
Josh Grinberg
expects X(feature matrix)

Essayez de mettre vos fonctionnalités dans un tuple comme ceci:

features = ['TV', 'Radio', 'Newspaper'] 
 X = data [features]
2
Yuanxu Xu

Comme il a été mentionné ci-dessus, l'argument X doit être une matrice ou un tableau numpy de dimensions connues. Donc, vous pourriez probablement utiliser ceci:

df2.iloc[1:1000, 5:some_last_index].values

Ainsi, votre cadre de données sera converti en un tableau avec des dimensions connues et vous n'aurez pas besoin de le remodeler.

0
Andy J.

J'ai fait face à un problème similaire. Le problème dans mon cas était, le nombre de lignes dans X n'était pas égal au nombre de lignes dans y.

en d'autres termes, le nombre d'entrées dans les colonnes de caractéristiques n'était pas égal au nombre d'entrées dans la variable cible, car j'avais supprimé certaines lignes des colonnes de fonctionnalités.

0
Shivam Agrawal

Pour analyser deux tableaux (array1 et array2), ils doivent répondre aux deux exigences suivantes:

1) Ils doivent être un numpy.ndarray

Vérifier avec

type(array1)
# and
type(array2)

Si ce n'est pas le cas pour au moins l'un d'entre eux effectue

array1 = numpy.ndarray(array1)
# or
array2 = numpy.ndarray(array2)

2) Les dimensions doivent être les suivantes:

array1.shape #shall give (N, 1)
array2.shape #shall give (N,)

N est le nombre d'éléments contenus dans le tableau. Pour fournir à array1 le bon nombre d'axes, procédez comme suit:

array1 = array1[:, numpy.newaxis]
0
Richard