期末复习——核心知识点总结
2026年06月24日
选择 · 填空 · 简答核心考点
重要
数据清洗/准备的主要任务:
数据挖掘的主要任务:
重要
有监督:
无监督:
重要
R语言的数据类型
. . .
R 的五种数据对象:
| 对象 | 维度 | 类型限制 | 常用场景 |
|---|---|---|---|
| 向量 Vector | 一维 | 同类型 | 存储单列数据 |
| 矩阵 Matrix | 二维 | 同类型 | 数值计算 |
| 数据框 Data Frame | 二维 | 各列可不同 | 最常用,类似Excel表 |
| 列表 List | 任意 | 任意类型 | 存储复杂结构 |
| 因子 Factor | 一维 | 分类变量 | 存储类别标签 |
重要
数据框(Data Frame)是进行数据分析最常用的数据结构,它要求每一列的数据类型必须相同/一致,而每一行代表一个观测值。
数据框 vs 数据库
重要
填空高频考点:ggplot2 图层有哪几个要素?
ggplot2 图层五要素(按顺序记忆):
aes)——变量映射到视觉属性调整图像细节的四大工具:
| 工具 | 功能 |
|---|---|
| 标度(Scale) | 控制坐标轴、颜色、形状的映射方式 |
| 坐标系(Coord) | 笛卡尔坐标、极坐标等 |
| 分面(Facet) | 按变量分组绘制多张子图 |
| 主题(Theme) | 控制背景、网格线、字体等非数据元素 |
必须掌握的五大指标:
| 指标 | 取值范围 | 含义 |
|---|---|---|
| R²(判定系数) | [0, 1] | 因变量方差被模型解释的比例,越接近 1 拟合越好 |
| 调整后 R²(Adj. R²) | ≤ R² | 在 R² 基础上惩罚多余变量,多元回归模型比较首选 |
| 相关系数 r | [−1, 1] | 正值正相关,负值负相关,0 无线性关系 |
| F 统计量 p 值 | 显著性水平 | 检验整体回归方程是否显著(至少一个自变量有效) |
| 回归系数显著性(P值) | 显著性水平 | 检验某一自变量是否对因变量有显著影响 |
提示
系数含义答题模板
"在控制其他变量不变的情况下,\(x_1\) 每增加 1 单位,\(y\) 平均增加/减少 \(|\hat{\beta}_1|\) 个单位。"
混淆矩阵三大指标(confusionMatrix 输出):
| 指标 | 公式 | 业务含义(违约预测场景) |
|---|---|---|
| 准确率 Accuracy | (TP+TN) / 总数 | 整体预测正确的比例 |
| 敏感度/召回率 Sensitivity | TP / (TP+FN) | 真实违约者中被识别出来的比例,越高漏判越少 |
| 特异度 Specificity | TN / (TN+FP) | 真实未违约者中被识别正确的比例,越高误判越少 |
注记
AIC 值越小越好,用于比较不同逻辑回归模型的优劣;残差偏差越小拟合越好。
决策树节点包括:
决策树生成三步骤:
决策树优点:
# ─── 第一步:加载包(rpart 和 rpart.plot)─────────────────
library(rpart)
library(rpart.plot)
# ─── 第二步:划分训练集和测试集(70% / 30%)─────────────
set.seed(123)
n <- nrow(data)
train_idx <- sample(1:n, size = round(0.7 * n))
train <- data[train_idx, ]
test <- data[-train_idx, ]
# ─── 第三步:构建决策树(分类树 method="class",回归树 method="anova")─
tree_model <- rpart(
y ~ ., # 因变量 ~ 所有自变量
data = train,
method = "class", # 分类用 "class",回归用 "anova"
control = rpart.control(
cp = 0.01, # 复杂度参数(剪枝)
maxdepth = 5 # 最大深度
)
)
# ─── 第四步:可视化决策树 ──────────────────────────────────────
rpart.plot(tree_model, type = 2, extra = 104)
# ─── 第五步:预测与评估(分类用混淆矩阵,回归用 RMSE)─────
pred_class <- predict(tree_model, newdata = test, type = "class")
table(真实 = test$y, 预测 = pred_class)
# 回归树预测
pred_value <- predict(tree_model, newdata = test)
rmse <- sqrt(mean((pred_value - test$y)^2))随机森林的优缺点
# ─── 第一步:加载包(randomForest)─────────────────────────
library(randomForest)
# ─── 第二步:划分训练集和测试集(70% / 30%)─────────────
set.seed(123)
n <- nrow(data)
train_idx <- sample(1:n, size = round(0.7 * n))
train <- data[train_idx, ]
test <- data[-train_idx, ]
# ─── 第三步:构建随机森林模型 ────────────────────────────────
rf_model <- randomForest(
y ~ .,
data = train,
ntree = 500, # 树的数量
importance = TRUE # 计算变量重要性
)
# ─── 第四步:查看模型与变量重要性 ──────────────────────────
print(rf_model) # OOB 误差
importance(rf_model) # 变量重要性数值
varImpPlot(rf_model) # 变量重要性图
# ─── 第五步:预测与评估 ────────────────────────────────────────
pred_class <- predict(rf_model, newdata = test)
table(真实 = test$y, 预测 = pred_class) # 分类
# 回归预测(无需 type)
# pred_value <- predict(rf_model, newdata = test)
# rmse <- sqrt(mean((pred_value - test$y)^2))K均值聚类(K-Means)核心要点:
| 项目 | 内容 |
|---|---|
| 学习类型 | 无监督学习,划分式聚类 |
| 样本选择 | 有放回抽样(Bootstrap) |
| 距离度量 | 欧氏距离(Euclidean Distance) |
| 选择 K 值 | 肘部法则(Elbow)/ 轮廓系数(Silhouette) |
| R 函数 | kmeans(data, centers = k) |
层次聚类(Hierarchical Clustering)核心要点(填空必考):
# ─── 第一步:标准化(scale 消除量纲差异)───────────────────
cust1 <- scale(cust, center = TRUE, scale = TRUE)
# ─── 第二步:计算距离矩阵并聚类 ────────────────────────────
tree <- hclust(dist(cust1), method = "average")
# ─── 第三步:绘制树图并切割 ─────────────────────────────────
plot(tree) # 树状图
cluster <- cutree(tree, k = 3)
rect.hclust(tree, k = 3)
# ─── 第四步:各组均值分析 ───────────────────────────────────
aggregate(data, by = list(cluster), FUN = mean) # # ─── 第一步:标准化(scale 消除量纲差异)─────────────────
data_scaled <- scale(data, center = TRUE, scale = TRUE)
# ─── 第二步:肘部法则确定 K 值 ──────────────────────────────
wss <- sapply(1:10, function(k) {
kmeans(data_scaled, centers = k, nstart = 25)$tot.withinss
})
plot(1:10, wss, type = "b", main = "肘部法则确定 K 值")
# ─── 第三步:执行 K 均值聚类 ──────────────────────────────────
set.seed(123)
km_result <- kmeans(data_scaled, centers = 3, nstart = 25)
# ─── 第四步:查看聚类结果 ──────────────────────────────────────
table(km_result$cluster) # 各类样本数
km_result$centers # 聚类中心(标准化尺度)
# ─── 第五步:将聚类结果加入原始数据并分析 ────────────────
data$cluster <- factor(km_result$cluster)
aggregate(data[, 1:4], by = list(cluster = data$cluster), FUN = mean)
# ─── 第六步:可视化聚类结果 ──────────────────────────────────
library(ggplot2)
Library(factoextra)
fviz_nbclust(km_result, data = data_scaled)三大指标(简答 / 填空 / 选择均考):
重要
易错题(选择 / 简答)
一条规则的置信度是 90%,提升度只有 0.8,这条规则有价值吗?
没有价值。
Apriori 算法两大步骤:
找到所有可能的频繁项集:逐层搜索找到满足最小支持度阈值(support ≥ min_sup )的项集
关联规则生成:从每个频繁项集中生成具有高置信度的规则,即满足置信度大于最小置信度阈值(confidence ≥ min_conf )的规则
library(arules)
library(arulesViz)
# ─── 挖掘关联规则 ──────────────────
fit_1 <- apriori(
data,
parameter = list(support = 0.25, confidence = 0.8),
appearance = list(rhs = c("")),
control = list(verbose = F)
)
summary(fit_1) # 查看摘要
inspect(sort(fit_1, by = "lift")) # 按提升度排序
plot(fit_1, method = "graph") # 网络图可视化规则解读模板:
当购买A和B时,也会购买C的概率是 置信度 × 100%,该关联的提升度为 lift 倍(> 1,说明存在正向关联)。
数据预处理 · 建模案例
选列 & 改名
'data.frame': 32 obs. of 4 variables:
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
$ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
$ disp : num 160 160 108 258 360 ...
$ weight: num 2.62 2.88 2.32 3.21 3.44 ...
条件筛选记录
mpg cyl disp weight
Mazda RX4 21.0 6 160.0 2.620
Mazda RX4 Wag 21.0 6 160.0 2.875
Datsun 710 22.8 4 108.0 2.320
Fiat 128 32.4 4 78.7 2.200
Honda Civic 30.4 4 75.7 1.615
Toyota Corolla 33.9 4 71.1 1.835
创建新列
mpg cyl disp weight
Mazda RX4 21.0 6 160 2620
Mazda RX4 Wag 21.0 6 160 2875
Datsun 710 22.8 4 108 2320
Hornet 4 Drive 21.4 6 258 3215
Hornet Sportabout 18.7 8 360 3440
Valiant 18.1 6 225 3460
mpg cyl disp weight weight_mean
Mazda RX4 21.0 6 160 2620 3217
Mazda RX4 Wag 21.0 6 160 2875 3217
Datsun 710 22.8 4 108 2320 3217
Hornet 4 Drive 21.4 6 258 3215 3217
Hornet Sportabout 18.7 8 360 3440 3217
Valiant 18.1 6 225 3460 3217
去除缺失值 & 按降序排列
mpg cyl disp weight
Cadillac Fleetwood 10.4 8 472 5250
Lincoln Continental 10.4 8 460 5424
Chrysler Imperial 14.7 8 440 5345
Pontiac Firebird 19.2 8 400 3845
Hornet Sportabout 18.7 8 360 3440
Duster 360 14.3 8 360 3570
任务:建立油耗(mpg)与重量(wt)、变速箱形式(am)的线性回归方程,并预测 wt = 3.6、变速箱为手动am1 时的油耗。
'data.frame': 32 obs. of 11 variables:
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
$ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
$ disp: num 160 160 108 258 360 ...
$ hp : num 110 110 93 110 175 105 245 62 95 123 ...
$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
$ wt : num 2.62 2.88 2.32 3.21 3.44 ...
$ qsec: num 16.5 17 18.6 19.4 17 ...
$ vs : num 0 0 1 1 0 1 0 1 1 1 ...
$ am : num 1 1 1 0 0 0 0 0 0 0 ...
$ gear: num 4 4 4 3 3 3 3 4 4 4 ...
$ carb: num 4 4 1 1 2 1 4 2 2 4 ...
Call:
lm(formula = mpg ~ wt + am, data = data1)
Residuals:
Min 1Q Median 3Q Max
-4.530 -2.362 -0.132 1.403 6.878
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 37.3216 3.0546 12.22 5.8e-13 ***
wt -5.3528 0.7882 -6.79 1.9e-07 ***
am -0.0236 1.5456 -0.02 0.99
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 3.1 on 29 degrees of freedom
Multiple R-squared: 0.753, Adjusted R-squared: 0.736
F-statistic: 44.2 on 2 and 29 DF, p-value: 1.58e-09
1
18.03
系数含义答题模板:
在控制变速箱不变的情况下,重量每增加1000镑,每小时行驶里程平均下降约 \(\hat{\beta}_1\)英里; 变速箱为 1(手动档)相比自动档,每小时行驶里程平均下降 \(|\hat{\beta}_2|\) 英里。
# ─── 划分训练集 / 测试集 ─────────────────────────────────────
train <- train_data
test <- test_data
# ─── 逻辑回归模型 ───────────────────────────────────
fit2 <- glm(y ~ x1 + x2 + x3,
data = train,
family = binomial)
summary(fit2)
# ─── 预测 & 评估 ────────────────────────────────────────
prob <- predict(fit2, test, type = "response")
pred <- as.factor(ifelse(prob > 0.5, "Yes", "No"))
confusionMatrix(pred, test$default)| 指标 | 公式 | 业务含义 | 重要性 |
|---|---|---|---|
| 准确率(Accuracy) | (TP+TN) / 总数 | 整体预测正确的比例 | ⭐⭐ |
| 敏感度/召回率(Sensitivity) | TP / (TP+FN) | 真实违约者中,模型识别出来的比例→越高,漏判违约的风险越低 | ⭐⭐⭐(金融场景最重要) |
| 特异度(Specificity) | TN / (TN+FP) | 真实未违约者中,模型识别正确的比例→越高,误判正常客户为违约的比例越低 | ⭐⭐ |
注记
在违约预测场景中,敏感度/召回率(Sensitivity)最为关键:漏判一个真实违约者的代价远大于误判一个正常客户。银行更倾向于优化召回率,即便以牺牲部分准确率为代价。
library(dplyr)
# 读入数据,指定变量类型
college <- read.csv("college.csv",
colClasses = c(rep("character", 2), rep("numeric", 17))) #指定前两列为字符型,后17列为数值型
# 删除 Private 列(第2列)
college <- college %>%
select(-2)
# 对有极值的连续变量进行对数变换
college <- college %>%
mutate(
Apps = log(Apps),
Accept = log(Accept),
Enroll = log(Enroll),
F.Undergrad = log(F.Undergrad),
P.Undergrad = log(P.Undergrad),
Books = log(Books),
Personal = log(Personal),
Expend = log(Expend)
)
hist(college$Expend) Apps Accept Enroll Top10perc Top25perc F.Undergrad P.Undergrad
[1,] -0.01119 0.006786 0.42749 -0.2584 -0.1917 0.3233 0.3631
[2,] 0.24517 0.457026 0.06848 -0.6552 -1.3530 0.2526 0.8677
[3,] -0.15140 -0.110438 -0.37327 -0.3151 -0.2927 -0.6737 -0.6694
Outstate Room.Board Books Personal PhD Terminal S.F.Ratio
[1,] -0.7459 -0.9643 -0.6008 1.25838 -0.1629 -0.1157 1.0131
[2,] 0.4572 1.9080 1.2854 0.46978 -2.6739 -3.3760 -0.4774
[3,] 0.2012 -0.5540 -1.0357 -0.05064 -1.2041 -0.9307 -0.3006
perc.alumni Expend Grad.Rate
[1,] -0.8670 -0.54123 -0.3180
[2,] -0.5442 0.44314 -0.5509
[3,] 0.5856 -0.01358 -0.6673
groups
1 2 3 4 5
723 8 3 42 1
Name Apps Accept Enroll Top10perc Top25perc
1 Abilene Christian University 7.415 7.116 6.581 23 52
2 Adelphi University 7.690 7.562 6.238 16 29
3 Adrian College 7.264 7.000 5.817 22 50
4 Agnes Scott College 6.033 5.855 4.920 60 89
5 Alaska Pacific University 5.263 4.984 4.007 16 44
6 Albertson College 6.375 6.172 5.063 38 62
F.Undergrad P.Undergrad Outstate Room.Board Books Personal PhD Terminal
1 7.967 6.286 7440 3300 6.109 7.696 70 78
2 7.895 7.112 12280 6450 6.620 7.313 29 30
3 6.943 4.595 11250 3750 5.991 7.060 53 66
4 6.234 4.143 12960 5450 6.109 6.774 92 97
5 5.517 6.767 7560 4120 6.685 7.313 76 72
6 6.519 3.714 13500 3335 6.215 6.515 67 73
S.F.Ratio perc.alumni Expend Grad.Rate cluster
1 18.1 12 8.860 60 1
2 12.2 16 9.262 56 2
3 12.9 30 9.075 54 1
4 7.7 37 9.853 59 1
5 11.9 2 9.299 15 1
6 9.4 11 9.183 55 1
Group.1 Apps Accept
1 1 7.333 7.039
2 2 7.089 6.832
重要
结果解读示例:第1类均值_Apps < 第2类,说明第2类学校接收的申请量更多,可能为更知名或规模更大的私立高校;录取数均值同方向变化则进一步验证这一判断。
数据挖掘四任务:关联规则、聚类、分类、回归——数据预处理不在其中
R语言五大对象:向量、矩阵、数据框、列表、因子——数据库不是R对象
ggplot2 五要素:数据 → 美学映射(aes)→ 几何对象 → 统计变换 → 位置调整
回归分析:线性回归看 Adj.R² + F + 系数 p 值;逻辑回归需指定 family = binomial,评估用混淆矩阵三指标
决策树三步骤:特征选择 → 树生成 → 树剪枝;随机森林 = CART + Bagging + 有放回抽样
聚类分析:凝聚法(自下而上)/ 分裂法(自上而下);欧氏距离是样本间距离,不是连接方式
关联规则:support 保频率,confidence 保可靠,lift > 1 才有价值;提升度是核心筛选器
核心代码:lm / glm / summary / hclust / cutree / apriori / inspect / predict
数据挖掘与R语言 · 期末复习课件
2025—2026学年第二学期
「找到规律容易,找到有价值的规律难——无论是回归、聚类还是关联规则,评估指标永远比算法本身更重要。」
成都锦城学院 · 2023级财务管理
数据挖掘与R语言 | 期末复习