• python拟合优度R^2



    转自:https://blog.csdn.net/qq_43403025/article/details/108285275

    1. 概念

    拟合优度(Goodness of Fit) 是指回归直线对观测值的拟合程度。度量拟合优度的统计量是可决系数(亦称确定系数)R²

    • R² 最大值为 1。R² 的值越接近1,说明回归直线对观测值的拟合程度越
    • 反之,R² 的值越,说明回归直线对观测值的拟合程度越

    一般来说,拟合优度到达 0.8 以上就可以说拟合效果不错了。

    2. 计算方法

    在这里插入图片描述

    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 sst
    
    
    def __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 ssr
    
    
    def __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 sse
    
    
    def 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    4. 举个例子

    import random
    import 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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    结果为:

    原始数据为:  [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
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    参考资料
    [1] 拟合优度R^2 2019.8
    [2] 数学建模方法—【03】拟合优度的计算(python计算) 2020.8

  • 相关阅读:
    kafka 消费者
    LeetCode 1142.过去30天的用户活动2
    Unity 图片相关
    【C++】类和对象 从入门到超神
    请做好3年内随时失业的准备?
    《docker高级篇(大厂进阶):3.Docker微服务实战》
    PyTorch学习笔记-损失函数与反向传播
    2核2G3M带宽服务器腾讯云和阿里云价格、性能对比
    python小知识
    【Mysql】学习笔记
  • 原文地址:https://blog.csdn.net/weixin_46713695/article/details/126094113