【问题标题】:sklearn - model.coef_ returns NxN matrixsklearn - model.coef_ 返回 NxN 矩阵
【发布时间】:2019-02-05 02:01:25
【问题描述】:
md    = dev_df['MD'].values.astype('float').reshape(1,-1)
tvdss = dev_df['TVDSS'].values.astype('float').reshape(1,-1)

model = linear_model.LinearRegression()
model.fit(md, tvdss)

f = model.predict(X)[0]

>>> model.coef_.shape
(78, 78)

>>> model.coef_
array([[0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       ...,
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.]])

>>> type(md)
numpy.ndarray

>>> type(tvdss)
numpy.ndarray

我有上面的代码,我真的不明白为什么model.coef_ 返回一个矩阵,而不是单个值。我希望它是像 0.313 这样的单个值,但它不是。

【问题讨论】:

  • mdtvdss的形状是什么?
  • @Tomothy32 两者 (1, 78)

标签: python scikit-learn linear-regression


【解决方案1】:

根据文档:

coef_ : 数组、形状 (n_features, ) 或 (n_targets, n_features)

线性回归问题的估计系数。如果在拟合期间传递了多个目标(y 2D),则这是一个 2D 数组 形状 (n_targets, n_features),而如果只通过一个目标, 这是一个长度为 n_features 的一维数组。

您传递了多个目标,因此得到了一个形状为 (n_targets, n_features) 的二维数组。

【讨论】:

  • 我不明白我通过了多个目标是什么意思。我所做的只是为model.fit(md, tvdss) 输入X 和Y。我在哪里通过了多个目标?
【解决方案2】:

试试:

tvdss = dev_df['TVDSS'].values.astype('float')

看看会发生什么。

根据documentation

y : 类数组,形状 (n_samples,)

简单来说,y 必须是一维向量,而您传递的是一维列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多