How to calculate coefficient of determination (R2) and root mean square error (RMSE) for non linear curve fitting in python. Following code does until curve fitting. Then how to calculate R2 and RMSE?

import numpy as np

import matplotlib.pyplot as plt

from scipy.optimize import curve_fit

def func(x, a, b, c):

return a * np.exp(-b * x) + c

x = np.linspace(0,4,50)

y = func(x, 2.5, 1.3, 0.5)

yn = y + 0.2*np.random.normal(size=len(x))

popt, pcov = curve_fit(func, x, yn)

plt.figure()

plt.plot(x, yn, 'ko', label="Original Noised Data")

plt.plot(x, func(x, *popt), 'r-', label="Fitted Curve")

plt.legend()

plt.show()

解决方案

You could do it like this:

print "Mean Squared Error: ", np.mean((y-func(x, *popt))**2)

ss_res = np.dot((yn - func(x, *popt)),(yn - func(x, *popt)))

ymean = np.mean(yn)

ss_tot = np.dot((yn-ymean),(yn-ymean))

print "Mean R :", 1-ss_res/ss_tot

This is taking the definitions directly, as for example in the wikipedia:

http://en.wikipedia.org/wiki/Coefficient_of_determination#Definitions

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