25、机器学习:从基础到进阶的全面指南

机器学习:从基础到进阶的全面指南

1. 模型训练成果展示

在模型训练过程中,经过多个轮次(Epoch)的迭代,模型性能逐步提升。例如,在第 4 个轮次(Epoch 4/5)中,训练集上的损失(loss)为 0.0472,准确率(acc)达到 0.9852;验证集上的损失(val_loss)为 0.0258,准确率(val_acc)为 0.9893。到第 5 个轮次(Epoch 5/5)时,训练集损失进一步降低至 0.0404,准确率提升到 0.9871;验证集损失为 0.0259,准确率达到 0.9907。最终测试得分(Test score)为 0.025926338075212205,测试准确率(Test accuracy)高达 0.990742645546184。对于前五位数字分类器,经过 5 个轮次的训练后,测试准确率达到 99.8%;经过迁移和微调后,后五位数字的测试准确率为 99.2%。

2. 强化学习基础概念

强化学习是一种基于与环境交互的目标导向学习方法,其目标是让智能体(agent)在环境中采取行动,以最大化其获得的奖励。智能体可以看作是一个智能程序,而环境则是外部条件。

2.1 信用分配问题

以教狗新技能为例,不需要直接告诉狗该做什么,而是在它做对时给予奖励,做错时进行惩罚。狗需要在每一步记住是什么行为导致了奖励或惩罚,这就是信用分配问题。在计算机智能体的训练中,智能体的目标是从状态 st 转移到状态 st+1,找到能最大化预期折扣奖励总和的行为函数,并将状态映射到动作。

2.2 Q - 学习规则

根据 Deepmind Technologies 在 2013 年发表的论文,Q - 学习的状态更新规则为:Q[s,a]new = Q[s,a]prev + α ∗ (r + γ∗max(s,a) – Q[s,a]prev)。其中,α 是学习率,r 是最新动作的奖励,γ 是折扣因子,max(s,a) 是最佳动作的新值估计。如果知道下一个时间步所有可能动作 a’对应的序列 s’的最优值 Q[s,a],那么最优策略就是选择能最大化 r + γ∗max(s,a) – Q[s,a]prev 预期值的动作 a’。

2.3 迷宫示例

假设有一个智能体试图从迷宫中出来,它可以随机向任何方向移动一个方格或区域,若成功走出迷宫则获得奖励。通常将强化问题形式化为马尔可夫决策过程。例如,智能体处于状态 b(迷宫区域),目标是到达状态 f,若一步能从 b 到达 f,则在允许智能体到达目标状态的节点之间的连接上设置奖励为 100(否则为 0)。以下是 Q - 学习的示例代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection

# defines the reward/link connection graph
R = np.array([[-1, -1, -1, -1,  0,  -1],
              [-1, -1, -1,  0, -1, 100],
              [-1, -1, -1,  0, -1,  -1],
              [-1,  0,  0, -1,  0,  -1],
              [ 0, -1, -1,  0, -1, 100],
              [-1,  0, -1, -1,  0, 100]]).astype("float32")
Q = np.zeros_like(R)

# learning parameter
gamma = 0.8

# Initialize random_state
initial_state = randint(0,4)

# This function returns all available actions in the state given as an argument
def available_actions(state):
    current_state_row = R[state,]
    av_act = np.where(current_state_row >= 0)[1]
    return av_act

# This function chooses at random which action to be performed within the range
# of all the available actions.
def sample_next_action(available_actions_range):
    next_action = int(np.random.choice(available_act,1))
    return next_action

# This function updates the Q matrix according to the path selected and the Q
# learning algorithm
def update(current_state, action, gamma):
    max_index = np.where(Q[action,] == np.max(Q[action,]))[1]
    if max_index.shape[0] > 1:
        max_index = int(np.random.choice(max_index, size = 1))
    else:
        max_index = int(max_index)
    max_value = Q[action, max_index]
    # Q learning formula
    Q[current_state, action] = R[current_state, action] + gamma * max_value

# Get available actions in the current state
available_act = available_actions(initial_state)

# Sample next action to be performed
action = sample_next_action(available_act)

# Train over 100 iterations, re-iterate the process above).
for i in range(100):
    current_state = np.random.randint(0, int(Q.shape[0]))
    available_act = available_actions(current_state)
    action = sample_next_action(available_act)
    update(current_state,action,gamma)

# Normalize the "trained" Q matrix
print ("Trained Q matrix: \n", Q/np.max(Q)*100)

