Я строю график чирикантов крикета в секунду в зависимости от температуры.
Я строю график наилучшего соответствия на диаграмме рассеяния точек данных, и теперь мне нужно построить прогноз крикета, который щебетал 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 чирп в секунду:
график крикета по крикету
Спасибо за вашу помощь!