построить линию наименьших квадратов на графике масштаба - PullRequest
0 голосов
/ 30 марта 2020

Я хочу построить линию регрессии наименьших квадратов для X и Y на графике шкалы log-log и найти коэффициенты. Строковая функция равна log (Y) = a.log (X) + b, Y = 10 ^ b. X ^ а. Каковы коэффициенты а и б? как я могу использовать polyfit в NumPy?

Я использую код ниже, используя этот код , но я получаю эту ошибку времени выполнения:

деление на ноль, встречающееся в log10 X_log = np.log10 (X)

X_log = np.log10(X)
Y_log = np.log10(Y)
X_mean = np.mean(X_log)
Y_mean = np.mean(Y_log)
num = 0
den = 0
for i in range(len(X)):
    num += (X_log[i] - X_mean)*(Y_log[i] - Y_mean)
    den += (X_log[i] - X_mean)**2
m = num / den
c = Y_mean - m*X_mean
print (m, c)
Y_pred = m*X_log + c
plt.plot([min(X_log), max(X_log)], [min(Y_pred), max(Y_pred)], color='red') # predicted
plt.show()

1 Ответ

1 голос
/ 31 марта 2020

Кажется, что у вас есть X-значения, которые слишком близки к нулю, вы можете показать значения, которые вы отправляете в log_x = np.log10 (x)?

Чтобы использовать np.polyfit, просто напишите

coeff = np.polyfit(np.log10(x), np.log10(y), deg = 1)

coeff теперь будет списком [a, b] с вашими коэффициентами для соответствия первой степени (следовательно, deg = 1) точкам данных (log (x), log (y)). Если вы хотите дисперсию в коэффициентах, используйте

coeff, cov = np.polyfit(np.log10(x), np.log10(y), deg = 1, cov = True)

. Cov теперь ваша ковариационная матрица.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...