![](/img/trans.png)
[英]ValueError: x and y must have same first dimension, but have shapes (1, 2) and (2,)
[英]ValueError: x and y must have same first dimension, but have shapes (4200,) and (16800, 1)
我已經使用SCIKIT-LEARN創建了SVR模型,我試圖繪制數據,但是由於某些原因,我收到了錯誤消息:
ValueError:x和y必須具有相同的第一尺寸,但形狀為(4200,)和(16800,1)
我將數據分為訓練和測試數據,訓練模型並做出預測。 我的代碼是:
X_feature = wind_speed
X_feature = X_feature.reshape(-1, 1)## Reshaping array to be 1D from 2D
y_label = Power
y_label = y_label.reshape(-1,1)
timeseries_split = TimeSeriesSplit(n_splits=3) ## Splitting training testing data into 3 splits
for train_index, test_index in timeseries_split.split(X_feature):## for loop to obtain print the training and splitting of the data
print("Training data:",train_index, "Testing data test:", test_index)#
X_train, X_test = X_feature[train_index], X_feature[test_index]
y_train, y_test = y_label[train_index], y_label [test_index]
timeseries_split = TimeSeriesSplit(n_splits=3) ## Splitting training testing data into 3 splits
scaler =pre.MinMaxScaler(feature_range=(0,1)).fit(X_train)## Data is being preprocessed then standard deviation
scaled_wind_speed_train = scaler.transform(X_train)## Wind speed training data is being scaled and then transformed
scaled_wind_speed_test = scaler.transform(X_test)## Wind speed test data is being scaled and then transformed
SVR_model = svm.SVR(kernel='rbf',C=100,gamma=.001).fit(scaled_wind_speed_train,y_train)
y_prediction = SVR_model.predict(scaled_wind_speed_test)
SVR_model.score(scaled_wind_speed_test,y_test)
rmse=numpy.sqrt(mean_squared_error(y_label,y_prediction))
print("RMSE:",rmse)
fig, bx = plt.subplots(figsize=(19,8))
bx.plot(y_prediction, X_feature,'bs')
fig.suptitle('Wind Power Prediction v Wind Speed', fontsize=20)
plt.xlabel('Wind Power Data')
plt.ylabel('Predicted Power')
plt.xticks(rotation=30)
plt.show()
fig, bx = plt.subplots(figsize=(19,8))
bx.plot( y_prediction, y_label)
fig.suptitle('Wind Power Prediction v Measured Wind Power ', fontsize=20)
plt.xlabel('Wind Power Data')
plt.ylabel('Predicted Power')
fig, bx = plt.subplots(figsize=(19,8))
bx.plot(y_prediction)
fig.suptitle('Wind Power Prediction v Measured Wind Power ', fontsize=20)
plt.xlabel('Wind Power Data')
plt.ylabel('Predicted Power')
我認為當我嘗試在行中獲取rmse時,正在生成此代碼:
rmse=numpy.sqrt(mean_squared_error(y_label,y_prediction))
當我注釋掉該行並嘗試繪制數據時,也會發生此錯誤。
我的回溯錯誤消息是:
ValueError Traceback (most recent call last)
<ipython-input-57-ed11a9ca7fd8> in <module>()
79
80 fig, bx = plt.subplots(figsize=(19,8))
---> 81 bx.plot( y_prediction, y_label)
82 fig.suptitle('Wind Power Prediction v Measured Wind Power ', fontsize=20)
83 plt.xlabel('Wind Power Data')
~/anaconda3_501/lib/python3.6/site-packages/matplotlib/__init__.py in inner(ax, *args, **kwargs)
1715 warnings.warn(msg % (label_namer, func.__name__),
1716 RuntimeWarning, stacklevel=2)
-> 1717 return func(ax, *args, **kwargs)
1718 pre_doc = inner.__doc__
1719 if pre_doc is None:
~/anaconda3_501/lib/python3.6/site-packages/matplotlib/axes/_axes.py in plot(self, *args, **kwargs)
1370 kwargs = cbook.normalize_kwargs(kwargs, _alias_map)
1371
-> 1372 for line in self._get_lines(*args, **kwargs):
1373 self.add_line(line)
1374 lines.append(line)
~/anaconda3_501/lib/python3.6/site-packages/matplotlib/axes/_base.py in _grab_next_args(self, *args, **kwargs)
402 this += args[0],
403 args = args[1:]
--> 404 for seg in self._plot_args(this, kwargs):
405 yield seg
406
~/anaconda3_501/lib/python3.6/site-packages/matplotlib/axes/_base.py in _plot_args(self, tup, kwargs)
382 x, y = index_of(tup[-1])
383
--> 384 x, y = self._xy_from_xy(x, y)
385
386 if self.command == 'plot':
~/anaconda3_501/lib/python3.6/site-packages/matplotlib/axes/_base.py in _xy_from_xy(self, x, y)
241 if x.shape[0] != y.shape[0]:
242 raise ValueError("x and y must have same first dimension, but "
--> 243 "have shapes {} and {}".format(x.shape, y.shape))
244 if x.ndim > 2 or y.ndim > 2:
245 raise ValueError("x and y can be no greater than 2-D, but have "
ValueError: x and y must have same first dimension, but have shapes (4200,) and (16800, 1)
我認為您已經對mean_squared_error的mean_squared_error
,應該是
rmse=numpy.sqrt(mean_squared_error(y_test,y_prediction))
更新 :根據最新的錯誤,請嘗試此
fig, bx = plt.subplots(figsize=(19,8))
bx.plot(y_prediction, scaled_wind_speed_test,'bs')
fig.suptitle('Wind Power Prediction v Wind Speed', fontsize=20)
plt.xlabel('Wind Power Data')
plt.ylabel('Predicted Power')
plt.xticks(rotation=30)
plt.show()
更新2,以防萬一您在另一個情節上遇到錯誤,請嘗試此操作
fig, bx = plt.subplots(figsize=(19,8))
bx.plot( y_prediction, y_test)
fig.suptitle('Wind Power Prediction v Measured Wind Power ', fontsize=20)
plt.xlabel('Wind Power Data')
plt.ylabel('Predicted Power')
Numpy的函數mean_squared_error
期望兩個大小相同的數組。 您得到的錯誤意味着這兩個大小不相同。
您可以通過以下方式檢查數組大小
print(array_1.shape)
print(array_2.shape)
如果您得到的輸出是
output:
> (4200,)
> (4200, 1)
你可以通過做來解決
new_array_2 = array_2.transpose()[0]
接着
mean_squared_error(array_1, new_array_2)
如果有兩個輸入參數,無論它們是什么,它們都會為您提供以下形狀
print(array_1.shape)
print(array_2.shape)
output:
> (4200,)
> (16800, 1)
嘗試
new_array_1 = scalar.transform(array_1)
要么
new_array_2 = scalar.transform(array_2)
直到獲得具有相同編號(無論是16800還是4200)的陣列。一旦兩個具有相同的大小,但是一個或兩個仍然具有額外的尺寸,
然后再做一次
new_new_array_1 = scalar.transform(new_array_1)[0]
並將它們提供給mean_squared_error
,例如
mean_squared_error(new_new_array_1, new_array_2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.