【问题标题】:sklearn: Found arrays with inconsistent numbers of samples when calling LinearRegression.fit()sklearn:调用 LinearRegression.fit() 时发现样本数量不一致的数组
【发布时间】:2015-08-29 01:15:32
【问题描述】:

只是试图做一个简单的线性回归,但我对这个错误感到困惑:

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, 5].values, df2.iloc[1:1000, 2].values)

产生:

ValueError: Found arrays with inconsistent numbers of samples: [  1 999]

这些选择必须具有相同的维度,并且它们应该是 numpy 数组,所以我缺少什么?

【问题讨论】:

  • 我做了 reshape(-1,1) 并且成功了

标签: scikit-learn


【解决方案1】:

在火车测试拆分期间,您可能犯了一个错误

x_train,x_test,y_train,y_test=sklearn.model_selection.train_test_split(X,Y,test_size)

上面的代码是正确的

你可能做了下面的错误

x_train,y_train,x_test,y_test=sklearn.model_selection.train_test_split(X,Y,test_size)

【讨论】:

    【解决方案2】:

    看起来sklearn需要(​​行号,列号)的数据形状。 如果您的数据形状是(行号,),例如(999, ),则它不起作用。 通过使用numpy.reshape(),您应该将数组的形状更改为(999, 1),例如使用

    data=data.reshape((999,1))
    

    就我而言,它适用于此。

    【讨论】:

    • 我的数据形状是 (10L,),如何将其转换为 (10L,1)。当我使用 data=data.reshape(len(data),1) 时,生成的形状是 (10L,1L) 而不是 (10L,1)
    • @user3841581 请参考这个post
    • @Boern 感谢您的评论。我还发现 X_train 的大小应该是 (N,1) 但 y_train 的大小应该是 (N,) 而不是 (N,1),否则它不起作用,至少对我来说不起作用。
    • data.reshape(...) 如果数据是 Series 对象,可能会显示贬损警告。使用 data.values.reshape(...)
    • 数据 = data.reshape(-1,1)
    【解决方案3】:

    我遇到了类似的问题。我的问题是,X 中的行数不等于 y 中的行数。

    即特征列中的条目数不等于目标变量中的整体数,因为我从特征列中删除了一些行。

    【讨论】:

      【解决方案4】:

      见于 Udacity 深度学习基础课程:

      df = pd.read_csv('my.csv')
      ...
      regr = LinearRegression()
      regr.fit(df[['column x']], df[['column y']])
      

      【讨论】:

      • 谢谢!这真的是最简单最容易理解的!
      • 实际上,Y 参数应为 (length, ) 形状。谢谢!
      【解决方案5】:

      如上所述,X 参数必须是矩阵或具有已知维度的 numpy 数组。所以你可能会使用这个:

      df2.iloc[1:1000, 5:some_last_index].values
      

      因此您的数据框将被转换为具有已知维度的数组,您无需对其进行整形

      【讨论】:

        【解决方案6】:

        分析两个数组(array1和array2)需要满足以下两个要求:

        1) 它们需要是一个 numpy.ndarray

        检查

        type(array1)
        # and
        type(array2)
        

        如果至少其中一个不是这种情况,请执行

        array1 = numpy.ndarray(array1)
        # or
        array2 = numpy.ndarray(array2)
        

        2) 尺寸需要如下:

        array1.shape #shall give (N, 1)
        array2.shape #shall give (N,)
        

        N 是数组中的项目数。 要为 array1 提供正确数量的轴,请执行:

        array1 = array1[:, numpy.newaxis]
        

        【讨论】:

          【解决方案7】:

          我遇到此错误是因为我将数据转换为 np.array。我通过将我的数据转换为 np.matrix 并进行转置来解决了这个问题。

          值错误: regr.fit(np.array(x_list), np.array(y_list))

          正确: regr.fit(np.transpose(np.matrix(x_list)), np.transpose(np.matrix(y_list)))

          【讨论】:

            【解决方案8】:

            看起来您正在使用 pandas 数据框(来自名称 df2)。

            您还可以执行以下操作:

            regr = LinearRegression()
            regr.fit(df2.iloc[1:1000, 5].to_frame(), df2.iloc[1:1000, 2].to_frame())
            

            注意:我已删除“值”,因为它将熊猫系列转换为 numpy.ndarray 并且 numpy.ndarray 没有属性 to_frame()。

            【讨论】:

              【解决方案9】:
              expects X(feature matrix)
              

              尝试将您的特征放在这样的元组中:

              功能 = ['电视'、'广播'、'报纸']
              X = 数据[特征]

              【讨论】:

                【解决方案10】:

                我认为 regr.fit 的“X”参数需要是一个矩阵,所以下面应该可以工作。

                regr = LinearRegression()
                regr.fit(df2.iloc[1:1000, [5]].values, df2.iloc[1:1000, 2].values)
                

                【讨论】:

                  猜你喜欢
                  • 2017-10-24
                  • 1970-01-01
                  • 2023-03-15
                  • 1970-01-01
                  • 2018-01-23
                  • 1970-01-01
                  • 2016-05-16
                  • 2016-05-17
                  • 2019-04-06
                  相关资源
                  最近更新 更多