ValueError: Ожидаемый 2D-массив, вместо него получен 1D-массив. Python Функция для линейной регрессии - PullRequest
2 голосов
/ 21 февраля 2020

Я не уверен, как решить это сообщение об ошибке. Я надеюсь, что кто-то может помочь. Спасибо.

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: Ожидаемый двумерный массив, вместо него получен одномерный массив: array = [400000 200000 300000]. Измените ваши данные, используя array.reshape (-1, 1), если ваши данные имеют одну функцию, или array.reshape (1, -1), если он содержит один образец.

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

попытайтесь изменить форму 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
0 голосов
/ 21 февраля 2020

Ожидает векторов. В 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]).T совпадает с np.array([1, 2, 3]), потому что для транспонирования нужна вторая ось. Вы можете добавить дополнительную ось и транспонировать следующим образом: np.array([1, 2, 3])[np.newaxis].T совпадает с np.array([[1], [2], [3]]).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...