# Testing
current_state = 2
steps = [current_state]
while current_state != 5:
    next_step_index = np.where(Q[current_state,] == np.max(Q[current_state,]))[1]
    if next_step_index.shape[0] > 1:
        next_step_index = int(np.random.choice(next_step_index, size = 1))
    else:
        next_step_index = int(next_step_index)
    steps.append(next_step_index)
    current_state = next_step_index

# Print selected sequence of steps
print ("Best sequence path: ", steps)

运行上述代码,得到的最佳序列路径为 [2, 3, 1, 5]。

3. 机器学习学习历程回顾

3.1 学习步骤概述

学习机器学习可以分为六个步骤:
1. 步骤 1 :学习 Python 3 编程语言的核心哲学和关键概念。
2. 步骤 2 :了解机器学习的历史、高级分类(监督学习、无监督学习、强化学习),以及构建机器学习系统的三个重要框架(SEMMA、CRISP - DM、KDD 数据挖掘过程),学习主要的数据处理分析包(NumPy、Pandas、Matplotlib)及其关键概念,并比较不同的核心机器学习库。
3. 步骤 3 :掌握不同的数据类型、关键数据质量问题及处理方法,进行探索性分析,学习监督学习和无监督学习的核心方法,并通过示例进行实践。
4. 步骤 4 :学习模型诊断的各种技术,如用于处理过拟合的装袋法、用于处理欠拟合的提升法、集成技术,以及用于构建高效模型的超参数调优(网格搜索、随机搜索)。
5. 步骤 5 :了解文本挖掘的过程,包括数据收集、数据预处理、数据探索或可视化,以及可以构建的各种模型。学习如何构建基于协作或内容的推荐系统,以实现个性化用户体验。
6. 步骤 6 :通过感知机学习人工神经网络,学习用于图像分析的卷积神经网络(CNN)、用于文本分析的循环神经网络(RNN),以及一个简单的强化学习概念示例。

3.2 问题类型与潜在算法

不同的问题类型可以使用不同的机器学习算法,以下是一些常见问题类型及其对应的潜在算法:
| 问题类型 | 示例用例 | 潜在机器学习算法 |
| — | — | — |
| 预测连续数字 | 商店每日/每周销售额预测 | 线性回归或多项式回归 |
| 预测计数类型的连续数字 | 一个班次需要多少员工?新商店需要多少停车位? | 具有泊松分布的广义线性模型 |
| 预测事件的概率(真/假) | 交易是否为欺诈的概率 | 二元分类模型(逻辑回归、决策树模型、提升模型、kNN 等) |
| 预测多个可能事件中的事件概率(多类) | 交易是高风险/中风险/低风险的概率 | 多类分类模型(逻辑回归、决策树模型、提升模型、kNN 等) |
| 根据相似度对内容进行分组 | 对相似的客户进行分组?对相似的类别进行分组? | k - 均值聚类、层次聚类 |
| 降维 | 哪些重要维度包含最大百分比的信息? | 主成分分析(PCA)、奇异值分解(SVD) |
| 主题建模 | 根据主题或主题结构对文档进行分组? | 潜在狄利克雷分配、非负矩阵分解 |
| 意见挖掘 | 预测文本相关的情感? | 自然语言工具包(NLTK) |
| 推荐系统 | 向用户推销哪些产品/项目? | 基于内容的过滤、协作过滤 |
| 文本分类 | 预测文档属于已知类别的概率? | 循环神经网络(RNN)、二元或多类分类模型 |
| 图像分类 | 预测图像属于已知类别的概率? | 卷积神经网络(CNN)、二元或多类分类模型 |

4. 模型构建实用建议

4.1 从问题和假设出发

在开始理解数据之前,应先明确使用数据要实现的目标。建议先列出一系列问题,并与领域专家密切合作,理解核心问题并构建问题陈述。这有助于选择合适的机器学习算法(监督学习或无监督学习),然后再去了解不同的数据来源。

4.2 避免从头开始重新发明轮子

机器学习开源社区非常活跃,有大量高效的工具可供使用,并且不断有新的工具被开发和发布。除非必要,否则不要尝试从头开始开发解决方案、算法或工具。在开始构建之前,应先了解市场上已有的解决方案。

4.3 从简单模型开始

始终从简单的模型(如回归模型)开始,因为这些模型可以用通俗易懂的语言向非技术人员解释。这有助于你和主题专家理解变量之间的关系,增强对模型的信心,并有助于创建合适的特征。只有当看到模型性能有显著提升时,再转向复杂的模型。

