Как построить «линию наилучшего соответствия» с точкой, которой нет в текущем фрейме данных? - PullRequest
0 голосов
/ 26 января 2019

Я строю график чирикантов крикета в секунду в зависимости от температуры.

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

Обратите внимание, что 19 чирп в секунду не входит в набор данных и является прогнозом. Я знаю, что мне нужно создать временную переменную и что я могу найти температуру по:

19 = уклон * температура + перехват

что означает:

температура = 91,113.

Я могу построить график с линией, если я добавлю другую точку из набора данных, но это не линия наилучшего соответствия (это то, что мне нужно).

Вот код, который я построил для построения линии наилучшего соответствия без прогнозирования 19 чирпов в секунду. Обратите внимание на второй блок кода, так как это часть кода, которую мне нужно настроить для создания прогноза. Первый фрагмент кода просто для того, чтобы у вас было все, что у меня есть Извлечено из Google Colab:

1

!pip install xlrd
import pandas as pd
import numpy as np
df = pd.read_excel('https://college.cengage.com/mathematics/brase/understandable_statistics/7e/students/datasets/slr/excel/slr02.xls')
df = df.rename(columns={'X':'chirps_per_sec', 'Y':'temperature'})
pd.options.display.float_format = '{:.2f}'.format
import matplotlib.pyplot as plt
plt.scatter(df['chirps_per_sec'], df['temperature'])
plt.xlabel("chirps_per_sec")
plt.ylabel("temperature")
import random
a = np.ones(15, dtype=np.int64, order='C')
df['ones'] = a
X = df[['ones', 'temperature']].as_matrix()
Y = df['chirps_per_sec'].as_matrix().reshape(-1, 1)
X_transpose = np.transpose(X) 
X_transpose_X = np.matmul(X_transpose, X)
inverse = np.linalg.inv(X_transpose_X)
identity = np.matmul(inverse, X_transpose_X)
Y_X_transpose= np.matmul(X_transpose, Y)
beta = np.matmul(inverse, Y_X_transpose)

2

beta=np.matmul(np.linalg.inv(np.matmul(np.transpose(X), X)), np.matmul(np.transpose(X), Y))
print(beta)
beta_0 = beta[0,0]
beta_1 = beta[1,0]
plt.scatter(df['temperature'], df['chirps_per_sec'])
axes = plt.gca()
x_vals = np.array(axes.get_xlim())
y_vals = beta_0 + beta_1 * x_vals
plt.plot(x_vals, y_vals, '-', color='b')
plt.ylabel('chirps_per_sec')
plt.xlabel('temperature')
plt.show()

URL для изображения того, какой кодовый блок выполняет два рендеринга, без прогноза 19 чирп в секунду: график крикета по крикету

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 26 января 2019

Поскольку у вас уже есть параметры подгонки (пересечение и наклон), вы можете просто вычислить значение x, соответствующее y=19, и построить эту точку отдельно, как показано ниже. Таким образом, вы не включаете его в подбор, а просто используете подходящую модель, чтобы предсказать его.

y_point = 19
x_point = (y_point - beta_0)/beta_1 # --> This is 91.113

plt.scatter(x_point, y_point, marker='x', color='b', s=100)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...