【机器学习】衡量线性回归算法最好的指标:R Squared

news/2025/2/21 9:40:56

衡量线性回归算法最好的指标:R Squared

  • 一、摘要
  • 二、回归算法评价指标与R Squared指标介绍
  • 三、R Squared的编程实践

一、摘要

本文主要介绍了线性回归算法中用于衡量模型优劣的重要指标——R Squared(R方)。R方用于比较模型预测结果与实际结果的拟合程度,其值范围在0到1之间,越接近1表示模型预测效果越好。R方的计算涉及预测误差总误差的比较,其中分子预测误差的平方和分母总误差的平方和当R方等于1时,表示模型预测无误差;小于零则表明模型效果不佳,可能不适合线性回归 此外,还介绍了如何通过编程实践计算R方值,并在不同的机器学习库中实现该指标的计算。最后,强调了R方作为衡量线性回归模型性能的关键指标的重要性。

二、回归算法评价指标与R Squared指标介绍

  1. 之前的博文中介绍了评价回归算法优劣的三个指标:MSE(均方误差)、RMSE(均方根误差)和MAE(平均绝对误差)。这些指标存在的问题无法直接比较不同问题的预测误差。分类问题的评价指标简单明了,取值在0到1之间,而回归算法的指标没有这样的性质。

  2. R Squared(R方) 是一个解决上述问题的新指标。
    计算方法:1减去两个量的比值,分子是残差平方和,分母是总平方和。
    在这里插入图片描述

    • R方计算步骤:计算残差平方和与总平方和,代入公式计算R方值。
    • 残差平方和:预测结果减去真实值平方和
    • 总平方和:真实值均值平方和

    R Squared的优势:

    • R方将回归问题的衡量结果归约到0到1之间,便于比较不同模型的性能。
    • R方越大越好,越接近1表示模型预测越准确。
    • R方小于零表示模型预测效果不如基准模型。
    • 可能意味着数据间不存在线性关系,需要考虑其他回归方法。

    R Squared的统计意义:

    • R方可以表示为1减去均方误差(MSE)与方差的比值。
    • 均方误差:预测结果与真实值的平方差均值。
    • 方差:真实值的方差。
    • R方衡量模型与基准模型的差异,值越大表示模型预测越准确。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      最后这张图将公式的含义是1 - (MSE(均方误差)/ Var(方差)

三、R Squared的编程实践

  1. 计算R方的编程实践:使用NumPy、SciPy或sklearn等库进行计算。
  2. 示例代码:计算简单线性回归模型的R方值。
    import openml
    import numpy as np
    
    # 从 openml 获取波士顿房价数据集
    dataset = openml.datasets.get_dataset(531)
    X, y, categorical_indicator, attribute_names = dataset.get_data(
        target=dataset.default_target_attribute, dataset_format='dataframe'
    )
    
    # 这里只用RM这个特征来计算,提取RM列特征数据
    boston_datas = X.iloc[:,5]
    
    # 分布在50那里的一些点,可能不是真实的点,比如问卷调查中通过会设置一些上限点,而往往这些不是真实存在的额点,因此可以去除
    y_normal = y[y < 50.0]
    x_normal = boston_datas[y < 50.0]
    
    import sys
    # 替换为你的 PyCharm 工程实际路径
    project_path = 'D:/PycharmProjects/pythonProject/'
    if project_path not in sys.path:
        sys.path.append(project_path)
    
    # 拆分训练集和测试集
    from model_selection import train_test_split
    X_train,y_train,X_test,y_test = train_test_split(np.array(x_normal),np.array(y_normal),seed=666)
    
    # 引入我们自己实现的线性回归模型
    from SimpleLinearRegressionDemo import SimpleLinearRegressionModel
    reg1 = SimpleLinearRegressionModel()
    reg1.fit(X_train,y_train)
    
    # 预测结果
    y_predict = reg1.predict(X_test)
    
    # scikit-learn来计算均方误差和绝对值误差
    from sklearn.metrics import mean_squared_error
    from sklearn.metrics import mean_absolute_error
    
    # 根据公式先计算分子: MSE 均方误差
    n_mse = mean_squared_error(y_pred=y_predict,y_true=y_test)
    # 根据公式先计算分母: 测试集的方差
    d_var = np.var(y_test)
    
    # 带入公式,得到R Squared值
    ret_pred = 1 - n_mse / d_var
    ret_pred
    
    执行结果:0.6129316803937324
    在这里插入图片描述
    在这里插入图片描述

http://www.niftyadmin.cn/n/5860632.html

相关文章

1224 最大子矩阵(动态规划+最大子段和)

最大子矩阵: 1.朴素解法(6 层循环) 两层循环枚举所有的左上角点(lx&#xff0c;ly) 两层循环枚举所有的右下角点(rx&#xff0c;ry) 两层循环针对左上角点(lx,ly)到右下角点(rx&#xff0c;ry)围成的矩阵求和 2.一维前缀和优化(5 层循环) 两层循环枚举所有的左上角点(lx&#x…

敏捷开发06:用户故事估算方法介绍

估算介绍 在以前开发 IT 软件时&#xff0c;使用较多的衡量软件开发工作量的单位是&#xff1a;小时、人天 或 人月。它是预估开发时间。比如&#xff1a;这个功能张三一个人开发需要 3 天时间完成。 这种 “人天” 估算只是 “理想人天” 的估算&#xff0c;有时与实际开发完…

【科研绘图系列】R语言绘制小提琴图、散点图和韦恩图(violin scatter plot Venn)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载画图1画图2画图3画图4画图5画图6画图7参考介绍 【科研绘图系列】R语言绘制小提琴图、散点图和韦恩图(violin & scatter plot & Venn) 加载R包 library…

JS宏实例:数据透视工具的制作(四)

上一节中&#xff0c;我们完成了核心的计算代码部分&#xff0c;本节中将完善事件代码 一、创建所有需求的事件函数 1、窗体初始化 // 窗体初始化 function pivotForm_Initialize(){} function typeSet_Initialize(){} function valueSet_Initialize(){} function allCol…

基于springboot校园健康系统的设计与实现(源码+文档)

大家好我是风歌&#xff0c;今天要和大家聊的是一款基于springboot的园健康系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于springboot校园健康系统的设计与实现的主要使用者管理员具有最高的权限&#xff0c;通…

Java 中的方法参数传递与值传递2

文章目录 代码分析传值调用&#xff1a;关键概念结果分析如何实现交换两个对象的值&#xff1f;总结 这段代码演示了如何使用对象和方法进行交换&#xff0c;但它也展示了方法参数传递方式的一个重要概念——传值调用。在 Java 中&#xff0c;参数传递是按值传递的&#xff0c;…

SpringCloud-Eureka初步使用

什么是REST是一组用于规范资源在网络中转移的表现形式软件架构设计风格.简单来说就是客户端和服务器之间的一种交互形式 什么是RESTful,满足了REST风格的接口或者程序,RESTful API是其中的接口,spring中提供了RestTemplate这个类,他强制执行了REST的规范,包括使用HTTP协议的状…

Java集合框架中常用类及其底层数据结构的详细分类

1. 数组&#xff08;Array&#xff09; 特点&#xff1a;内存连续&#xff0c;支持随机访问&#xff0c;增删效率低&#xff08;需扩容或移动元素&#xff09;。 ArrayList 基于动态数组&#xff0c;扩容时创建新数组并拷贝数据&#xff08;默认扩容 1.5 倍&#xff09;。Vec…