首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >蟒蛇非线性曲线拟合的判定系数(R2)和均方根误差的计算

蟒蛇非线性曲线拟合的判定系数(R2)和均方根误差的计算
EN

Stack Overflow用户
提问于 2013-11-21 07:52:52
回答 2查看 9.6K关注 0票数 3

如何计算非线性曲线拟合的判定系数(R2)和均方误差(RMSE)。下面的代码直到曲线拟合为止。那么如何计算R2和RMSE呢?

代码语言:javascript
运行
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-21 08:30:32

你可以这样做:

代码语言:javascript
运行
复制
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

这是直接使用定义,例如在维基百科:determination#Definitions中。

票数 5
EN

Stack Overflow用户

发布于 2014-11-24 01:15:06

Martin schen,不是y,而是yn

代码语言:javascript
运行
复制
np.mean((y-func(x, *popt))**2)

并阅读有关均方误差(RMSE):analysis的内容。

代码语言:javascript
运行
复制
residuals = yn - func(x,*popt)
print "RMSE",(scipy.sum(residuals**2)/(residuals.size-2))**0.5

现计算为Excel2003Analysis ToolPak。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20115272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档