让我们考虑数据:
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'.
我试图通过使用来 reshape 数据
y=y.reshape(-1,1)
但我最终得到了长度为 6400 的数组! (怎么会?)
您能帮我执行此回归吗?
最佳答案
改变你的操作顺序:
首先将 x 和 y 生成为 1-D 数组:
x = np.linspace(0, 2*np.pi, 8)
y = np.sin(x) + np.random.normal(0, 0.4, 8)
然后(在生成y之后) reshape x:
x = x.reshape(-1, 1)
根据 2022 年 2 月 20 日的评论进行编辑
原代码中问题的根源在于;
x = np.linspace(0,2*np.pi,80)
- 生成一维数组。x = x.reshape(-1,1)
- 将其 reshape 为 2-D 数组,其中包含一列和 尽可能多的行。y = np.sin(x) + np.random.normal(0,0.4,80)
- 对列数组和 一维数组(此处视为单行数组)。- 效果是y是一个2-D数组(80 * 80)。
- 然后尝试 reshape y 给出一个包含 6400 行的单列数组。
正确的解决方案是 x 和 y 最初应该是 1-D (单行)数组,我的代码就是这样做的。 然后两个数组都可以重新整形。
关于Python - y 应该是一个一维数组,而不是一个形状数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65167879/