Почему предупреждение об устаревании и ValueError отображаются, даже если формы и длина входных массивов одинаковы? - PullRequest
0 голосов
/ 07 июня 2019

Я делю свои данные, используя train_test_split. У меня есть 2 функции, а именно «мощность» и «цена» автомобиля, каждый из которых содержит 199 элементов. Поэтому я опробовал следующий код:

    import pandas as pd
    from sklearn.linear_model import LinearRegression
    from sklearn.model_selection import train_test_split

    lm=LinearRegression()

    x_train,x_test,y_train,y_test =train_test_split(df['horsepower'],df['price'],test_size=0.3,random_state=0)

    model = lm.fit(x_train, y_train)
    predictions = lm.predict(x_test)

    #Now, just to recheck:
    print(x_train.shape == y_train.shape)
    >>>True

    #And
    len(x_train)
    >>>139

    len(y_train)
    >>>139

Однако все, что я получаю, это DeprecationWarning и ValueError:

DeprecationWarning: Передача 1d массивов, поскольку данные устарели в 0.17 и повысит ValueError в 0,19. Изменить ваши данные либо с помощью X.reshape (-1, 1), если ваши данные имеют одну функцию или X.reshape (1, -1) если он содержит один образец.

и

ValueError: Найдены входные переменные с непоследовательным количеством выборок: [1, 139]

1 Ответ

0 голосов
/ 07 июня 2019

Sklearn требует, чтобы ваша форма данных X была равна (n_row, n_column).

Когда вы выбираете столбец в DataFrame по df['horsepower'], вы получаете pandas.Series, и, следовательно, ваша форма (n_row,).

Чтобы избежать этого, у вас есть два варианта:

  • выберите ваш столбец следующим образом: df[['horsepower']], это даст вам новый DataFrame и, таким образом, форма будет (n_row, n_column)
  • сделать reshape перед установкой вашей модели: x_train = x_train.reshape(-1,1) и x_test = x_test.reshape(-1,1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...