4.4 关注特征工程

相关特征是构建高效模型的关键,而不是特征数量越多越好。过多的特征可能会导致过拟合问题。将相关特征输入到机器学习算法中是构建高效模型的秘诀。特征工程是一门艺术,也是竞争机器学习中的关键区别因素。

4.5 警惕常见的机器学习陷阱

要小心处理一些常见的机器学习陷阱,如数据质量问题(缺失数据、异常值、分类数据、缩放)、分类中的不平衡数据集、过拟合和欠拟合。可以使用在之前学习中讨论过的适当技术来处理数据质量问题,使用集成技术和超参数调优等方法来提高模型性能。

5. 机器学习学习展望

通过这六个步骤的学习,你已经掌握了广泛的常用机器学习主题。每个主题都有许多参数可以控制和调整模型性能。为了简化学习过程,在很多情况下使用了默认参数。但建议你探索其他参数,并使用手动、网格或随机搜索来调整参数,以确保模型的健壮性。希望这次简化的机器学习学习之旅对你有所帮助,祝你在将所学应用到实际问题中取得成功。

下面是一个简单的 mermaid 流程图,展示了模型构建的基本流程:

graph LR
    A[明确问题和假设] --> B[选择合适算法]
    B --> C[收集和准备数据]
    C --> D[特征工程]
    D --> E[选择简单模型开始]
    E --> F[训练和评估模型]
    F --> G{性能提升明显?}
    G -- 是 --> H[尝试复杂模型]
    G -- 否 --> I[继续优化简单模型]
    H --> F
    I --> F

这个流程图展示了从明确问题到模型训练和评估的基本过程,以及根据模型性能决定是否转向复杂模型的决策过程。

6. 机器学习中的重要概念与技术

6.1 神经网络相关

  • 感知机 :感知机是人工神经网络的基础,存在生物神经元与人工神经元的区别。一个简单的人工神经元是前馈神经网络的基本组成部分,它是多层感知机的基础。多层感知机的算法基于梯度下降方法,其架构具有特定的表示形式。在使用 Keras 实现多层感知机时,涉及激活函数、模型编译、模型评估等操作;使用 Scikit - learn 也能实现多层感知机。
  • 卷积神经网络(CNN) :CNN 主要用于图像分析,它具有过滤器、层等关键元素。以 MNIST 数据集为例,在 Jupyter Notebook 中可以创建 CNN 模型,通过拟合模型进行训练。CNN 模型可以对图像的空间维度进行处理,并且可以对模型的层进行可视化。
  • 循环神经网络(RNN) :RNN 适用于文本分析,长短期记忆网络(LSTM)是 RNN 的一种特殊类型,它有特定的组件和优化器配置,在 Keras 中有相应的代码实现。

6.2 数据处理与分析相关

  • 数据预处理(文本) :文本数据预处理包括多个步骤,如去除噪声、句子分词、词性标注(PoS tagging)、词干提取、词形还原、n - 元组处理、词袋模型(BoW)、TF - IDF 计算等。以下是这些步骤的简要说明:
    1. 去除噪声 :清理文本中的无用信息。
    2. 句子分词 :将文本分割成句子。
    3. 词性标注 :为每个词标注词性。
    4. 词干提取 :提取词的主干部分。
    5. 词形还原 :将词还原为其基本形式。
    6. n - 元组处理 :将文本划分为 n 个词的组合。
    7. 词袋模型 :将文本表示为词的集合。
    8. TF - IDF 计算 :计算词的重要性。
  • 数据探索(文本) :文本数据探索可以通过共现矩阵、频率图、词汇分散图、词云等方式进行,以了解文本数据的特征。

6.3 模型评估与优化相关

  • 交叉验证 :K 折交叉验证是一种常用的模型评估方法,它可以分为普通 K 折交叉验证和分层 K 折交叉验证。分层 K 折交叉验证可以更好地处理数据的偏差和方差问题,并且可以绘制 ROC 曲线进行评估。
  • 超参数调优 :超参数调优是构建高效模型的关键步骤,常见的方法有网格搜索(GridSearch)和随机搜索(RandomSearch)。贝叶斯优化也是一种超参数调优方法,它可以减少噪声,并且与随机搜索有一定的关联。

