【问题标题】:ValueError: Expected 2D array, got 1D array instead. Python Function for Linear RegressionValueError:预期的二维数组,而不是一维数组。用于线性回归的 Python 函数
【发布时间】:2020-06-05 12:31:51
【问题描述】:

我不确定如何解决此错误消息。我希望有人能帮帮忙。谢谢。

import numpy as np
from sklearn import linear_model
from sklearn.model_selection import train_test_split


def desired_marketing_expenditure(x_train_marketing_expenditure, y_train_units_sold, x_test_units_sold):

    X_train, X_test, y_train, y_test = train_test_split(x_train_marketing_expenditure, y_train_units_sold, test_size=0.4, random_state=101)
    lm = linear_model.LinearRegression()
    lm.fit(X_train,y_train)
    print(lm.intercept_)
    print(lm.coef_)

    #predictions = lm.predict(x_test_units_sold)

print(desired_marketing_expenditure([300000, 200000, 400000, 300000, 100000],[60000, 50000, 90000, 80000, 30000],60000))

OUT:ValueError: 预期 2D 数组,得到 1D 数组: 数组=[400000 200000 300000]。 如果您的数据具有单个特征,则使用 array.reshape(-1, 1) 重塑您的数据,如果数据包含单个样本,则使用 array.reshape(1, -1)。

【问题讨论】:

    标签: python-3.x pandas numpy


    【解决方案1】:

    期望向量。在 numpy 中,向量是垂直数组。

    [[1], [2]] 而不是[1, 2]

    import numpy as np
    from sklearn import linear_model
    from sklearn.model_selection import train_test_split
    
    
    def desired_marketing_expenditure(x_train_marketing_expenditure, y_train_units_sold, x_test_units_sold):
    
        X_train, X_test, y_train, y_test = train_test_split(x_train_marketing_expenditure, y_train_units_sold, test_size=0.4, random_state=101)
        lm = linear_model.LinearRegression()
        lm.fit(X_train,y_train)
        print(lm.intercept_)
        print(lm.coef_)
    
        #predictions = lm.predict(x_test_units_sold)
    
    print(desired_marketing_expenditure([[300000], [200000], [400000], [300000], [100000]],[[60000], [50000], [90000], [80000], [30000]], [[60000]]))
    

    [13333.33333333]
    [[0.2]]
    None
    

    注意:您不能转置一维数组。 np.array([1, 2, 3]).Tnp.array([1, 2, 3]) 相同,因为转置需要第二个轴。您可以添加一个额外的轴并转置如下:np.array([1, 2, 3])[np.newaxis].Tnp.array([[1], [2], [3]]) 相同。

    【讨论】:

      【解决方案2】:

      尝试将您的X_train 重塑为(-1,1),如错误中所述

      import numpy as np
      from numpy import array
      from sklearn import linear_model
      from sklearn.model_selection import train_test_split
      
      
      def desired_marketing_expenditure(x_train_marketing_expenditure, y_train_units_sold, x_test_units_sold):
      
          X_train, X_test, y_train, y_test = train_test_split(x_train_marketing_expenditure, y_train_units_sold, test_size=0.4, random_state=101)
          lm = LinearRegression()
          X_train=array(X_train).reshape(-1,1)
          lm.fit(X_train,y_train)
          print(lm.intercept_)
          print(lm.coef_)
      
          #predictions = lm.predict(x_test_units_sold)
      
      print(desired_marketing_expenditure([300000, 200000, 400000, 300000, 100000],[60000, 50000, 90000, 80000, 30000],60000))
      

      输出:

      13333.333333333343
      [0.2]
      None
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-15
        • 2019-03-28
        • 2021-03-01
        • 2020-04-20
        • 2022-01-22
        • 2019-08-17
        • 1970-01-01
        相关资源
        最近更新 更多