21、深度学习与无监督学习技术解析

深度学习与无监督学习技术解析

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. 未来发展趋势

随着数据量的不断增加和计算能力的提升,深度学习和无监督学习技术将不断发展。
- 更复杂的模型结构 :未来可能会出现更复杂的深度学习模型结构,能够更好地处理高维、复杂的数据。
- 与其他技术的融合 :无监督学习可能会与监督学习、强化学习等技术相结合,发挥各自的优势,解决更复杂的问题。
- 可解释性的提升 :研究人员将致力于提高无监督学习结果的可解释性,使得模型的决策更加透明和可信。

总之,深度学习和无监督学习技术在不断发展和完善,为我们处理各种复杂的数据问题提供了强大的工具。但同时,我们也需要深入理解这些技术的原理和应用,合理选择参数和算法,以获得更好的结果。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值