python-进行特定函数拟合并计算决定系数R2

文章目录

      • 1. 对于特定函数的拟合 (这里以幂函数为例子)
      • 2. 决定系数R2的计算公式

1. 对于特定函数的拟合 (这里以幂函数为例子)

  1. 假设使用函数y=ax^b 对散点进行拟合。

import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import numpy as np


# 基于特定公式对散点进行拟合
def target_func(T, k, b):
    return k * (T**b)


def curve_():

	# 这里以我自己的数据来进行拟合
    xdata = [50, 100, 150, 200, 250, 300, 350, 400, 450, 500, 550, 600]
    ydata = [10.4, 13.9, 17.0, 20.4, 21.9, 23.7, 24.9, 27.1, 26.6, 28.2, 28.5, 29.7]
	
	# 对自己的数据做散点图
    plt.scatter(xdata, ydata, c='blue', s=30)


    #进行拟合
    popt, pcov = curve_fit(target_func, xdata, ydata)
    print(popt)    # 输出结果为 [2.30503078 0.40323858], 分别对应幂函数的 系数和指数
    

    # 计算决定系数 R2
    calc_ydata = [target_func(i, popt[0], popt[1]) for i in xdata]
    res_ydata = np.array(ydata) - np.array(calc_ydata)
    ss_res = np.sum(res_ydata ** 2)
    ss_tot = np.sum((ydata - np.mean(ydata)) ** 2)
    r_squared = 1 - (ss_res / ss_tot)

    print(r_squared)  # 输出决定系数
	
	# 绘拟合曲线的图
    plt.plot(xdata, target_func(xdata, *popt), 'r-', label='fit: K=%5.3f, b=%5.3f' % tuple(popt))
    plt.show()
    
if __name__ == '__main__':
    curve_()

  1. 输出结果为 (其中输出的第一行代表拟合函数的系数和指数,第二行是决定系数)
    python-进行特定函数拟合并计算决定系数R2_第1张图片

2. 决定系数R2的计算公式

  1. 决定系数R2是是判定拟合曲线的拟合度,数值越接近于1,则证明曲线的拟合效果越好。下面是R2的计算方式。
    python-进行特定函数拟合并计算决定系数R2_第2张图片
    公式一, 求y值的平均值。
    公式二,求残差平方和
    公式三,求总平方和
    公式四,求决定系数R2
  2. 矫正后的R2值的计算
    python-进行特定函数拟合并计算决定系数R2_第3张图片
    其中n代表样本个数, p代表特征个数(自由度)

你可能感兴趣的:(python,开发语言)