Я делаю линейную регрессию с несколькими переменными. Чтобы получить 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')
Я ожидал получить единую линию регрессии, которая соответствует данной, но вместо того, чтобы он получил такую странную полилинию (пунктирная линия). Что я делаю неправильно? 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
я получил этот участок с кривой:
Я ожидал получить прямой фитинг все мои данные с наименьшие квадратные ошибки, но вместо этого получили кривую. Не является ли линейная регрессия и numpy.linalg.lstsq инструментом, который должен возвращать прямую линию фитинга вместо кривой?
Похоже, что ваши значения 'x' не сортируются. –
Я отсортировал значения x и получил новый сюжет. Я добавил изображение к вопросу. Я ожидал получить прямую линию, привязав все мои данные с наименьшими квадратными ошибками, но вместо этого получил кривую. Не является ли линейная регрессия и numpy.linalg.lstsq инструментом, который должен возвращать прямую линию фитинга вместо кривой? – Chichi