机器学习中的图像、时间序列与文本数据处理
1. 图像分类中的迁移学习与过拟合问题
1.1 迁移学习
在图像分类领域,迁移学习是一个重要的概念。它避免了从头开始设计神经网络(包括密集层、卷积层等细节),而是基于他人已证明有效的网络进行构建。可以直接使用该网络,也可以将其作为起点进行微调。
1.2 过拟合问题的解释
在图像分类中,过度参数化的网络取得成功似乎与传统的过拟合观念相矛盾。关键在于,在图像环境中,误分类率往往很低,对于高度调优的网络而言接近 0。这类似于第 10 章中提到的可分离设置。
以两类数据的分离为例,存在无数条线可以区分这两类数据,支持向量机(SVM)会选择两类中最接近两点中间的那条线,但实际上也可以使用其他线。而且,分隔线不一定是直线,也可以是“曲线”,例如使用 SVM 的多项式核得到的曲线。由于两类数据的清晰分离,我们可以拟合一个非常复杂的曲线(如高次多项式),即使曲线方程中的系数数量(p 值)远大于数据点数量(n),仍能获得完美的预测精度。结合神经网络与多项式回归的联系,这为图像分类中过度参数化的成功提供了合理的解释。
1.3 卷积神经网络(CNNs)概述
从高层次来看,CNN 的工作原理很简单:将图像分割成小块,然后对分割后的数据应用神经网络。然而,细节决定成败,在实际操作中,跟踪数据从一层到另一层的维度变化可能具有挑战性。对于希望深入学习的读者来说,线性代数和微积分的背景知识会很有帮助。
2. 时间序列数据处理
2.1 时间序列数据的定义与示例
时间序列是按时间索引的数据集,通常具有固定的时间间隔。常见的例子包括:
- 股票市场数据:如某只股票的每日甚至每小时价格。
- 天气数据:每日或更精细粒度的数据。
- 人口统计数据:如每月或每年的出生人数,用于规划学校容量。
- 心电图数据:按固定时间间隔测量心脏的电活动。
一种特殊的时间序列是书面或口头语言,其中“时间”指的是单词的位置。
2.2 时间序列数据转换为矩形形式
在机器学习讨论中,常听到“矩形数据”和“表格数据”,指的是通常的 n × p 数据框或矩阵,其中 n 是行数,每行代表一个具有 p 个特征的数据点。虽然图像数据也具有类似的形式,但通常不被称为矩形数据。而时间序列数据可以转换为矩形形式,然后应用机器学习方法。
2.2.1 简单示例
假设训练集时间序列 x 为 (5,12,13,8,88,6),假设这是每日数据。使用滞后 2 的方法,即根据前两日的数据预测下一日的数据:
- 用 5 和 12 预测第 3 天。
- 用 12 和 13 预测第 4 天。
- 用 13 和 8 预测第 5 天。
- 用 8 和 88 预测第 6 天。
用“X”(特征矩阵)和“Y”(结果向量)表示时,由于滞后为 2,需要 2 个先前的数据点,所以 X 只有 4 行,Y 的长度为 4。
2.2.2 regtools 函数 TStoX()
TStoX() 函数可将时间序列转换为“X”矩阵,“Y”存储在最后一列。示例代码如下:
x <- c(5,12,13,8,88,6)
w <- TStoX(x,2)
print(w)
输出结果为:
[,1] [,2] [,3]
[1,] 5 12 13
[2,] 12 13 8
[3,] 13 8 88
[4,] 8 88 6
可以将矩阵转换为数据框:
wd <- as.data.frame(w)
print(wd)
输出结果为:
V1 V2 V3
1 5 12 13
2 12 13 8
3 13 8 88
4 8 88 6
然后可以使用 qe*-series 函数,如随机森林:
qeRF(wd,'V3',holdout=NULL)
需要注意的是,不能将保留集设为数据的随机子集,因为剩余数据不再是连续的时间周期。
2.3 qeTS() 函数
qeTS() 函数是一个方便的包装器,它将时间序列格式转换为“X, Y”形式,然后应用喜欢的机器学习方法。调用形式如下:
qeTS(lag,data,qeName,opts=NULL,
holdout=floor(min(1000, 0.1 * length(data))))
其中,qeName 是 qe*-series 函数的名称,如 ‘qeRF’;opts 允许使用非默认参数。示例代码如下:
eus <- EuStockMarkets
tsout <- qeTS(5,eus,'qeKNN',opts=list(k=10))
在时间序列上下文中,交叉验证通常很困难,因为不能随机选择保留集。但 qeTS() 函数在 TStoX() 输出的连续值集合上进行保留集操作,因此可行。
2.4 天气数据示例
使用 NASA 收集的天气时间序列数据,预测降水情况。代码如下:
data(weatherTS)
ptot <- weatherTS$PRECTOT
z <- qeTS(2,ptot,'qeRF',holdout=NULL)
print(length(ptot))
print(predict(z,ptot[4016:4017]))
预测结果显示,预测的降雨量略超过 1 英寸。
尝试不同的滞后值和机器学习方法:
# 不同滞后值的 k-NN 方法
replicMeans(1000,'qeTS(1,ptot,"qeKNN")$testAcc')
replicMeans(1000,'qeTS(2,ptot,"qeKNN")$testAcc')
replicMeans(1000,'qeTS(3,ptot,"qeKNN")$testAcc')
# 线性模型和多项式线性模型
replicMeans(1000,'qeTS(3,ptot,"qeLin")$testAcc')
replicMeans(1000,'qeTS(3,ptot,"qePolyLin")$testAcc')
# 随机森林
replicMeans(1000,'qeTS(3,ptot,"qeRF")$testAcc')
结果表明,滞后 3 天似乎效果最好,但要考虑抽样变化的影响。总体而言,k-NN 方法在该数据集上表现较好,但通过超参数调整,其他方法也可能更优。
2.5 滞后对偏差和方差的影响
滞后值会影响偏差和方差,但其影响可能较为复杂。较大的滞后值会增加偏差,因为较远的时间周期可能不太相关,类似于 k-NN 中较大的 k 值问题。而方差方面,较大的滞后值可以平滑每日(或其他时间)的变化,降低方差,但同时也会增加特征数量(p),从而增加方差,总体效果较为复杂。
3. 文本数据处理
3.1 文本分析概述
文本分析领域非常复杂,这里仅涉及文档分类,并采用词袋模型。不涉及高级方法,如循环神经网络(RNNs)和隐马尔可夫模型(HMMs)。
3.2 词袋模型
词袋模型是指选择一组单词(“袋子”),计算每个单词在每个文档类中出现的频率。这些频率通常存储在文档 - 词矩阵(DTM)中,矩阵元素 d[i,j] 表示单词 j 在文档 i 中出现的次数,也可以是 0 或 1,表示单词 j 是否出现在文档 i 中。矩阵 d 成为“X”,“Y”是类别标签向量,如金融、体育等。
例如,若软件检测到文档中包含“bond”和“yield”,则将其分类为金融类别。但这种简单模型可能不准确,因为文档中的句子含义可能不同。不过,词袋模型易于实现,在许多应用中表现良好。
3.3 qeText() 函数
qeText() 函数用于文本分类,调用形式如下:
qeText(data, yName, kTop = 50, stopWords = tm::stopwords("english"),
qeName, opts = NULL, holdout = floor(min(1000, 0.1 * length(data))))
其中,data 是数据框,每行代表一个文档,yName 列指定文档的类别;qeName 是要使用的机器学习方法;kTop 表示选择出现频率最高的 kTop 个单词作为特征;stopWords 是要忽略的停用词。
3.4 示例
3.4.1 测验数据示例
使用 qeML 包中的 quizzes 数据集,预测课程类别。代码如下:
data(quizzes)
z <- qeText(quizzes,qeName='qeRF')
print(predict(z,quizzes[8,1]))
预测结果为特定课程类别。
3.4.2 AG 新闻数据集示例
该数据集包含四类短新闻文章:世界、体育、商业和科技。代码如下:
library(textdata)
ag <- dataset_ag_news()
agdf <- as.data.frame(ag)
agdf[,1] <- as.factor(agdf[,1])
smallSet <- sample(1:nrow(agdf),10000)
agdfSmall <- agdf[smallSet,]
w <- qeText(agdfSmall[,c(1,3)],'class',qeName='qeSVM')
print(w$testAcc)
print(w$baseAcc)
结果显示,使用 SVM 方法将基础误差从 74% 降低到 46%,但仍较高,需要调整超参数,包括 kTop。
4. 矩阵、数据框和因子转换
4.1 矩阵简介
R 矩阵本质上是所有列均为数值的数据集,使用 [i,j] 表示法。可以在矩阵和数据框之间进行转换。示例代码如下:
library(regtools)
data(mlb)
hwa <- mlb[,4:6]
hwam <- as.matrix(hwa)
print(class(hwam))
print(head(hwam))
4.2 因子与虚拟变量、数据框与矩阵的转换
在 R 中,分类变量的正式类是因子,需要熟练掌握因子与虚拟变量之间的转换。一些 R 机器学习包会自动从因子生成虚拟变量,但有些则不会。regtools 函数 factorToDummies() 和 factorsToDummies() 可用于生成虚拟变量。同时,使用 as.matrix() 函数可以将数据框转换为矩阵。示例代码如下:
# 数据框转矩阵
hwam <- as.matrix(hwa)
# 矩阵转数据框
md <- as.data.frame(m)
综上所述,即使不使用高级方法,也可以为时间序列和文本数据拟合良好的预测模型。qe*-series 函数 qeTS() 和 qeText() 方便了机器学习方法的使用。
总结
本文涵盖了图像分类中的迁移学习和过拟合问题、时间序列数据处理、文本数据处理以及矩阵和数据类型转换等内容。通过具体示例和代码展示了如何应用不同的机器学习方法处理各类数据,为读者提供了实用的操作指南。在实际应用中,需要根据数据特点和问题需求选择合适的方法和参数,以获得更好的预测效果。
流程图:时间序列数据处理流程
graph TD;
A[获取时间序列数据] --> B[转换为矩形形式(TStoX)];
B --> C[选择机器学习方法(qeTS)];
C --> D[训练模型];
D --> E[预测结果];
表格:不同滞后值和方法的测试准确率
| 滞后值 | 方法 | 测试准确率 |
|---|---|---|
| 1 | qeKNN | 2.116511 |
| 2 | qeKNN | 2.051895 |
| 3 | qeKNN | 2.033376 |
| 3 | qeLin | 2.245138 |
| 3 | qePolyLin | 2.167949 |
| 3 | qeRF | 2.138265 |
5. 常见术语与缩写
5.1 缩写解释
以下是一些常见的机器学习缩写及其含义:
| 缩写 | 全称 | 含义 |
| ---- | ---- | ---- |
| k - NN | k - nearest neighbors | k 近邻算法 |
| MAPE | Mean Absolute Prediction Error | 平均绝对预测误差 |
| ML | machine learning | 机器学习 |
| n | - | 数据点数量(行数) |
| OME | overall misclassification error | 总体误分类误差 |
| p | - | 特征数量(列数) |
| PC | principal component | 主成分 |
| PCA | principal component analysis | 主成分分析 |
| r(t) | - | 真实回归函数 |
| SVM | support vector machine | 支持向量机 |
| UMAP | Uniform Manifold Approximation and Projection | 均匀流形近似与投影 |
5.2 术语对应
在统计学和机器学习中,有一些术语存在对应关系:
| 统计学术语 | 机器学习术语 |
| ---- | ---- |
| class | label |
| covariate | side information |
| dummy variable | one - hot coding |
| intercept term/constant term | bias |
| model fitting | learning |
| normal distribution | Gaussian distribution |
| observations | examples |
| prediction | inference |
| predictor variables | features |
| tuning parameter | hyperparameter |
6. 操作总结与拓展思考
6.1 操作总结
-
时间序列数据处理
:
- 获取时间序列数据,如股票价格、天气数据等。
-
使用
TStoX()函数将时间序列转换为矩形形式的“X”矩阵和“Y”向量。 -
选择合适的机器学习方法,通过
qeTS()函数进行模型训练和预测。 -
可以尝试不同的滞后值和机器学习方法,使用
replicMeans()函数评估不同设置下的测试准确率。
-
文本数据处理
:
- 准备文本数据,确保数据框中包含文档文本和类别标签。
-
使用
qeText()函数进行文本分类,可指定kTop选择高频单词作为特征,忽略停用词。 - 选择合适的机器学习方法,如 SVM、随机森林等,并根据测试准确率调整超参数。
-
数据类型转换
:
-
使用
as.matrix()函数将数据框转换为矩阵,使用as.data.frame()函数将矩阵转换为数据框。 -
使用
factorToDummies()和factorsToDummies()函数将因子转换为虚拟变量。
-
使用
6.2 拓展思考
- 时间序列数据 :滞后值对偏差和方差的影响较为复杂,在实际应用中需要综合考虑数据的特点和业务需求选择合适的滞后值。同时,可以尝试更多的机器学习方法和超参数组合,以提高预测的准确性。
- 文本数据 :词袋模型虽然简单易用,但忽略了单词的顺序和上下文信息。对于一些对语义理解要求较高的任务,可以考虑使用更高级的方法,如循环神经网络(RNNs)或隐马尔可夫模型(HMMs)。
- 图像数据 :迁移学习在图像分类中具有重要作用,但如何选择合适的预训练网络和进行有效的微调是需要进一步研究的问题。同时,卷积神经网络(CNNs)的细节实现需要一定的数学基础,对于初学者来说可能具有挑战性。
流程图:文本数据处理流程
graph TD;
A[获取文本数据] --> B[使用 qeText 函数处理];
B --> C[选择机器学习方法];
C --> D[训练模型];
D --> E[评估模型(测试准确率)];
E --> F{是否调整超参数};
F -- 是 --> C;
F -- 否 --> G[预测新文本类别];
表格:不同数据处理任务的关键函数
| 数据类型 | 关键函数 | 作用 |
|---|---|---|
| 时间序列 |
TStoX()
| 将时间序列转换为矩形形式 |
| 时间序列 |
qeTS()
| 时间序列数据的机器学习处理 |
| 文本 |
qeText()
| 文本数据的机器学习处理 |
| 数据类型转换 |
as.matrix()
| 数据框转矩阵 |
| 数据类型转换 |
as.data.frame()
| 矩阵转数据框 |
| 数据类型转换 |
factorToDummies()
| 因子转虚拟变量 |
总之,机器学习在处理图像、时间序列和文本数据方面有多种方法和工具可供选择。通过合理运用这些方法和工具,并不断调整参数和优化模型,能够提高预测的准确性和效率,为实际问题提供有效的解决方案。在未来的学习和实践中,读者可以进一步深入研究这些领域,探索更多的应用场景和技术创新。
图像、时间序列与文本数据处理
超级会员免费看

被折叠的 条评论
为什么被折叠?



