Как напечатать перехват и наклон простой линейной регрессии в Python с помощью scikit-learn? - PullRequest
1 голос
/ 14 января 2020

Я пытаюсь предсказать цены автомобиля (с помощью машинного обучения) с помощью простой линейной регрессии (только одна независимая переменная). Переменными являются «шоссе миль на галлон»

0      27
1      27
2      26
3      30
4      22
       ..
200    28
201    25
202    23
203    27
204    25
Name: highway-mpg, Length: 205, dtype: int64

и «цена»:

0      13495.0
1      16500.0
2      16500.0
3      13950.0
4      17450.0
        ...   
200    16845.0
201    19045.0
202    21485.0
203    22470.0
204    22625.0
Name: price, Length: 205, dtype: float64

со следующим кодом:

from sklearn.linear_model import LinearRegression

x = df["highway-mpg"]
y = df["price"]
lm = LinearRegression()

lm.fit([x],[y])
Yhat = lm.predict([x])

print(Yhat)
print(lm.intercept_)
print(lm.coef_)

Однако перехват и команды печати коэффициента наклона дают мне следующий вывод:

[[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.]]

Почему не выводится коэффициент пересечения и коэффициент наклона? Команда печати "Yhat" действительно распечатывает предсказанные значения в массиве должным образом, но почему-то другие команды печати не выводят желаемый результат ...

1 Ответ

1 голос
/ 14 января 2020

По сути, странно выглядящие coef_ и intercept_ вызвали тот факт, что у ваших данных было 205 объектов и 205 целей только с одной выборкой. Определенно не то, что вы хотели!

Вы, вероятно, хотите 1 функцию, 205 сэмплов и 1 цель. Для этого вам нужно изменить форму ваших данных:

from sklearn.linear_model import LinearRegression
import numpy as np

mpg = np.array([27, 27, 26, 30, 22, 28, 25, 23, 27, 25]).reshape(-1, 1)
price = np.array([13495.0, 16500.0, 16500.0, 13950.0, 17450.0, 16845.0, 19045.0, 21485.0, 22470.0, 22625.0])

lm = LinearRegression()
lm.fit(mpg, price)

print(lm.intercept_)
print(lm.coef_)

Я использовал эти массивы для тестирования, но, очевидно, использовал данные из вашего фрейма данных.

PS Если вы пропустите изменение размера, вы получаете сообщение об ошибке, подобное этому:

ValueError: Expected 2D array, got 1D array instead:
array=[27 27 26 30 22 28 25 23 27 25].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

^ Он говорит вам, что делать!

...