Почему я получаю «ValueError: x и y должны иметь одинаковое первое измерение, но иметь формы» после изменения формы?

#python #numpy #matplotlib #regression

#python #numpy #matplotlib #регрессия

Вопрос:

Я очень смущен этим. Я пытаюсь выполнить линейную регрессию для набора данных, и я получил ошибку значения в начале программы из-за того, что мой набор данных должен быть 2D вместо 1D, поэтому я изменил форму каждой части моего набора данных следующим образом:

 x1_train = np.array(x1_train.reshape(-1, 1))
y_train = np.array(y_train.reshape(-1, 1))
x1_test = np.array(x1_test.reshape(-1, 1))
y_test = np.array(y_test.reshape(-1, 1))
x1_pred = np.array(x1_pred.reshape(-1, 1))
y_pred = np.array(y_pred.reshape(-1, 1))
 

Теперь, позже, когда я пытаюсь построить учебный набор данных, я получаю другую ошибку значения:

 ---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-91-6b2e11318dc3> in <module>
      1 # Visualizing our results
      2 plt.scatter(x1_train, y_train, color = 'green')
----> 3 plt.plot(x1_train, y_pred, color = 'red')
      4 plt.title('Happiness Index Score vs. GDP Per Capita(Training Dataset)')
      5 plt.xlabel('GDP Per Capita')

~anaconda3libsite-packagesmatplotlibpyplot.py in plot(scalex, scaley, data, *args, **kwargs)
   2759 @docstring.copy(Axes.plot)
   2760 def plot(*args, scalex=True, scaley=True, data=None, **kwargs):
-> 2761     return gca().plot(
   2762         *args, scalex=scalex, scaley=scaley, **({"data": data} if data
   2763         is not None else {}), **kwargs)

~anaconda3libsite-packagesmatplotlibaxes_axes.py in plot(self, scalex, scaley, data, *args, **kwargs)
   1645         """
   1646         kwargs = cbook.normalize_kwargs(kwargs, mlines.Line2D)
-> 1647         lines = [*self._get_lines(*args, data=data, **kwargs)]
   1648         for line in lines:
   1649             self.add_line(line)

~anaconda3libsite-packagesmatplotlibaxes_base.py in __call__(self, *args, **kwargs)
    214                 this  = args[0],
    215                 args = args[1:]
--> 216             yield from self._plot_args(this, kwargs)
    217 
    218     def get_next_color(self):

~anaconda3libsite-packagesmatplotlibaxes_base.py in _plot_args(self, tup, kwargs)
    340 
    341         if x.shape[0] != y.shape[0]:
--> 342             raise ValueError(f"x and y must have same first dimension, but "
    343                              f"have shapes {x.shape} and {y.shape}")
    344         if x.ndim > 2 or y.ndim > 2:

ValueError: x and y must have same first dimension, but have shapes (104, 1) and (52, 1)

 

Вот код, который выдает это сообщение об ошибке / трассировку:

 plt.scatter(x1_train, y_train, color = 'green')
plt.plot(x1_train, y_pred, color = 'red')
plt.title('Happiness Index Score vs. GDP Per Capita(Training Dataset)')
plt.xlabel('GDP Per Capita')
plt.ylabel('Happiness Index Score')
plt.show()
 

Кто-нибудь понимает, что здесь происходит?

Комментарии:

1. как насчет использования .reshape(-1)? работает ли это?

2. Это не сработало. Я также попробовал .reshape(1, -1) и получил эту ошибку: ` ValueError: matmul: входной операнд 1 имеет несоответствие в его основном измерении 0, с сигнатурой gufunc (n?, k), (k, m?)-> (n?, m?) (размер 104отличается от 52) `

3. Попробуйте x_train.reshape((-1,2)) и y_train.reshape((-1,1))

4. Получил еще одну ошибку. ValueError: Found input variables with inconsistent numbers of samples: [52, 104]

5. Можете ли вы показать «короткую версию» x1_train и y_train (перед изменением формы)?