R语言机器学习入门全攻略:从线性回归到决策树(附完整代码+图形分析)
一、前言
在数据科学的世界中,机器学习(Machine Learning) 是核心技术之一。
无论你做科研、数据分析还是预测建模,都离不开它。
而R语言,作为专为统计与数据分析而生的工具,不仅功能强大、生态丰富,还拥有便捷的可视化与建模接口。
本教程将通过两个经典算法:
-
线性回归(Linear Regression)
-
决策树(Decision Tree)
一步步带你从数据探索、特征分析到建模预测,掌握R语言机器学习的基础思维。
⚙️ 二、R语言机器学习的基本流程
在R中,机器学习通常遵循以下标准流程👇:
-
数据准备(Data Preparation)
加载、清洗、选择特征、划分训练集与测试集。 -
探索性分析(EDA, Exploratory Data Analysis)
用统计和图形手段理解数据分布和变量关系。 -
模型训练(Model Training)
选择算法并在训练集上拟合模型。 -
模型预测(Prediction)
在测试集或新数据上做预测。 -
模型评估(Evaluation)
使用指标(MSE、R²、Accuracy等)评价模型好坏。 -
可视化与优化(Visualization & Tuning)
绘图对比结果,进行参数调整与改进。
🧩 三、准备工作与环境配置
首先安装并加载我们需要的R包:
install.packages(c("tidyverse", "caret", "rpart", "rpart.plot", "ggpubr"))
加载库:
library(tidyverse) library(caret) library(rpart) library(rpart.plot) library(ggpubr)
这些包的作用如下👇:
-
tidyverse:数据清洗、变换与可视化
-
caret:机器学习通用框架
-
rpart / rpart.plot:构建与绘制决策树
-
ggpubr:可视化结果组合展示
📘 四、数据集介绍:mtcars
R自带的 mtcars 数据集包含32种汽车的性能指标,包括油耗、重量、马力、变速方式等。
data(mtcars) head(mtcars)
输出示例:
| mpg | cyl | disp | hp | wt | qsec | am | gear |
|---|---|---|---|---|---|---|---|
| 21.0 | 6 | 160 | 110 | 2.62 | 16.46 | 1 | 4 |
| 21.0 | 6 | 160 | 110 | 2.88 | 17.02 | 1 | 4 |
变量解释:
-
mpg:每加仑油行驶英里数(燃油效率) -
hp:马力(Horse Power) -
wt:车重(单位:1000磅) -
am:变速方式(0=自动,1=手动)
🔍 五、探索性数据分析(EDA)
1️⃣ 数据基本统计
summary(mtcars)
我们可以快速观察数据范围、均值、中位数、最大最小值,判断是否有异常。
2️⃣ 查看变量关系
我们想预测的是 mpg(油耗),先看看它与其他变量的关系:
ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point(color = "steelblue", size = 3) + geom_smooth(method = "lm", se = FALSE, color = "red") + labs(title = "汽车重量与油耗的关系", x = "重量", y = "油耗")
结果分析:
从图中可以看到,重量越大,油耗越低,两者呈负相关。
🧮 六、线性回归模型(Linear Regression)
线性回归是最基础的监督学习模型,它假设目标变量 yyy 与输入特征 XXX 存在线性关系:
y=β0+β1x1+β2x2+⋯+βnxn+ϵy = \beta_0 + \beta_1x_1 + \beta_2x_2 + \cdots + \beta_nx_n + \epsilony=β0+β1x1+β2x2+⋯+βnxn+ϵ
1️⃣ 模型训练
我们使用 重量(wt) 和 马力(hp) 来预测 油耗(mpg):
model_lm <- lm(mpg ~ wt + hp, data = mtcars) summary(model_lm)
结果示例:
Coefficients: (Intercept) 37.2273 wt -3.8778 hp -0.0318 R-squared: 0.8268
解释:
-
截距(37.22):理论上车重与马力为0时的油耗。
-
每增加1单位重量,油耗降低约3.88。
-
每增加1单位马力,油耗降低约0.03。
-
R2=0.8268R^2 = 0.8268R2=0.8268,说明模型能解释约82.7%的油耗变异。
2️⃣ 模型预测
mtcars$pred_lm <- predict(model_lm, newdata = mtcars)
3️⃣ 可视化对比真实值与预测值
ggplot(mtcars, aes(x = mpg, y = pred_lm)) + geom_point(color = "blue", size = 3) + geom_abline(slope = 1, intercept = 0, color = "red", linetype = "dashed") + labs(title = "线性回归预测 vs 真实值", x = "真实油耗", y = "预测油耗")
图中点越靠近红色虚线(y=x),说明预测越准确。
4️⃣ 计算误差指标
mse_lm <- mean((mtcars$mpg - mtcars$pred_lm)^2)
rmse_lm <- sqrt(mse_lm)
cat("线性回归模型 MSE:", round(mse_lm, 3), "\nRMSE:", round(rmse_lm, 3))
输出示例:
线性回归模型 MSE: 6.003 RMSE: 2.45
🌳 七、决策树模型(Decision Tree)
线性模型适合线性关系,而决策树能捕捉非线性特征与交互效应,是一种强大的可解释算法。
1️⃣ 模型训练
model_tree <- rpart(mpg ~ wt + hp, data = mtcars, method = "anova")
2️⃣ 可视化树结构
rpart.plot(model_tree, type = 3, fallen.leaves = TRUE, box.palette = "Blues")
树状图解释:
-
每个节点代表一个特征划分条件;
-
叶子节点显示该区域的平均油耗;
-
模型通过“分裂”逐步细化预测。
3️⃣ 模型预测与误差
mtcars$pred_tree <- predict(model_tree, newdata = mtcars)
mse_tree <- mean((mtcars$mpg - mtcars$pred_tree)^2)
rmse_tree <- sqrt(mse_tree)
cat("决策树模型 MSE:", round(mse_tree, 3), "\nRMSE:", round(rmse_tree, 3))
输出示例:
决策树模型 MSE: 5.450 RMSE: 2.33
比线性回归略优,说明树模型在捕捉非线性方面更灵活。
📊 八、模型效果对比与可视化
1️⃣ 两种模型预测结果对比
comparison <- data.frame( mpg = mtcars$mpg, pred_lm = mtcars$pred_lm, pred_tree = mtcars$pred_tree ) ggplot(comparison) + geom_point(aes(x = mpg, y = pred_lm), color = "steelblue", size = 3) + geom_point(aes(x = mpg, y = pred_tree), color = "orange", size = 3) + geom_abline(slope = 1, intercept = 0, color = "red", linetype = "dashed") + labs(title = "线性回归 vs 决策树预测对比", x = "真实油耗", y = "预测油耗")
2️⃣ 模型精度比较图
mse_df <- data.frame(
model = c("Linear Regression", "Decision Tree"),
MSE = c(mse_lm, mse_tree)
)
ggplot(mse_df, aes(x = model, y = MSE, fill = model)) +
geom_bar(stat = "identity") +
labs(title = "模型MSE对比", y = "均方误差") +
theme_minimal()
🧭 九、模型总结与扩展方向
| 模型 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 线性回归 | 简单易懂、速度快、可解释性强 | 只能拟合线性关系 | 数值型特征、线性趋势数据 |
| 决策树 | 可处理非线性、特征自动选择 | 易过拟合、对噪声敏感 | 多变量、复杂关系数据 |
✅ 结论:
-
对简单数据,线性回归已能很好地解释;
-
若变量间存在复杂交互,决策树往往更优;
-
实际项目中,可以通过交叉验证、集成模型(如随机森林)进一步提升精度。
💡 十、下一步学习建议
如果你已经掌握了本文的基础内容,推荐继续学习以下方向👇:
-
随机森林(Random Forest)
-
包:
randomForest -
原理:集成多棵决策树投票平均,提升泛化能力。
-
-
梯度提升树(XGBoost / LightGBM)
-
包:
xgboost,lightgbm -
常用于比赛与工业级建模。
-
-
分类问题模型
-
glm()逻辑回归 -
rpart(method="class")分类树
-
-
模型调参(Hyperparameter Tuning)
-
使用
caret::train()统一管理模型训练与交叉验证。
-
-
可解释性分析
-
学习
vip、DALEX包来解释模型特征重要性。
-
📘 十一、完整可复制代码汇总
# 加载库
library(tidyverse)
library(caret)
library(rpart)
library(rpart.plot)
library(ggpubr)
# 数据集
data(mtcars)
# 线性回归
model_lm <- lm(mpg ~ wt + hp, data = mtcars)
mtcars$pred_lm <- predict(model_lm, newdata = mtcars)
mse_lm <- mean((mtcars$mpg - mtcars$pred_lm)^2)
# 决策树
model_tree <- rpart(mpg ~ wt + hp, data = mtcars, method = "anova")
mtcars$pred_tree <- predict(model_tree, newdata = mtcars)
mse_tree <- mean((mtcars$mpg - mtcars$pred_tree)^2)
# 可视化对比
ggarrange(
ggplot(mtcars, aes(x = mpg, y = pred_lm)) +
geom_point(color = "blue", size = 3) +
geom_abline(slope = 1, intercept = 0, linetype = "dashed") +
labs(title = "线性回归预测", x = "真实值", y = "预测值"),
ggplot(mtcars, aes(x = mpg, y = pred_tree)) +
geom_point(color = "orange", size = 3) +
geom_abline(slope = 1, intercept = 0, linetype = "dashed") +
labs(title = "决策树预测", x = "真实值", y = "预测值"),
ncol = 2, nrow = 1
)
🏁 十二、总结
通过本篇文章,你已经掌握了R语言中:
-
数据分析与可视化基本流程;
-
使用
lm()构建线性回归模型; -
使用
rpart()构建决策树模型; -
模型预测与误差评估;
-
两种模型的可视化与对比。
这就是R语言机器学习的入门路径。
理解了这两种算法后,你就能轻松过渡到更复杂的模型(如随机森林、SVM、XGBoost),
从而逐步迈入真正的数据科学实战。
更多推荐
所有评论(0)