1

Я делаю линейную регрессию с несколькими переменными. Чтобы получить tas (коэффициенты), я использовал наименьшие квадраты Numpy numpy.linalg.lstsq. В моих данных у меня есть n = 143 особенности и m = 13000 примеры обучения. Я хочу рассказать цены на жилье против области и показать линию фитинга для этой функции.Странный график после линейной регрессии с использованием наименьших квадратов Numpy

код подготовки данных (Python):

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 

path = 'DB2.csv' 
data = pd.read_csv(path, header=None, delimiter=";") 
data.insert(0, 'Ones', 1) 

cols = data.shape[1] 
X = data.iloc[:,0:cols-1] 
y = data.iloc[:,cols-1:cols] 

Получение тета-коэффициентов с numpy.linalg.lstsq:

thetas = np.linalg.lstsq(X, y)[0] 

Предсказание часть:

allAreasData = X.iloc[:,120] #Used as argument to scatter all training data 
areasTestValues = X.iloc[0:100,120] #Used as argument for plot function 
testingExamples = X.iloc[0:100,:] #Used to make predictions 

predictions = testingExamples.dot(thetas) 

Примечание: 120 в приведенный выше код является индексом столбца Area в моем наборе данных.

Визуализация часть:

fig, ax = plt.subplots(figsize=(18,10)) 
ax.scatter(allAreasData, y, label='Traning Data', color='r') 
ax.plot(areasTestValues, predictions, 'b', label='Prediction') 
ax.legend(loc=2) 
ax.set_xlabel('Area') 
ax.set_ylabel('Price') 
ax.set_title('Predicted Price vs. House Area') 

Выходного участок: enter image description here

Я ожидал получить единую линию регрессии, которая соответствует данной, но вместо того, чтобы он получил такую ​​странную полилинию (пунктирная линия). Что я делаю неправильно? Scatter работает правильно. Но сюжет - нет. Для функции сюжета Посылаю 2 аргумента:

1) Testing area data (100 area data examples) 
2) Predictions of price based on 100 training examples that include area data 


Update: После сортировки x я получил этот участок с кривой: enter image description here

Я ожидал получить прямой фитинг все мои данные с наименьшие квадратные ошибки, но вместо этого получили кривую. Не является ли линейная регрессия и numpy.linalg.lstsq инструментом, который должен возвращать прямую линию фитинга вместо кривой?

+2

Похоже, что ваши значения 'x' не сортируются. –

+0

Я отсортировал значения x и получил новый сюжет. Я добавил изображение к вопросу. Я ожидал получить прямую линию, привязав все мои данные с наименьшими квадратными ошибками, но вместо этого получил кривую. Не является ли линейная регрессия и numpy.linalg.lstsq инструментом, который должен возвращать прямую линию фитинга вместо кривой? – Chichi

ответ

1

Ваш результат линейный в 143-мерном пространстве. ;) Поскольку ваш X содержит гораздо больше функций, чем просто область, предсказание будет также (линейно) зависеть от этих функций.

Если вы переделаете свое обучение с помощью X = data.iloc [:, 120] (только с учетом особенностей области), вы должны получить прямую линию при построении результатов.

Смежные вопросы