import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

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

# 此处应插入你的数据和模型拟合代码,例如:
# y2 = ...  # 拟合后的y值
# myz = ... # 原始的y值
# ...

# 计算并打印R^2
print(goodness_of_fit(y2, myz))

# 以下代码用于3D可视化,你需要根据你的数据和模型修改
# ...

# 读取待预测数据
pre = pd.read_excel('待测.xlsx', header=None)
pre = pre.values

# 预测结果
pre_results = np.zeros([8])
for i in range(8):
    x = pre[i, 0]
    y = pre[i, 1]
    pre_results[i] = p00 * x + p10 * y + p01

# ...

# 保存预测结果
np.savetxt('厚度预测结果.csv', pre_results, delimiter=',')
Python计算拟合优度R^2值及3D可视化

原文地址: https://www.cveoy.top/t/topic/fNn2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录