跳到主要内容

R回归算法

回归分析是机器学习中最基础且重要的技术之一,用于预测连续值或分类结果。R语言作为一种强大的统计计算工具,提供了丰富的函数和包来实现各种回归算法。本文将带你从基础概念入手,逐步学习如何在R中实现回归算法,并通过实际案例加深理解。

什么是回归算法?

回归算法是一种用于预测因变量(目标变量)与一个或多个自变量(特征)之间关系的统计方法。根据目标变量的类型,回归算法可以分为:

  • 线性回归:用于预测连续值。
  • 逻辑回归:用于分类问题,预测概率值。

在R中,回归算法的实现通常依赖于内置函数或扩展包(如lm()glm()等)。


线性回归

线性回归是最简单的回归算法,假设因变量与自变量之间存在线性关系。其数学表达式为:

y=β0+β1x1+β2x2++βnxn+ϵy = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_n x_n + \epsilon

其中:

  • yy 是因变量(目标变量)。
  • x1,x2,,xnx_1, x_2, \dots, x_n 是自变量(特征)。
  • β0,β1,,βn\beta_0, \beta_1, \dots, \beta_n 是模型参数。
  • ϵ\epsilon 是误差项。

在R中实现线性回归

R提供了lm()函数来实现线性回归。以下是一个简单的示例:

r
# 加载数据集
data(mtcars)

# 拟合线性回归模型
model <- lm(mpg ~ wt + hp, data = mtcars)

# 查看模型摘要
summary(model)

输出结果:

Call:
lm(formula = mpg ~ wt + hp, data = mtcars)

Residuals:
Min 1Q Median 3Q Max
-3.941 -1.600 -0.182 1.050 5.854

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 37.22727 1.59879 23.285 < 2e-16 ***
wt -3.87783 0.63273 -6.129 1.12e-06 ***
hp -0.03177 0.00903 -3.519 0.00145 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.593 on 29 degrees of freedom
Multiple R-squared: 0.8268, Adjusted R-squared: 0.8148
F-statistic: 69.21 on 2 and 29 DF, p-value: 9.109e-12

解释:

  • mpg ~ wt + hp 表示用wt(车重)和hp(马力)预测mpg(每加仑英里数)。
  • summary(model) 输出了模型的详细信息,包括系数估计、显著性水平、R平方值等。
提示

在实际应用中,可以通过plot(model)绘制模型的诊断图,检查残差分布、线性假设等。


逻辑回归

逻辑回归用于分类问题,特别是二分类问题。它通过逻辑函数(Sigmoid函数)将线性回归的输出映射到[0, 1]区间,表示概率值。

在R中实现逻辑回归

R提供了glm()函数来实现逻辑回归。以下是一个示例:

r
# 加载数据集
data(iris)

# 将Species转换为二分类变量
iris_binary <- iris[iris$Species %in% c("setosa", "versicolor"), ]
iris_binary$Species <- ifelse(iris_binary$Species == "setosa", 1, 0)

# 拟合逻辑回归模型
model <- glm(Species ~ Sepal.Length + Sepal.Width, data = iris_binary, family = binomial)

# 查看模型摘要
summary(model)

输出结果:

Call:
glm(formula = Species ~ Sepal.Length + Sepal.Width, family = binomial,
data = iris_binary)

Deviance Residuals:
Min 1Q Median 3Q Max
-2.1280 -0.7668 0.3819 0.8086 1.8503

Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -27.831 5.434 -5.121 3.03e-07 ***
Sepal.Length 5.140 1.007 5.104 3.33e-07 ***
Sepal.Width 9.829 1.964 5.005 5.57e-07 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

Null deviance: 138.629 on 99 degrees of freedom
Residual deviance: 95.859 on 97 degrees of freedom
AIC: 101.86

Number of Fisher Scoring iterations: 5

解释:

  • Species ~ Sepal.Length + Sepal.Width 表示用Sepal.LengthSepal.Width预测Species
  • family = binomial 指定使用逻辑回归模型。
警告

逻辑回归的输出是概率值,通常需要设置阈值(如0.5)将概率转换为类别标签。


实际案例:房价预测

假设我们有一个房价数据集,包含房屋面积、房间数量等特征。我们可以使用线性回归来预测房价。

r
# 假设数据集为house_data
house_data <- data.frame(
area = c(1200, 1500, 1800, 2000, 2200),
rooms = c(2, 3, 3, 4, 4),
price = c(300000, 400000, 450000, 500000, 550000)
)

# 拟合线性回归模型
model <- lm(price ~ area + rooms, data = house_data)

# 查看模型摘要
summary(model)

输出结果:

Call:
lm(formula = price ~ area + rooms, data = house_data)

Residuals:
1 2 3 4 5
-10000 5000 -5000 10000 -10000

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 50000.0 70710.7 0.707 0.584
area 200.0 50.0 4.000 0.057 .
rooms 10000.0 17677.7 0.566 0.631
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 10000 on 2 degrees of freedom
Multiple R-squared: 0.8889, Adjusted R-squared: 0.7778
F-statistic: 8 on 2 and 2 DF, p-value: 0.1111

解释:

  • 模型表明,房屋面积和房间数量对房价有显著影响。
  • 可以通过predict(model, newdata)对新数据进行预测。

总结

回归算法是机器学习中的核心工具,适用于预测和分类任务。本文介绍了R语言中线性回归和逻辑回归的实现方法,并通过实际案例展示了其应用场景。希望你能通过本文掌握R回归算法的基本用法,并在实际项目中灵活运用。

附加资源

  • R官方文档
  • 《R语言实战》:一本适合初学者的R语言教程。
  • Kaggle竞赛:通过实战项目提升技能。

练习

  1. 使用mtcars数据集,尝试用dispqsec预测mpg
  2. 在逻辑回归示例中,尝试添加更多特征(如Petal.Length)并观察模型性能的变化。