0

我真的很困惑为什么在将数据拟合到 SGDRegressor 之前需要使用 ravel()。

这是代码:

from sklearn.linear_model import SGDRegressor
sgd_reg = SGDRegressor(max_iter = 1000, tol = 1e-3, penalty = None, eta0= 0.1)
sgd_reg.fit(X, y.ravel())

这些是 X 和 y 的形状:

>>> X.shape
(100, 1)

>>> y.shape
(100, 1)

>>> y.ravel().shape
(100,)

4

1 回答 1

3

可以将y其视为二维矩阵,尽管它只有一列。但该fit方法预计y是一个平面数组。这就是为什么您必须使用ravel, 将 2d 转换为 1d 数组的原因。

在机器学习论文和教科书中很常见写成y矩阵,因为它可以简化矩阵相乘时的符号。但是你也可以把它写成一个简单的一维向量。你可以说它没有区别,因为在任何一种情况下它实际上只有一个维度,但在数学上和 Python 实现中,矩阵和向量是两个不同的对象。

于 2021-06-03T20:46:49.510 回答