机器学习中的数据处理与可视化及函数式编程实践
立即解锁
发布时间: 2025-09-03 01:51:18 阅读量: 6 订阅数: 17 AIGC 

### 机器学习中的数据处理与可视化及函数式编程实践
#### 1. mlr3 管道中使用 PCA 进行降维
在机器学习中,将主成分分析(PCA)等预处理步骤集成到 mlr3 管道中,而非作为外部步骤,能让数据处理和模型训练更加流畅。
##### 1.1 准备工作
需要使用 mlr3 包及其附属包 mlr3learners、mlr3pipelines 和 mlr3tuning,数据包 mlrbench,以及 magrittr 包。
##### 1.2 操作步骤
1. **构建缩放和 PCA 的管道组件**:
```R
library(mlr3pipelines)
scale <- po("scale")
pca <- po("pca")
```
2. **构建管道起始部分**:
```R
library(magrittr)
pipel <- scale %>>%
pca
pipel$plot()
```
3. **添加学习器作为管道对象**:
```R
library(mlr3learners)
learner = lrn("classif.kknn")
learner$param_set$set_values(k = 4)
pipel <- pipel %>>%
po("learner", learner = learner)
pipel$plot()
```
4. **将管道转换为学习器**:
```R
p_learner <- as_learner(pipel)
```
5. **像使用普通学习器一样使用管道学习器**:
```R
library(mlbench)
data("BreastCancer")
selected <- BreastCancer[c("Cl.thickness", "Cell.size", "Cell.shape","Marg.adhesion", "Epith.c.size", "Bl.cromatin","Normal.nucleoli", "Mitoses", "Class")]
task <- as_task_classif(selected, target="Class")
resamp_kcv <- rsmp("cv")
resamp_kcv$param_set$values = list(folds = 3)
result_kcv <- resample(task, p_learner, resamp_kcv)
measures <- msrs(c("classif.precision", "classif.specificity", "classif.sensitivity"))
result_kcv$score(measures)
```
##### 1.3 工作原理
- 第一步是创建管道对象,使用 `po` 函数和对象名称,这里选择了“scale”和“pca”。
- 第二步使用 magrittr 管道 `%>>%` 运算符将各部分连接成管道,管道对象有 `$plot` 方法可查看管道。
- 第三步构建 k - NN 学习器,设置参数并添加到现有管道末尾。
- 第四步使用 `as_learner` 函数将整个管道转换为学习器对象。
- 第五步准备数据集、任务和重采样策略,运行并评估结果。
##### 1.4 更多信息
mlr3 生态系统中的许多组件都可作为管道组件。在 R 中输入以下代码可获取可用组件列表:
```R
library("mlr3pipelines")
as.data.table(mlr_pipeops)
```
#### 2. 创建 t - SNE 和 UMAP 嵌入
t - 分布式随机邻域嵌入(t - SNE)和均匀流形近似与投影(UMAP)是机器学习和数据可视化中常用的降维技术。
##### 2.1 技术介绍
- **t - SNE**:一种非线性技术,旨在将高维数据可视化到低维空间,同时保留数据的局部结构,有助于揭示在原始高维空间中不明显的数据点簇或组。
- **UMAP**:另一种非线性降维技术,因其可扩展性和效率而受到欢迎,同样注重保留局部结构,采用基于图论和优化技术的不同数学方法,常用于可视化包含数百万数据点的大型数据集。
这两种算法计算成本高,UMAP 通常比 t - SNE 快,但仍可能比 PCA 等线性技术慢。它们对嵌入的随机初始化敏感,运行相同算法使用不同随机种子可能产生不同结果,解释可视化时需注意。且得到的低维表示可能与原始特征无直接对应关系,重点是捕捉数据点之间的关系而非保留全局结构。两种技术都有需要设置的参数,如 t - SNE 中的困惑度和 UMAP 中的邻居数量,选择合适的参数值会显著影响嵌入的质量和可解释性。
##### 2.2 准备工作
使用 palmerpenguins 数据,以及 tidyr、dplyr 和 tibble 包处理数据,Rtsne、umap、purrr 和 ggplot2 包进行分析和可视化。
##### 2.3 操作步骤
1. **加载库和数据**:
```R
library(palmerpenguins)
library(tidyr)
library(dplyr)
library(tibble)
penguins_filtered <- penguins |>
drop_na() |>
select(-year) |>
mutate(ID=row_number())
penguins_scaled <- penguins_filtered |>
select(where(is.numeric)) |>
column_to_rownames("ID") |>
scale()
```
2. **定义参数空间和嵌入函数**:
```R
library(Rtsne)
space <- expand.grid(perp = seq(5, 50, by = 10), dim = 1:3)
tsne <- function(p, d) {
tsn <- Rtsne(penguins_scaled, perplexity = p, dimensions = p)
data.frame(
SNE1 = tsn$Y[,1],
SNE2 = tsn$Y[,2],
perplexity = p,
dimensions = d,
species = penguins_filtered$species
)
}
res <- purrr::map2(space$perp, space$dim, tsne) |>
purrr::list_rbind()
```
3. **绘制结果**:
```R
library(ggplot2)
ggplot(res) +
aes(SNE1,SNE2 ) +
geom_point(aes(colour = species)) +
facet_grid(p
```
0
0
复制全文
相关推荐










