数据挖掘与R语言

期末复习——核心知识点总结

2026年06月24日

复习导图

大纲

  • 第一部分:知识点分类
    • 数据挖掘基础 & R语言基础
    • 数据预处理 & ggplot2 可视化
    • 回归分析(线性回归 / 逻辑回归)
    • 决策树 & 回归树
    • 随机森林
    • 聚类分析(K均值 & 层次聚类)
    • 关联规则挖掘
  • 第二部分:例题精讲(数据预处理 · 建模)
    • 数据预处理题:
    • 建模案例:线性回归 / 逻辑回归 / 决策树与回归树 / 随机森林 / 层次聚类 / K均值聚类 / 关联规则

第一部分:知识点分类

选择 · 填空 · 简答核心考点

数据挖掘基础概念

重要

数据清洗/准备的主要任务:

  • 导入数据
  • 缺失值处理(Missing Values / NA值):删除法 / 填充(替换)法(特定值/均值)
  • 异常值处理(Outliers):箱线图(boxplot())观察或summary() 检查
  • 数据转换(Data Transformation)和格式修正
    • 变量重编码:如mutate() 结合if_else()或case_when()
    • 数据标准化/归一化:如scale()
    • 数据变形:如log() 进行对数变换,使其分布更接近正态分布
    • 数据类型转换:使用 as.numeric()、as.factor() 或 as.character() 将变量转换为需要的类型
  • 数据筛选与合并(Filtering & Joining)
    • 筛选:如filter() 按条件筛选
    • 选择:如select() 保留分析需要的列,剔除无关冗余字段
    • 创建新变量:如mutate()
    • 合并:当数据分散在多个表格时,使用 left_join()等函数跨表合并

数据挖掘的主要任务:

  • 回归:线性回归 / 逻辑回归
  • 分类:决策树 / 回归树 / 随机森林
  • 聚类: 层次聚类 / K均值聚类
  • 关联规则
  • 数据清洗数据预处理属于挖掘前的准备阶段,不是建模分析任务

数据挖掘四大任务速查

重要

有监督:

  • 线性回归 / 逻辑回归
  • 决策树 / 回归树
  • 随机森林

无监督:

  • 层次聚类
  • K均值聚类
  • 关联规则

R语言基础

重要

R语言的数据类型

  • 数值型(numeric)
  • 字符型/文本型(character)
  • 复数型(complex)
  • 逻辑型(logical):TRUE / FALSE

. . .

R 的五种数据对象:

对象 维度 类型限制 常用场景
向量 Vector 一维 同类型 存储单列数据
矩阵 Matrix 二维 同类型 数值计算
数据框 Data Frame 二维 各列可不同 最常用,类似Excel表
列表 List 任意 任意类型 存储复杂结构
因子 Factor 一维 分类变量 存储类别标签

重要

数据框(Data Frame)是进行数据分析最常用的数据结构,它要求每一列的数据类型必须相同/一致,而每一行代表一个观测值

数据框 vs 数据库

常用函数速查

数据预处理:缺失值处理

提示

R语言中的缺失值操作

is.na(df)                        # 判断是否为 NA
df[!is.na(df$列名), ]            # 删除含 NA 的行
df |> filter(!is.na())                 # 删除含 NA 的行
df$列名[is.na(df$列名)] <- mean(df$列名, na.rm = TRUE)  # 均值填充
df |>
  mutate(列名 = if_else(is.na(列名), mean(列名, na.rm = TRUE), 列名))  # 均值填充

ggplot2 数据可视化

重要

填空高频考点:ggplot2 图层有哪几个要素?

ggplot2 图层五要素(按顺序记忆):

  1. 数据集(data)——提供原始数据
  2. 美学映射(aesthetics, aes)——变量映射到视觉属性
  3. 几何对象(geom)——实际绘制的图形元素(点、线、柱)
  4. 统计变换(stat)——对数据进行统计处理(计数、平滑等)
  5. 位置调整(position)——处理图形元素的重叠问题

调整图像细节的四大工具:

工具 功能
标度(Scale) 控制坐标轴、颜色、形状的映射方式
坐标系(Coord) 笛卡尔坐标、极坐标等
分面(Facet) 按变量分组绘制多张子图
主题(Theme) 控制背景、网格线、字体等非数据元素

ggplot2 图表类型选择

回归分析:线性回归核心指标

必须掌握的五大指标:

