R语言计算R平方值完全指南:方法与实例

大家好,读者朋友们!在这篇文章中,我们将要介绍机器学习中的一个重要概念 – 在R编程中的R平方(R²)。

所以,让我们开始吧!


R平方误差度量的重要性

让我们首先了解在数据科学和机器学习领域中误差度量的重要性!

误差指标使我们能够评估机器学习模型在特定数据集上的表现。

根据算法类别,存在各种不同的误差度量模型。

我们有混淆矩阵来处理和评估分类算法。而R平方是一个评估回归算法预测的重要误差度量。

R平方(R²)是一个回归误差度量指标,用来评估模型的性能。它代表了自变量能够描述因变量的值的程度。

因此,R平方模型描述了目标变量如何由独立变量的组合作为一个整体来解释。

R平方值的范围在0至1之间,并由下述公式表示:

R² = 1 – (残差平方和/总平方和)

这里:

  • SSres:残差平方和
  • SStot:总平方和

永远记住,R平方值越高,预测模型就越好!


在R中使用线性回归的R平方

在这个例子中,我们在线性回归模型上实施了R平方误差度量的概念。

  1. 最初,我们使用read.csv()函数加载我们的数据集。
  2. 下一步是使用createDataPartition()方法将数据分离成训练集和测试集。
  3. 在建模之前,我们已经指定了误差指标的自定义函数,如下面的示例所示。
  4. 最后一步是使用lm()函数应用线性回归模型,然后我们调用了用户定义的R平方函数来评估模型的性能。
# 移除所有现有对象
rm(list = ls())
# 设置工作目录
setwd("D:/Ediwsor_Project - Bike_Rental_Count/")
getwd()

# 加载数据集
bike_data = read.csv("day.csv",header=TRUE)

### 数据采样 -- 将数据列分割为训练集和测试集 ###
categorical_col_updated = c('season','yr','mnth','weathersit','holiday')
library(dummies)
bike = bike_data
bike = dummy.data.frame(bike,categorical_col_updated)
dim(bike)

# 将因变量和自变量分离到两个数据框中
library(caret)
set.seed(101)
split_val = createDataPartition(bike$cnt, p = 0.80, list = FALSE) 
train_data = bike[split_val,]
test_data = bike[-split_val,]

### 使用机器学习算法对数据建模 ###
# 定义误差指标以检查回归机器学习算法的误差率和准确性

# 1. 平均绝对百分比误差 (MAPE)
MAPE = function(y_actual,y_predict){
  mean(abs((y_actual-y_predict)/y_actual))*100
}

# 2. R平方误差指标 -- 决定系数
RSQUARE = function(y_actual,y_predict){
  cor(y_actual,y_predict)^2
}

## 模型1:线性回归
linear_model = lm(cnt~., train_data) # 在我们的数据集上构建线性回归模型
summary(linear_model)
linear_predict=predict(linear_model,test_data[-27]) # 在测试数据上进行预测

LR_MAPE = MAPE(test_data[,27],linear_predict) # 使用MAPE误差指标检查误差率和准确度水平
LR_R = RSQUARE(test_data[,27],linear_predict) # 使用R平方误差指标检查误差率和准确度水平
Accuracy_Linear = 100 - LR_MAPE

print("MAPE: ")
print(LR_MAPE)
print("R平方: ")
print(LR_R)
print('线性回归准确度: ')
print(Accuracy_Linear)

输出:

如下所示,R平方值为0.82,即模型对我们的数据拟合效果良好。

> print("MAPE: ")
[1] "MAPE: "
> print(LR_MAPE)
[1] 17.61674
> print("R平方: ")
[1] "R平方: "
> print(LR_R)
[1] 0.8278258
> print('线性回归准确度: ')
[1] "线性回归准确度: "
> print(Accuracy_Linear)
[1] 82.38326

II. 利用summary()函数计算R平方值

我们甚至可以利用R中的summary()函数在建模后提取R方值。

在下面的例子中,我们对我们的数据框应用了线性回归模型,然后使用summary()$r.squared来获取R平方值。

为了更清楚地说明,下面的示例展示了如何在R中计算R平方值。我们将创建一个数据框,应用线性回归模型,然后从模型摘要中提取R平方值。

rm(list = ls())  # 清除工作空间中的所有对象
 
# 创建向量
A <- c(1,2,3,4,2,3,4,1) 
B <- c(1,2,3,4,2,3,4,1) 
a <- c(10,20,30,40,50,60,70,80) 
b <- c(100,200,300,400,500,600,700,800) 

# 创建数据框
data <- data.frame(A,B,a,b) 

# 打印原始数据框
print("原始数据框:\n") 
print(data) 

# 创建线性回归模型
ml = lm(A~a, data = data) 

# 从模型摘要中提取R平方值
summary(ml)$r.squared 
   

输出结果:

[1] "原始数据框:\n"
  A B  a   b
1 1 1 10 100
2 2 2 20 200
3 3 3 30 300
4 4 4 40 400
5 2 2 50 500
6 3 3 60 600
7 4 4 70 700
8 1 1 80 800

[1] 0.03809524

结论

通过上述示例,我们可以看到在R中提取R平方值非常简单。使用summary()$r.squared可以直接从线性回归模型中获取这一重要统计量。R平方值(决定系数)帮助我们理解模型对数据的解释程度,值越接近1表示模型对数据的解释能力越强。在本例中,R平方值为0.038,表明模型对数据的解释能力较弱。

通过这个讨论,我们的话题讨论到这里结束了。如果您在讨论过程中有任何问题,请随时在下方留言。

祝您学习愉快!

bannerAds