Как определить, какая кривая регрессии подходит лучше?ПИТОН - PullRequest
0 голосов
/ 06 июня 2018

Ну, сообщество:

Недавно я спросил, как сделать экспоненциальную регрессию ( Функция экспоненциальной регрессии Python ), полагая, что для этого набора данных оптимальной регрессией была Гиперболическая.

x_data = np.arange(0, 51) 
y_data = np.array([0.001, 0.199, 0.394, 0.556, 0.797, 0.891, 1.171, 1.128, 1.437, 
          1.525, 1.720, 1.703, 1.895, 2.003, 2.108, 2.408, 2.424,2.537, 
          2.647, 2.740, 2.957, 2.58, 3.156, 3.051, 3.043, 3.353, 3.400, 
          3.606, 3.659, 3.671, 3.750, 3.827, 3.902, 3.976, 4.048, 4.018, 
          4.286, 4.353, 4.418, 4.382, 4.444, 4.485, 4.465, 4.600, 4.681, 
          4.737, 4.792, 4.845, 4.909, 4.919, 5.100])

Теперь я сомневаюсь:

Exponential

Hyperbolic

Первое - экспоненциальное соответствие.Второй гиперболический.Я не знаю, что лучше ... Как определить?Каким критериям я должен следовать?Есть ли какая-нибудь функция Python?

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Одной общей статистикой соответствия является R-квадрат (R2), который можно рассчитать как «R2 = 1.0 - (absolute_error_variance / independent_data_variance)», и он сообщает вам, какая доля зависимой дисперсии данных объясняется вашей моделью.Например, если значение R-квадрата равно 0,95, тогда ваша модель объясняет 95% зависимой дисперсии данных.Так как вы используете numpy, значение R-квадрата тривиально вычисляется как «R2 = 1.0 - (abs_err.var () / dep_data.var ())», поскольку для numpy-массивов есть метод var () для вычисления дисперсии.При подгонке ваших данных к уравнению Михаэлиса-Ментена "y = ax / (b + x)" со значениями параметров a = 1.0232217656373191E + 01 и b = 5.2016057362771100E + 01 я вычисляю значение R-квадрата 0.9967, что означаетчто 99,67 процента дисперсии в данных "у" объясняется этой моделью.Однако серебряной пули нет, и всегда полезно проверять статистику соответствия и визуально проверять модель.Вот мой график для примера, который я использовал: model.png

0 голосов
/ 06 июня 2018

Вы можете взять 2-норму между функцией и линией подгонки.Python имеет функцию np.linalg.norm Значение R в квадрате для линейной регрессии.

0 голосов
/ 06 июня 2018

Ну, вы должны вычислить функцию ошибки, которая измеряет, насколько хорошо вы подходите.Существует множество различных функций ошибок, которые вы можете использовать, но для начала должно работать среднеквадратичное отклонение (если вас интересуют дальнейшие показатели, посмотрите http://scikit -learn.org / stable / modules /model_evaluation.html ).

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

from sklearn.metrics import mean_squared_error
f = lambda x: a * np.exp(b * x) + c 
mse = mean_squared_error(y_data, f(x_data))
...