线性回归核心指标速查
指标 取值范围 含义
R²(判定系数) [0, 1] 因变量方差被模型解释的比例,越接近 1 拟合越好
调整后 R²(Adj. R²) ≤ R² 在 R² 基础上惩罚多余变量,多元回归模型比较首选
相关系数 r [−1, 1] 正值正相关,负值负相关,0 无线性关系
F 统计量 p 值 显著性水平 检验整体回归方程是否显著(至少一个自变量有效)
回归系数显著性(P值) 显著性水平 检验某一自变量是否对因变量有显著影响

提示

系数含义答题模板

"在控制其他变量不变的情况下,\(x_1\) 每增加 1 单位,\(y\) 平均增加/减少 \(|\hat{\beta}_1|\) 个单位。"

逻辑回归核心指标

重要

逻辑回归的专属参数

fit <- glm(default ~ balance + income, 
           data = Default, 
           family = binomial)   # ← 必须指定 binomial,否则就不是逻辑回归

混淆矩阵三大指标(confusionMatrix 输出):

指标 公式 业务含义(违约预测场景)
准确率 Accuracy (TP+TN) / 总数 整体预测正确的比例
敏感度/召回率 Sensitivity TP / (TP+FN) 真实违约者中被识别出来的比例,越高漏判越少
特异度 Specificity TN / (TN+FP) 真实未违约者中被识别正确的比例,越高误判越少

注记

AIC 值越小越好,用于比较不同逻辑回归模型的优劣;残差偏差越小拟合越好。

决策树 & 集成学习

决策树节点包括:

  • 根节点:包含整个样本集
  • 内部节点:对应一次决策过程/一次属性测试
  • 叶节点:每个叶节点都对应一个决策结果

决策树生成三步骤:

  1. 特征选择——选择最优分裂特征(分类树用基尼系数衡量节点纯度,回归树用均方误差)
  2. 树生成——递归分裂,直到满足停止条件
  3. 树剪枝——去除过拟合分支,提升泛化能力

决策树优点:

  • 构建和预测过程可以图形方式显示,易于理解和解释
  • 不需要大规模的训练数据集,不需要进行数据标准化操作
  • 能够处理数值型和分类型数据
  • 能够处理多输出问题
  • 是白盒模型中的一种,很容易解释模型的内在思路
  • 对于异常的数据点有更强的包容性 . . .

决策树R实现

# ─── 第一步:加载包(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))

集成学习:Bagging vs Boosting

随机森林的优缺点

随机森林R实现

# ─── 第一步:加载包(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)核心要点(填空必考):

  • 凝聚法(自下而上):每个样本为一类,逐步合并
  • 分裂法(自上而下):全体为一类,逐步分裂
  • 簇间距离连接方式:最短距离法 / 最长距离法 / 平均距离法 / 质心距离法 / Ward 最小方差法(注意:欧氏距离是样本点间距离,不是簇间连接方式!

层次聚类 R 语言实现流程

# ─── 第一步:标准化(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)     # 

K均值聚类R实现

# ─── 第一步:标准化(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,这条规则有价值吗?

没有价值。

  • 提升度 0.8 < 1,说明 A 抑制了 B 的出现
  • 即:知道顾客买了 A 之后,B 的购买概率反而低于其基础概率
  • 置信度高不等于规则有价值,提升度才是核心筛选器

Apriori 算法两大步骤:

  1. 找到所有可能的频繁项集:逐层搜索找到满足最小支持度阈值(support ≥ min_sup )的项集

  2. 关联规则生成:从每个频繁项集中生成具有高置信度的规则,即满足置信度大于最小置信度阈值(confidence ≥ min_conf )的规则

  • 先验原理:若一个项集为频繁项集,则其所有的子集一定也为频繁项集

关联规则 R 语言实现

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,说明存在正向关联)。

第二部分:例题精讲

数据预处理 · 建模案例

数据预处理例题

选列 & 改名

▶️ 查看代码
library(dplyr)
library(tidyr)

df <- mtcars %>%
  select(mpg, cyl, disp, weight = wt) # 选择变量/变量改名

str(df)   # 截图显示结构
'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 > 15 且 weight < 3 的记录

df1 <- df %>% 
  filter(mpg > 15, weight < 3) #同时满足

# 等价的基础 R 写法:
#df1 <- df[df$mpg > 15 & df$weight < 3]

head(df1)
                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

创建新列

▶️ 查看代码
# 将重量weight转换成磅
df <- df %>% 
  mutate(weight = weight * 1000) # 根据公式创建

