深度学习与无监督学习技术解析
1. 深度学习早期停止标准与模型结果
新的早期停止标准如下,其余代码与之前的版本相同:
stopping_metric = "AUC",
stopping_tolerance = 0.001,
stopping_rounds = 4,
epochs = 2000
两个模型的最终结果如下:
-
AUC值
:
| 数据集 | HomeWin | HW - NoOdds |
| ---- | ---- | ---- |
| train | 0.635 | 0.596 |
| valid | 0.678 | 0.632 |
| test | 0.648 | 0.616 |
-
准确率值
:
| 数据集 | HomeWin | HW - NoOdds |
| ---- | ---- | ---- |
| train | 0.595 | 0.567 |
| valid | 0.649 | 0.618 |
| test | 0.617 | 0.606 |
额外的轮次提升了训练和验证分数,但验证数据集的参考AUC为0.675,测试数据集为0.650,一个高于参考值,一个低于参考值。在准确率方面,目标值分别为0.650和0.634,表现不佳。
2. 深度学习调优总结
调优深度学习更像是一门艺术而非科学,众多参数让人感觉可能遗漏了重要的东西。MNIST数据的优异表现符合预期,而足球数据的糟糕表现有点出乎意料,这表明对于困难、嘈杂的数据集,深度学习可能无法超越其他算法,且耗时更长。建筑能源结果最为有趣,它需要完整的训练数据(而非交叉验证的90%)以及早期停止带来的额外轮次,才能实现理解上的大幅提升。
3. 更多深度学习参数
以下是未在前面使用的深度学习参数:
| 参数 | 描述 | 默认值 |
| ---- | ---- | ---- |
| missing_values_handling | 处理缺失值,“Skip”忽略含缺失值的行,“MeanImputation”将缺失值设为列均值 | MeanImputation |
| use_all_factor_levels | 每个枚举变量的每个级别都有一个输入神经元,设为false则删除每个枚举的第一个级别 | true |
| max_categorical_features | 最大分类特征数,通过哈希强制执行(实验性) | 无限制 |
| single_node_mode | 是否在集群的单个节点上运行 | false |
| fast_mode | 启用快速模式(反向传播的轻微近似) | true |
| force_load_balance | 强制额外的负载均衡以提高训练速度 | true |
| standardize | 数据是否自动归一化 | true |
| sparse | 数据是否有大量零值,设为true更高效 | false |
| sparsity_beta | 稀疏正则化(实验性) | 0.0 |
| initial_biases | 用于初始化模型偏置向量的H2OFrame ID列表 | 无 |
| initial_weights | 用于初始化模型权重矩阵的H2OFrame ID列表 | 无 |
| initial_weight_distribution | 权重初始化分布,可选“UniformAdaptive”、“Uniform”、“Normal” | UniformAdaptive |
| initial_weight_scale | 根据分布不同,可为范围或标准差 | 1.0 |
| rate | 学习率,越高越不稳定,越低收敛越慢 | 0.005 |
| rate_annealing | 学习率退火 | 1e - 6 |
| rate_decay | 层间学习率衰减因子 | 1 |
| adaptive_rate | 自适应学习 | true |
| epsilon | 自适应学习率平滑因子 | 1e - 8 |
| rho | 自适应学习率时间衰减因子 | 0.99 |
| momentum_ramp | 动量增加的训练样本数 | 1e - 6 |
| momentum_stable | 动量稳定后的最终值 | 0.0 |
| momentum_start | 训练开始时的初始动量 | 0.0 |
| nesterov_accelerated_gradient | 是否使用Nesterov加速梯度 | true |
4. 无监督学习概述
无监督学习是人类智能的核心优势,在机器学习中,它可以自动组织数据,可看作是一种数据压缩形式。如果有5000个输入列,且稀疏并包含大量重复,可以使用无监督学习技术将其减少到更易管理、信息更密集的12列,然后再使用监督学习技术。
5. K - 均值聚类
K - 均值聚类的思想是将数据分为k个组,每个数据项离其所在簇的中心比其他簇的中心更近。以自然语言处理(NLP)为例,使用他人处理好的tf - idf数据。
-
NLP数据准备
:
1. 运行cluster_analysis.ipynb获取数据。
2. 提取术语列表和tf - idf矩阵。
3. 将稀疏矩阵转换为pandas数据框并导出为csv文件。
import pandas as pd
d = pd.DataFrame(
tfidf_matrix.todense(),
index=titles,
columns=terms
)
d.to_csv("tfidf.csv")
-
K - 均值聚类代码示例
:
- R代码 :
library(h2o)
h2o.init(nthreads = -1)
tfidf <- h2o.importFile("./datasets/movie.tfidf.csv")
m <- h2o.kmeans(tfidf, x = 2:564, k = 5,
standardize = FALSE, init = "PlusPlus")
p <- h2o.predict(m, tfidf)
tapply(as.vector(tfidf[,1]), as.vector(p$predict), print)
- **Python代码**:
import h2o
h2o.init()
tfidf = h2o.import_file("./datasets/movie.tfidf.csv")
from h2o.estimators.K-means import H2OKMeansEstimator
m = H2OKMeansEstimator(k=5, standardize=False, init="PlusPlus")
m.train(x=range(1,564), training_frame=tfidf)
p = m.predict(tfidf)
d = tfidf[0].cbind(p).as_data_frame()
d.columns = ["movie","group"]
for ix, g in d.groupby("group"):
print("---", ix, "---")
print(', '.join(g["movie"]))
聚类结果可以作为电影推荐系统的基础,但由于每次运行分组变化较大,需要对输入数据进行更多处理。
6. 深度学习自动编码器
将h2o.deeplearning()用于无监督学习,通过设置autoencoder为true并取消设置y参数来切换模式。它会尝试学习输入,迫使隐藏层总结和压缩数据。
-
简单自动编码器示例
:
-
R代码
:
m <- h2o.deeplearning(
2:564, training_frame = tfidf,
hidden = c(2), auto-encoder = T, activation = "Tanh"
)
f <- h2o.deepfeatures(m, tfidf, layer = 1)
- **Python代码**:
m = h2o.estimators.deeplearning.H2OAutoEncoderEstimator(
hidden=[2],
activation="Tanh"
)
m.train(x=range(1,564), training_frame=tfidf)
f = m.deepfeatures(tfidf, layer=0)
简单自动编码器的MSE为0.035,结果可接受。后续还进行了19个模型的实验,探索在2到20个维度之间的降维效果。
深度学习与无监督学习技术解析
7. 自动编码器实验结果分析
在进行的19个模型实验中,对降维程度进行了探索,维度范围在2到20之间。每个模型的隐藏层设置为128, 64, nodes 。通过这些实验,可以观察到随着隐藏层维度的变化,均方误差(MSE)等指标也会发生相应的改变。
为了更直观地展示维度与MSE之间的关系,我们可以绘制一个简单的流程图:
graph LR
A[开始实验] --> B[设置隐藏层维度为2]
B --> C[训练模型并计算MSE]
C --> D{维度是否达到20}
D -- 否 --> E[增加维度]
E --> B
D -- 是 --> F[结束实验]
通过实验发现,随着维度的增加,MSE呈现出一定的变化趋势。在维度较低时,如2维,自动编码器需要在有限的维度内对数据进行压缩和表示,这可能导致一些信息的丢失,从而使得MSE相对较高。随着维度的增加,自动编码器有更多的空间来学习数据的特征,MSE会逐渐降低。但当维度增加到一定程度后,MSE的下降趋势可能会变得平缓,甚至可能出现过拟合的情况,导致MSE不再显著降低。
8. 无监督学习的应用与挑战
无监督学习在许多领域都有广泛的应用,如数据压缩、异常检测、推荐系统等。
-
数据压缩
:通过自动编码器将高维数据压缩到低维空间,减少数据的存储空间和计算成本。
-
异常检测
:利用聚类算法将数据分为不同的簇,异常数据点可能会偏离这些簇,从而被检测出来。
-
推荐系统
:如K - 均值聚类可以将用户或物品进行分组,根据用户的历史行为和所在的簇,为用户推荐相似的物品。
然而,无监督学习也面临着一些挑战:
-
结果的可解释性
:无监督学习的结果往往难以解释,例如聚类结果中的簇代表什么含义,自动编码器学习到的特征如何理解等。
-
数据质量的影响
:输入数据的质量对无监督学习的结果有很大影响。如果数据存在噪声、缺失值或分布不均匀等问题,可能会导致聚类不准确或自动编码器学习效果不佳。
-
参数选择的困难
:无监督学习算法通常有多个参数需要调整,如K - 均值聚类中的簇数k、自动编码器的隐藏层维度等。选择合适的参数需要一定的经验和实验。
9. 深度学习参数调优总结
在深度学习中,参数调优是一个关键的步骤。从前面介绍的众多深度学习参数可以看出,不同的参数对模型的性能有不同的影响。
-
学习率相关参数
:学习率(rate)、学习率退火(rate_annealing)、学习率衰减(rate_decay)等参数影响模型的收敛速度和稳定性。较高的学习率可能导致模型不稳定,而较低的学习率则会使收敛速度变慢。
-
初始化参数
:初始权重分布(initial_weight_distribution)和初始权重尺度(initial_weight_scale)决定了模型的初始状态,对模型的训练过程有重要影响。
-
正则化参数
:稀疏正则化(sparsity_beta)等参数可以防止模型过拟合,提高模型的泛化能力。
为了更好地进行参数调优,可以采用以下步骤:
1. 确定参数的取值范围:根据经验和文献,确定每个参数可能的取值范围。
2. 进行网格搜索或随机搜索:在参数取值范围内进行搜索,评估不同参数组合下模型的性能。
3. 选择最优参数组合:根据评估结果,选择性能最优的参数组合。
10. 未来发展趋势
随着数据量的不断增加和计算能力的提升,深度学习和无监督学习技术将不断发展。
-
更复杂的模型结构
:未来可能会出现更复杂的深度学习模型结构,能够更好地处理高维、复杂的数据。
-
与其他技术的融合
:无监督学习可能会与监督学习、强化学习等技术相结合,发挥各自的优势,解决更复杂的问题。
-
可解释性的提升
:研究人员将致力于提高无监督学习结果的可解释性,使得模型的决策更加透明和可信。
总之,深度学习和无监督学习技术在不断发展和完善,为我们处理各种复杂的数据问题提供了强大的工具。但同时,我们也需要深入理解这些技术的原理和应用,合理选择参数和算法,以获得更好的结果。
超级会员免费看
406

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



