博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数学建模方法—【03】拟合优度的计算(python计算)
阅读量:3943 次
发布时间:2019-05-24

本文共 2840 字,大约阅读时间需要 9 分钟。

拟合优度

1. 概念

引用百度百科定义:

拟合优度(Goodness of Fit)是指回归曲线对观测值的拟合程度。度量拟合优度的统计量是可决系数(亦称确定系数)R²。R²最大值为1。
规则: R²的值越接近1,说明回归曲线对观测值的拟合程度越好;反之,R²的值越小,说明回归曲线对观测值的拟合程度越差。
    总而言之,拟合优度是用于度量拟合曲线对于原始数据拟合效果的好坏,拟合优度 R 2 R^2 R2越接近1说明拟合优度越好,一般来说,拟合优度到达0.8以上就可以说拟合效果不错了。

2. 计算方法

         y y y为待拟合数据,y的均值为 y ‾ \overline{y} y,拟合数据为 y ^ \widehat{y} y ,则:

                1. 总平方和 SST(total sum of squares) : ∑ i = 1 n ( y i − y ‾ ) 2 \sum\limits_{i=1}^{n}(y_i - \overline{y})^2 i=1n(yiy)2
                2. 回归平方和 SSR(regression sum of squares) : ∑ i = 1 n ( y ^ i − y ‾ ) 2 \sum\limits_{i=1}^{n}(\widehat{y}_i - \overline{y})^2 i=1n(y iy)2
                3. 残差平方和 SSE(error sum of squares) : ∑ i = 1 n ( y i − y ^ i ) 2 \sum\limits_{i=1}^{n}({y}_i - \widehat{y}_i)^2 i=1n(yiy i)2
确定系数:
                 R 2 = S S R S S T = 1 − S S E S S T R^2 = \frac{SSR}{SST}=1-\frac{SSE}{SST} R2=SSTSSR=1SSTSSE

3. Python代码

# #################################拟合优度R^2的计算######################################def __sst(y_no_fitting):    """    计算SST(total sum of squares) 总平方和    :param y_no_predicted: List[int] or array[int] 待拟合的y    :return: 总平方和SST    """    y_mean = sum(y_no_fitting) / len(y_no_fitting)    s_list =[(y - y_mean)**2 for y in y_no_fitting]    sst = sum(s_list)    return sstdef __ssr(y_fitting, y_no_fitting):    """    计算SSR(regression sum of squares) 回归平方和    :param y_fitting: List[int] or array[int]  拟合好的y值    :param y_no_fitting: List[int] or array[int] 待拟合y值    :return: 回归平方和SSR    """    y_mean = sum(y_no_fitting) / len(y_no_fitting)    s_list =[(y - y_mean)**2 for y in y_fitting]    ssr = sum(s_list)    return ssrdef __sse(y_fitting, y_no_fitting):    """    计算SSE(error sum of squares) 残差平方和    :param y_fitting: List[int] or array[int] 拟合好的y值    :param y_no_fitting: List[int] or array[int] 待拟合y值    :return: 残差平方和SSE    """    s_list = [(y_fitting[i] - y_no_fitting[i])**2 for i in range(len(y_fitting))]    sse = sum(s_list)    return ssedef goodness_of_fit(y_fitting, y_no_fitting):    """    计算拟合优度R^2    :param y_fitting: List[int] or array[int] 拟合好的y值    :param y_no_fitting: List[int] or array[int] 待拟合y值    :return: 拟合优度R^2    """    SSR = __ssr(y_fitting, y_no_fitting)    SST = __sst(y_no_fitting)    rr = SSR /SST    return rr

举个栗子:

import randomimport matplotlib.pyplot as plt# 生成待拟合数据a = np.arange(10)# 通过添加正态噪声,创造拟合好的数据b = a + 0.4 * np.random.normal(size=len(a))print("原始数据为: ", a)print("拟合数据为: ", b)rr = goodness_of_fit(b, a)print("拟合优度为:", rr)plt.plot(a, a, color="#72CD28", label='原始数据')plt.plot(a, b, color="#EBBD43", label='拟合数据')plt.legend() plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号plt.savefig(r"C:\Users\Yunger_Blue\Desktop\temp.jpg")plt.show()

结果为:

原始数据为:  [0 1 2 3 4 5 6 7 8 9]拟合数据为:  [0.23705933 1.20951491 2.37326542 3.00448608 3.48391211 4.30719527 5.95446175 7.50969723 8.97662945 8.27064816]拟合优度为: 0.9971013400436336

在这里插入图片描述

转载地址:http://sfiwi.baihongyu.com/

你可能感兴趣的文章
软件测试管理—如何写好软件测试计划书
查看>>
解读一名软件测试经理所需要具备的能力
查看>>
有效的软件测试度量
查看>>
机器学习界大牛林达华推荐的书籍
查看>>
path变量备份
查看>>
Lesson2.2 & 2.3 Maya command reference & quick help
查看>>
lesson 2.4 - Converting MEL Commands to Python
查看>>
Lesson3.2 variables
查看>>
3.4.2 - Operators & 3.4.3 division and truncation
查看>>
3.7.1 - Strings
查看>>
3.7.4 - Indexing and Slicing Strings
查看>>
3.7.5 - Modifying Strings
查看>>
3.7.6 - String Methods
查看>>
3.8 - Using the Print Function
查看>>
3.9.1 - Lists in Python
查看>>
3.9.2 - Lists - Adding and Removing Objects
查看>>
3.9.3 - Sorting Lists
查看>>
3.10 - Maya Commands: ls
查看>>
3.11 - Dictionaries in Python
查看>>
3.12 - Tuples in Python
查看>>