Почему curve_fit возвращает результат, отличный от Excel Trendline? - PullRequest
1 голос
/ 15 октября 2019

Во время работы с моим набором данных я заметил, что выравнивание Excel Trend с линиями дает совершенно другие результаты, чем curve_fit в python:

Линия тренда экспоненты Excel дает следующее уравнение y = 0,00002178exp (0,53759216x) с = 0,00002178и b = 0,53759216

Python curve_fit (без ограничений) приводит к a = 0,19807362, b = 0,25736161

Когда построенное на Python решение кажется менее точным, чем Excel

Вот мой код:

df = pd.read_excel(path)

def func(x, a, b):
    return a*np.exp(x*b)

popt, pcov = curve_fit(func, df['x'].values, df['y'].values)

Буду очень признателен за помощь, чтобы понять, почему в этом случае между Excel и Python довольно большие различия.

Вот ссылка на набор данных https://www.4shared.com/office/VQUrwRG0iq/New_Microsoft_Excel_Worksheet.html

Или просто ниже: x: 27,7 28,1 25,2 27,6 25,7 27,0 25,1 25,5 30,7 27,4 23,6 28,8 28,5 20,3 16,6 22,4 35,2 30,1 28,0 26,3 21,8 23,3 22,1 21,6 22,4 21,5 29,4 35,7 33,5 25,5 29,8 19,5 21,6 22,5 23,5 32,3 29,6 22,4 22,5 21,7 21,4 25,5 25,331,3 34,7 35,9 33,4 23,8 21,9 20,1 21,8

y: 950 1050 110 75 28 35 22 14 400 80 38 315 610 0,6 0,29,8 630 330 280 65 2,7 9,6 2,3 2,7 1,7 1,7 1,7 280 490 265 19 120 1 1,3 2,2 4,5 195 230 1,3 1,1 1 2,1 6 39 2170 1230 4150 2340 4,5 1,4 0,2 0,7

1 Ответ

0 голосов
/ 15 октября 2019

Данные крайне разбросаны. Как следствие, результат регрессии будет сильно отличаться, если критерии подгонки не совпадают.

Если мы ищем относительную ошибку наименьших квадратов, мы находим результаты Excel. Вероятно, приведенное уравнение имеет вид

ln (y) = ln (a) + bx

RMS относительная ошибка = 1,11;RMS абсолютная ошибка = 348

Если мы посмотрим на абсолютную ошибку наименьших квадратов, мы найдем результат Python. Вероятно, приведенное уравнение имеет вид

y = a.exp (bx)

RMS относительная ошибка = 18,5;RMS абсолютная ошибка = 280

В графическом представлении субъективно средняя относительная ошибка выглядит лучше, чем абсолютная ошибка.

Если вы хотите получить с Python что-то близкое к Excel, вы должны указать критерии подгонки как относительную ошибку вместо абсолютной ошибки.

enter image description here

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