6.4 聚类与降维相关

  • 聚类算法 :常见的聚类算法有 k - 均值聚类和层次聚类。k - 均值聚类的目标是将数据点划分到不同的簇中,其实现可以基于期望最大化(EM)算法。可以使用肘部方法和轮廓系数方法来确定 k - 均值聚类的最佳簇数。层次聚类则是通过逐步合并或分裂簇来进行聚类。
  • 降维技术 :主成分分析(PCA)和奇异值分解(SVD)是常用的降维技术。PCA 可以处理高维数据,并且可以对降维后的数据进行可视化。

7. 机器学习中的具体算法实现

7.1 回归算法

  • 线性回归 :线性回归用于预测连续变量,它通过拟合一条直线来建立自变量和因变量之间的关系。在实际应用中,需要考虑相关性和因果性、均方误差(MAE)、均方根误差(RMSE)、R 平方等指标。
  • 多项式回归 :多项式回归是线性回归的扩展,它可以处理自变量和因变量之间的非线性关系。通过增加多项式的次数,可以拟合更复杂的曲线,但也可能会导致过拟合问题。
  • 多元回归 :多元回归考虑多个自变量对因变量的影响,在实际应用中需要处理多重共线性和方差膨胀因子(VIF)等问题。可以使用普通最小二乘法(OLS)进行回归分析,并进行假设检验。
  • 非线性回归 :非线性回归用于处理自变量和因变量之间的非线性关系,它可以使用不同的函数形式进行拟合。

7.2 分类算法

  • 逻辑回归 :逻辑回归是一种常用的分类算法,它通过拟合一个逻辑函数来预测事件发生的概率。逻辑回归可以处理二元分类和多分类问题,在处理多分类问题时可以使用广义线性模型(GLM)。
  • 决策树 :决策树是一种基于树结构进行决策的分类算法,它通过对数据进行划分和生长来构建决策树。决策树的生长和停止有一定的规则,可以通过剪枝来避免过拟合问题。
  • 支持向量机(SVM) :SVM 是一种强大的分类算法,它通过寻找最优的超平面来划分不同类别的数据。SVM 可以使用不同的核函数来处理线性和非线性分类问题。
  • k - 近邻(kNN) :kNN 是一种简单的分类算法,它通过寻找最近的 k 个邻居来进行分类。kNN 的性能取决于 k 值的选择。

7.3 集成算法

  • 装袋法(Bagging) :装袋法是一种集成学习方法,它通过对多个模型进行训练并组合它们的结果来提高模型的性能。随机森林是装袋法的一个典型例子,它通过构建多个决策树来进行分类或回归。
  • 提升法(Boosting) :提升法是另一种集成学习方法,它通过迭代地训练多个弱分类器并将它们组合成一个强分类器。AdaBoost 和梯度提升是常见的提升算法。
  • 堆叠模型(Stacking) :堆叠模型是一种更复杂的集成方法,它通过将多个不同的模型的输出作为输入,再训练一个元模型来进行最终的预测。

7. 总结与建议

7.1 总结

通过对机器学习各个方面的学习,我们了解了从基础的 Python 编程到各种高级的机器学习算法和技术。我们学习了数据处理、特征工程、模型选择、评估和优化等关键步骤,以及如何根据不同的问题类型选择合适的算法。

7.2 建议

为了更好地掌握机器学习,以下是一些建议:
1. 深入学习 :不要满足于表面的了解,深入研究每个算法的原理和实现细节。
2. 实践项目 :通过实际项目来应用所学的知识,提高解决实际问题的能力。
3. 参数调优 :探索不同的参数设置,使用网格搜索、随机搜索等方法来优化模型性能。
4. 持续学习 :机器学习领域发展迅速,持续关注最新的研究和技术,不断更新自己的知识。

下面是一个 mermaid 流程图,展示了机器学习模型选择的基本流程:

graph LR
    A[明确问题类型] --> B{预测连续值?}
    B -- 是 --> C[考虑回归算法]
    B -- 否 --> D{预测类别?}
    D -- 是 --> E[考虑分类算法]
    D -- 否 --> F[考虑聚类或降维算法]
    C --> G[选择合适的回归模型]
    E --> H[选择合适的分类模型]
    F --> I[选择合适的聚类或降维模型]
    G --> J[训练和评估模型]
    H --> J
    I --> J
    J --> K{性能满足要求?}
    K -- 是 --> L[应用模型]
    K -- 否 --> M[调整模型或特征]
    M --> J

这个流程图展示了根据问题类型选择合适的机器学习模型,以及模型训练、评估和调整的基本过程。通过遵循这些步骤和建议,你可以更好地掌握机器学习,解决实际问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值