numpy Python - y应该是一个一维数组,但得到了一个形状数组

3npbholx  于 12个月前  发布在  Python
关注(0)|答案(3)|浏览(130)

让我们来看看数据:

import numpy as np
from sklearn.linear_model import LogisticRegression

x=np.linspace(0,2*np.pi,80)
x = x.reshape(-1,1)
y = np.sin(x)+np.random.normal(0,0.4,80)  
y[y<1/2] = 0  
y[y>1/2] = 1
clf=LogisticRegression(solver="saga", max_iter = 1000)

字符串
我想拟合逻辑回归,其中y是因变量,x是自变量。但是当我使用:

clf.fit(x,y)


我看到错误

'y  should be a 1d array, got an array of shape (80, 80) instead'.


我试图通过使用

y=y.reshape(-1,1)


但我最终得到了长度为6400的数组!(为什么?)
你能给予我一个帮助与执行此回归?

yc0p9oo0

yc0p9oo01#

更改操作顺序:
首先生成 xy 作为1-D数组:

x = np.linspace(0, 2*np.pi, 8)
y = np.sin(x) + np.random.normal(0, 0.4, 8)

字符串
然后(在生成 y 之后)重塑 x

x = x.reshape(-1, 1)

评论后编辑截至2022-02-20

原始代码中问题的根源在于;

  • x = np.linspace(0,2*np.pi,80)-生成一维数组。
  • x = x.reshape(-1,1)-将其重新整形为2-D数组,具有一列和所需的行。
  • y = np.sin(x) + np.random.normal(0,0.4,80)-在列数组和一维数组(这里作为单行数组处理)上操作。
  • 效果是 y2-D数组(80 * 80)。
  • 则试图整形 y 给出具有6400行的单列阵列。

正确的解决方案是,xy 最初都应该是1-D(单行)数组,我的代码就是这样做的。

plupiseo

plupiseo2#

我遇到了这个错误,并通过重塑解决它,但它没有工作

ValueError: y should be a 1d array, got an array of shape () instead.

字符串
实际上,这是由于np.argmax周围的[]括号的错误位置而发生的,下面是错误的代码和正确的代码,请注意两个代码段中np.argmax周围的[]位置
错误代码

ax[i,j].set_title("Predicted Watch : "+str(le.inverse_transform([pred_digits[prop_class[count]]])) +"\n"+"Actual Watch : "+str(le.inverse_transform(np.argmax([y_test[prop_class[count]]])).reshape(-1,1)))


正确代码

ax[i,j].set_title("Predicted Watch :"+str(le.inverse_transform([pred_digits[prop_class[count]]]))+"\n"+"Actual Watch : "+str(le.inverse_transform([np.argmax(y_test[prop_class[count]])])))

jjhzyzn0

jjhzyzn03#

'y应该是一个一维数组,得到了一个形状为(80,80)的数组'。
下面的错误解决方案
从sklearn.model_selection导入train_test_split X_train,X_test,y_train,y_test=train_test_split(X,y,test_size= 0.2,random_state =2)
训练_测试_分裂方法的一种以上保持在一个正确的方式

相关问题