[学习笔记] [机器学习] 1. 机器学习前置知识(机器学习概述、Matplotlib、Numpy、Pandas)

小明 2025-05-02 10:13:45 4
  1. 视频链接
  2. 所有数据集下载地址:数据集 1. 机器学习前置知识

1. 机器学习概述

1.1 机器学习算法分类

���据数据集组成不同,可以把机器学习算法分为:

  1. 监督学习
  2. 无监督学习
  3. 半监督学习
  4. 强化学习

1.1.1 监督学习

定义:输入数据是由输入特征值和目标值组成。

  • 函数的输出可以是一个连续的值(称为回归)
  • 输出是有限个离散值(称作分类)

    监督学习可分为:

    1. 回归问题:预测房价,根据样本集拟合出一条连续曲线。
    2. 分类问题:根据肿瘤特征判断良性还是恶性,得到的是结果是“良性”或者“恶性”,是离散的。

    1.1.2 无监督学习

    定义:输入数据是由输入特征值组成,没有目标值。

    • 输入数据没有被标记,也没有确定的结果。样本数据类别未知,需要根据样本间的相似性对样本集进行类别划分。

      有监督、无监督算法对比:

      1.1.3 半监督学习

      定义:训练集同时包有标记样本数据(有目标值)和未标记样本数据(无目标值)。

      1.1.4 强化学习

      定义:实质是 Auto Make Decisions 问题,即自动进行决策,并且可以做连续决策。

      举例:小孩想要走路,但在这之前,他需要先站起来,站起来之后还要保持平衡。接下来还要先迈出一条腿,是左腿还是右腿,迈出一步后还要迈出下一步。

      小孩就是agent,他试图通过采取行动(即行走)来操纵环境(行走的表面),并且从一个状态转变到另一个状态(即他走的每一步)。当他完成任务的子任务(即走了几步)时,孩子得到奖励(给巧克力吃);并且当他不能走路时,就不会给巧克力。

      主要包含五个元素: agent, action, reward, environment, observation

      在强化学习中,有两个核心概念:「智能体」(agent)和「环境」(environment)。环境表示智能体生存以及交互的世界。每一次交互时,智能体会观察到世界当前所处「状态」(state)的「观测值」(observation),然后决定采取什么「动作」(action)。环境会随着智能体的动作而发生变化,当然环境自身也可能一直处于变化中。智能体会从环境中接收到一个「奖励」(reward)信号,这个信号可能是一个数值,表示当前环境所处状态的好坏。

      • Agent:智能体,指的就是你写的算法,在游戏中就是玩家。
      • Action:行为,智能体通过一套策略输出一个行为作用到环境。
      • Reward:奖励值,环境反馈给智能体的奖励值。
      • Environment:外部环境,在游戏中就是游戏的环境。
      • Observation:状态值,环境反馈给智能体的状态值。

        强化学习的目标就是获得最多的累计奖励。

        监督学习和强化学习的对比:

        监督学习强化学习
        反馈映射输出的是之间的关系,可以告诉算法什么样的输入对应着什么样的输出输出的是给机器的反馈 reward function,即用来判断这个行为是好是坏
        反馈时间做了比较坏的选择会立刻反馈给算法结果反馈有延时,有时候可能需要走了很多步以后才知道以前的某一步的选择是好还是坏
        输入特征输入是独立同分布的面对的输入总是在变化,每当算法做出一个行为,它影响下一次决策的输入

        【拓展概念】什么是独立同分布?

        独立同分布(Independent and Identically Distributed,IID):

        • 在概率统计理论中,如果变量序列或者其他随机变量有相同的概率分布,并且互相独立,那么这些随机变量是独立同分布。
        • 在西瓜书中解释是:输入空间中的所有样本服从一个隐含未知的分布,训练数据所有样本都是独立地从这个分布上采样而得。

          独立、同分布、独立同分布的简单解释:

          • 独立:
            • 满足条件的例子:假设你有两个骰子,你分别把它们投掷一次。第一个骰子的点数不会影响第二个骰子的点数,所以这两次投掷是独立的。
            • 不满足条件的例子:假设你有一个骰子,你把它投掷两次。如果你只有在第一次投掷得到偶数时才进行第二次投掷,那么这两次投掷就不是独立的,因为第二次投掷是否发生取决于第一次投掷的结果。
            • 同分布:
              • 满足条件的例子:假设你有两个相同的骰子,每个骰子都有六个面,每个面上的点数都是 1 到 这两个骰子的概率分布是相同的,所以它们是同分布的。
              • 不满足条件的例子:假设你有两个不同的骰子,一个骰子有六个面,每个面上的点数都是 1 到 6;另一个骰子有四个面,每个面上的点数都是1到这两个骰子的概率分布是不同的,所以它们不是同分布的。
              • 独立同分布:
                • 满足条件的例子:如果你有两个相同的骰子,并且你分别把它们投掷一次。由于这两个骰子是相同的,所以它们是同分布的;由于第一个骰子的点数不会影响第二个骰子的点数,所以这两次投掷是独立的。因此,这两次投掷是独立同分布的。
                • 不满足条件的例子:如果你有两个不同的骰子,并且你只有在第一个骰子投掷得到偶数时才进行第二次投掷。由于这两个骰子不同,所以它们不是同分布的;由于第二次投掷是否发生取决于第一次投掷的结果,所以这两次投掷也不是独立的。因此,这两次投掷既不是独立也不是同分布。

                  小结:

                  In(输入)Out(输出)目的案例
                  监督学习有标签有反馈预测结果猫狗分类、房价预测
                  无监督学习无标签无反馈发现潜在结构“物以聚类,人以群分”
                  半监督学习部分有标签,部分无标签有反馈降低数据标记的难度在文本分类中,有大量未标记的文本数据和少量已标记的文本数据
                  强化学习决策流程及激励系统一系列行动长期利益最大化学下棋

                  1.2 模型评估

                  学习目标:

                  • 了解机器学习中模型评估的方法。
                  • 知道过拟合、欠拟合发生情况

                    模型评估是模型开发过程不可或缺的一部分。它有助于发现表达数据的最佳模型和所选模型将来工作的性能如何(模型的泛化性能)。

                    按照数据集的目标值不同,可以把模型评估分为分类模型评估和回归模型评估。

                    1.2.1 分类模型评估

                    1. 准确率(Accuracy):预测正确的数占样本总数的比例。
                    2. 其他评价指标:精确率(Precision)、召回率(Recall)、F1-score、AUC指标等

                    1.2.2 回归模型评估

                    均方根误差(Root Mean Squared Error,RMSE):RMSE 是一个衡量回归模型误差率(Loss)的常用公式。不过,它仅能比较误差是相同单位的模型。

                    R M S E = ∑ i n ( p i − y ^ i ) 2 n RMSE = \sqrt{\frac{\sum_i^n(p_i - \hat{y}_i)^2}{n}} RMSE=n∑in​(pi​−y^​i​)2​ ​

                    其中:

                    • y y y 为预测值
                    • y ^ \hat{y} y^​ 为真实值
                    • n n n 为样本数量

                      其他评价指标:

                      • 相对平方误差(Relative Squared Error,RSE)
                      • 平均绝对误差(Mean AbsoluteError,MAE)
                      • 相对绝对误差(Relative Absolute Error,RAE)

                        1.3 拟合

                        模型评估用于评价训练好的的模型的表现效果,其表现效果大致可以分为过拟合和欠拟合。

                        在训练过程中,你可能会遇到如下问题:

                        训练数据训练的很好啊,误差也不大,为什么在测试集上面有问题呢?当算法在某个数据集当中出现这种情况,可能就出现了拟合问题。

                        1.3.1 欠拟合

                        欠拟合(Under-fitting):模型学习的太过粗糙,连训练集中的样本数据特征关系都没有学出来。

                        因为机器学习到的天鹅特征太少了,导致区分标准太粗糙,不能准确识别出天鹅。

                        1.3.2 过拟合

                        过拟合(Over-fitting):所建的机器学习模型或者是深度学习模型在训练样本中表现得过于优越,导致在测试数据集中表现不佳。

                        机器已经基本能区别天鹅和其他动物了。然后,很不巧已有的天鹅图片全是白天鹅的,于是机器经过学习后,会认为天鹅的羽毛都是白的,以后看到羽毛是黑的天鹅就会认为那不是天鹅。


                        小结:

                        • 分类模型评估【了解】
                          • 准确率
                          • 回归模型评估【了解】
                            • RMSE —— 均方根误差
                            • 拟合【知道】
                              • 欠拟合
                                • 学习到的东西太少
                                • 模型学习的太过粗糙
                                • 过拟合
                                  • 学习到的东西太多
                                  • 学习到的特征多,不好泛化

                                    2. Matplotlib

                                    Matplotlib 是一个用于绘制数据可视化图表的 Python 库,可以满足各种绘图需求。它可以用来创建各种类型的图表,例如线图、散点图、柱状图、直方图、饼图等。Matplotlib 还可以与其他 Python 库(例如 NumPy 和 Pandas)结合使用。它是数据科学和机器学习领域中最受欢迎的可视化工具之一。

                                    示例:

                                    import matplotlib.pyplot as plt
                                    import random
                                    # 1. 创建画布
                                    plt.figure(figsize=(20, 8), dpi=100)  # figsize=(长, 宽)
                                    # 2. 绘制图像
                                    x = [i for i in range(1, 10)]
                                    y = [i for i in range(11, 20)]
                                    random.shuffle(y)
                                    plt.plot(x, y)
                                    # 3. 图像显示
                                    plt.show()
                                    

                                    2.1 示例

                                    为了更好地理解所有基础绘图功能,我们通过天气温度变化的绘图来融合所有的基础 API 使用需求:画出某城市 11 点到 12 点 1 小时内每分钟的温度变化折线图,温度范围在 15 度 ~ 18 度。

                                    import matplotlib.pyplot as plt
                                    import random
                                    from pylab import mpl
                                    # 设置中文字体
                                    mpl.rcParams["font.sans-serif"] = ["SimHei"]
                                    # 设置正常显示符号
                                    mpl.rcParams["axes.unicode_minus"] = False
                                    # 0. 准备数据
                                    x = range(60)
                                    y = [random.uniform(15, 18) for i in x]
                                    # 1. 创建画布
                                    plt.figure(figsize=(20, 8), dpi=100)
                                    # 2. 绘制图像
                                    plt.plot(x, y)
                                    ## 2.1 自定义x,y轴刻度
                                    x_tickes_label = [f"11点{i}分" for i in x]
                                    y_tickes_label = range(40)
                                    ## 2.2 指定xy轴的空隙
                                    plt.xticks(x[::5], x_tickes_label[::5], fontsize=12)  #  xticks(ticks=None, labels=None, **kwargs)
                                    plt.yticks(y_tickes_label[::5], fontsize=12)
                                    # 2.3 添加网格显示
                                    plt.grid(visible=True, linestyle="--", alpha=0.5)  # alpha为透明度
                                    # 2.4 添加描述信息
                                    plt.xlabel("时间", fontsize=14)
                                    plt.ylabel("温度", fontsize=14)
                                    plt.title("中午11点~12点某城市温度变化图", fontsize=20)
                                    # 2.5 保存图片(保存图片一定要在plt.show()之前,否则会保存一张空的图片)
                                    plt.savefig("./test.png")
                                    # 3. 图像显示
                                    plt.show()
                                    

                                    其中:random.uniform() 是 Python 的 random 模块中的一个函数,它用于生成一个指定范围内的随机浮点数。函数的语法为 random.uniform(a, b),其中 a 和 b 分别表示生成随机数的范围的下限和上限。生成的随机数 n 满足 a

The End
微信