Python - y 应该是一个一维数组,而不是一个形状数组

标签 python numpy scikit-learn

让我们考虑数据:

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 的数组! (怎么会?)

您能帮我执行此回归吗?

最佳答案

改变你的操作顺序:

首先将 xy 生成为 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 行的单列数组。

正确的解决方案是 xy 最初应该是 1-D (单行)数组,我的代码就是这样做的。 然后两个数组都可以重新整形。

关于Python - y 应该是一个一维数组,而不是一个形状数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65167879/

相关文章:

python - numpy 奇特的广播用于特殊情况谜语

python - 将 pandas 中两个时间列之间的差异计算为不包括周末的新列,此时列可能包含 NaT

python - 高召回率的最佳 SVM 参数

python - 使用 Lambda-python 对 DynamoDB 表的 sed 识别响应

python - 需要等待同步函数中的函数

python - 对 tensorflow 图的部分进行基准测试的正确方法是什么?

python - Numpy 重复一行或一列

python - ValueError : matmul: Input operand 1 has a mismatch in its core dimension 0,,带有 gufunc 签名 (n?,k),(k,m?)->(n?,m?)(大小 13 与 1 不同)

python - 将 Numpy 数组映射到字符列表

python - 如何在保持文本结构(标题/副标题/正文)的同时为 PDF 文本提取执行 OCR