web-dev-qa-db-fra.com

ValueError: x et y doivent avoir la même taille

import numpy as np
import pandas as pd
import matplotlib.pyplot as pt

data1 = pd.read_csv('stage1_labels.csv')

X = data1.iloc[:, :-1].values
y = data1.iloc[:, 1].values

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
label_X = LabelEncoder()
X[:,0] = label_X.fit_transform(X[:,0])
encoder = OneHotEncoder(categorical_features = [0])
X = encoder.fit_transform(X).toarray()

from sklearn.cross_validation import train_test_split
X_train, X_test, y_train,y_test = train_test_split(X, y, test_size = 0.4, random_state = 0)

#fitting Simple Regression to training set

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)

#predecting the test set results
y_pred = regressor.predict(X_test)

#Visualization of the training set results
pt.scatter(X_train, y_train, color = 'red')
pt.plot(X_train, regressor.predict(X_train), color = 'green')
pt.title('salary vs yearExp (Training set)')
pt.xlabel('years of experience')
pt.ylabel('salary')
pt.show()

J'ai besoin d'aide pour comprendre l'erreur lors de l'exécution du code ci-dessus. Voici l'erreur:

"augmenter ValueError (" x et y doivent avoir la même taille ")"

J'ai un fichier .csv avec 1398 lignes et 2 colonnes. J'ai pris 40% comme ensemble y_test, comme cela est visible dans le code ci-dessus.

Veuillez aider

Cordialement, Amitesh

6
user3521180

Imprimer la forme X_train. Que vois-tu? Je parierais X_train est 2d (matrice avec une seule colonne), tandis que y_train 1d (vecteur). À son tour, vous obtenez différentes tailles.

Je pense qu'en utilisant X_train[:,0] pour le traçage (d'où provient l'erreur) devrait résoudre le problème

16
Lukasz Tracewski

Trancher avec [:, :-1] Vous donnera un tableau bidimensionnel (comprenant toutes les lignes et toutes les colonnes à l'exclusion de la dernière colonne).

Le découpage avec [:, 1] Vous donnera un tableau 1-dimensionnel (incluant toutes les lignes de la deuxième colonne). Pour rendre ce tableau également bidimensionnel, utilisez [:, 1:2] Ou [:, 1].reshape(-1, 1) ou [:, 1][:, None] Au lieu de [:, 1]. Cela rendra x et y comparables.


Une alternative à rendre les deux tableaux bidimensionnels est de les rendre tous les deux unidimensionnels. Pour cela, on ferait [:, 0] (Au lieu de [:, :1]) Pour sélectionner la première colonne et [:, 1] Pour sélectionner la deuxième colonne.

2
yogabonito

Dans mon cas, le problème était que la taille de test_size était différente de la plage du nuage de points. La plage doit être la même que la taille de test (40% dans votre code) de l'observation totale. Ici, vous devez définir la plage de votre nuage de points comme 40% du total des observations que vous traitez dans votre modèle.

0
PdF