# 创建均值列

df_mean <- df %>% 
  mutate(weight_mean = mean(weight))

head(df)
                   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
▶️ 查看代码
head(df_mean)
                   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

去除缺失值 & 按降序排列

▶️ 查看代码
# 删除disp列的NA值

df2 <- df %>% 
  filter(!is.na(disp))

# 按降序排列disp列

df3 <- df2 %>% 
  arrange(-disp)

head(df3)
                     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和weight的散点图
df %>% 
  ggplot(aes(x = mpg, y = weight)) +
  geom_point()

▶️ 查看代码
plot(df$mpg, df$weight)

▶️ 查看代码
# 计算相关系数
cor(df$mpg, df$weight)
[1] -0.8677

箱线图

▶️ 查看代码
boxplot(df[, 1:4],
        col  = rainbow(4),
        main = "各变量的箱线图")

建模案例

线性回归

任务:建立油耗(mpg)与重量(wt)、变速箱形式(am)的线性回归方程,并预测 wt = 3.6、变速箱为手动am1 时的油耗。

▶️ 查看代码
# ─── 读入数据 ────────────────────────────────────────────────
data1 <- mtcars
str(data1)
'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 ...
▶️ 查看代码
# ─── 立模型 ──────────────────────────────────────────
fit1 <- lm(mpg ~ wt + am,   
          data = data1)

summary(fit1)                       

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
▶️ 查看代码
# ─── 预测新值 ────────────────────────────────────────────
df1 <- data.frame(wt = 3.6, am = 1)
predict(fit1, df1)                  
    1 
18.03 

对输出回归结果进行截图,并报告:每个自变量的系数及显著性水平(p值)、调整后的R²(Adjusted R-squared)、F统计量的p值。

写出回归方程,并解释模型中两个自变量的回归系数的含义。

系数含义答题模板:

在控制变速箱不变的情况下,重量每增加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)

逻辑回归:混淆矩阵解读

混淆矩阵三大指标——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)

▶️ 查看代码
# 对第2–18列(所有连续变量)进行标准化
college_scale <- scale(college[,2:18], center = TRUE, scale = TRUE)
head(college_scale, 3)
         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
▶️ 查看代码
# **对标准化数据做层次聚类(平均链接法),画谱系图。**

fit3 <- hclust(dist(college_scale), method = "average")

# 绘制谱系图
plot(fit3, hang = -1, labels = FALSE,
     main = "私立高校层次聚类谱系图(Average Linkage)",
     xlab = "", sub = "", ylab = "欧氏距离")

▶️ 查看代码
#类别数为5时的层次聚类结果

# 切分为 5 类
groups <- cutree(fit3, k = 5)

# 查看各类别样本数
table(groups)
groups
  1   2   3   4   5 
723   8   3  42   1 
▶️ 查看代码
# 在谱系图上叠加 5 类划分
plot(fit3)
rect.hclust(fit3, k = 5,
            border = c("#4472C4","#e05c2a","#2eab6e","#e8a838","#9b59b6"))

▶️ 查看代码
# 将聚类结果合并到原始数据框
# college_clustered <- college %>%
#   mutate(cluster = factor(groups))

college_clustered <- data.frame(college, cluster = groups)

# 查看前 6 行
head(college_clustered)
                          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
▶️ 查看代码
# 通过聚合函数计算各个分组的均值

# 筛选样本最多的两个聚类(观察 table(groups) 的结果后填入)
top2_clusters <- subset(college_clustered,cluster == 1 |cluster == 2)
# 用聚合函数比较 Apps 和 Accept 的均值
aggregate(top2_clusters[,2:3],
          by = list(top2_clusters$cluster),
          FUN = mean)
  Group.1  Apps Accept
1       1 7.333  7.039
2       2 7.089  6.832

重要

结果解读示例:第1类均值_Apps < 第2类,说明第2类学校接收的申请量更多,可能为更知名或规模更大的私立高校;录取数均值同方向变化则进一步验证这一判断。

▶️ 查看代码
library(ggplot2)
# 以 Apps 为横轴、Accept 为纵轴绘制散点图

ggplot(college_clustered,
       aes(x = Apps, y = Accept, color=as.factor(cluster))) +
  geom_point() +
  scale_shape_manual(values=c("circle", "square", "triangle", "plus", "cross"))

本讲小结

主要内容

  • 数据挖掘四任务:关联规则、聚类、分类、回归——数据预处理不在其中

  • 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级财务管理