机器学习1(导学及建模流程)

导学

  • 基本概念:通过不断的喂养数据,让算法变的越来越聪明,就叫做机器学习
    1
  • 核心是算法
    • 机器学习算法:特指通过一次次的数据积累经验,能够在既定任务处理上越来越聪明的计算流程
    • 本质上是多次给机器反馈,最终做出我们想要的反应
    • 算法参数:就是后面经常要调的东西,例如两个变量的权重
  • 学习流程
    • 学会算法:基础理论,基本框架
    • 训练算法:评估方法,优化途径,竞赛案例
    • 解决实际问题:在线评估,线上部署
  • 算法岗
    • 需要技术的沉淀,经历理性期和攀升期
    • 目前已经过了泡沫阶段
    • 不必自卑,不必标榜
  • 经典机器学习模型,随着应用的深化,可解释性增强(实证)
    6
  • 推荐书籍
    • 《终极算法》《暗知识》
    • 《数据挖掘导论》《机器学习-西瓜书》,但是这些书出版较早,涉及的算法很广,不太适合当下情况
    • 推荐:《集成学习—周志华》《机器学习实战—Aurelien》《阿里云天池大赛赛题解析》
  • 环境准备
    • Python基础(pycharm)
    • 安装anaconda,更新pip/numpy/pandas/sk-learn

建模流程

  • 用一个入门级的例子搭建
  • 基本概念补充
    • 经典统计分析方法与机器学习
      7
    • 经典统计分析需要掌握的基础数学知识较多,而在机器学习中流程比较简单
  • 线性回归
    • 概念
      1
    • 数据集——鸢尾花
      • 读取数据
        import pandas as pd
        
        iris = pd.read_csv('./datasets/iris.csv')
        print(iris)
        
        #      sepal_length  sepal_width  petal_length  petal_width         species
        0             5.1          3.5           1.4          0.2     Iris-setosa
        1             4.9          3.0           1.4          0.2     Iris-setosa
        2             4.7          3.2           1.3          0.2     Iris-setosa
        3             4.6          3.1           1.5          0.2     Iris-setosa
        
      • 特征与标签,一般会把标签放在最后一列
        2
      • 连续与离散
        3
    • 模型类型:分类 or 回归,看标签
      • 也不是绝对的,边界模糊
      • 比如年龄作为label,但是如果取值非常多且连续,可以作为回归预测问题
        4
    • 数据集—abalone.txt,预测鲍鱼年龄
      • 每一列的含义(header)
        5
  • 继续线性回归(属于回归预测问题),准备数据,搭建模型(简单线性回归)
    • 选取abalone数据集中的一小部分
      6
    • 还有其他线性回归模型
      7
    • 模型训练:对参数进行有效调整(反馈 – 改动)
      8
    • 我们发现参数(1,0)的结果相对更好,怎么把这个好坏有效的反馈给模型呢?需要用到模型评估指标和损失函数
      9
    • 第二组参数的SSE更小,说明更好;SSE是关于输出和标签的,也是比较通用的指标
      10
    • 怎么把这个结果传递给模型,就要用到Loss function,关于模型参数
    • 仍然使用SSE的方式,得到这个函数(方程),我们直接把参数(w,b)代进去
      11
    • 这里的SSE和SSELoss function计算过程是一样的,这并不是一定的,只是这个模型是这种情况
    • 模型现在的目标就是:通过学习,调整参数,减小损失,得到最优参数;
      13
    • 如何求解损失函数?需要用到一些优化理论
      • 绘出3D函数图像,我们可以发现这是一个凸函数(向下凸)
      • 全域最小值明显存在,可以通过最小二乘法得到
        14
      • 偏导函数计算,再建立方程组求参数解
        15
    • 还有一些其他的模型评估指标,MSE可以避免因为数据累积造成的求和结果过大(最常用)
      12
  • 建模流程总结
    • 一般根据数据的情况会预设大致的模型结构,虽说基本模型就那些,但这一步选的好坏会直接影响后续问题的求解
      1
    • 损失函数包含所有参数,而且一定要能在一定程度上衡量模型性能,不同的构建会极大影响模型计算效率,最终目标也是针对这个Loss Function
      2
    • 最小二乘法其实适用面比较窄
      3
    • 有可能并没有最小值点,需要在周围确认相对最优的点
      4

矩阵运算

  • 需要掌握的基础知识
    1
  • 使用numpy进行矩阵计算
    • 安装:pip install jupyter notebook pip install numpy scipy matplotlib
    • jupyter这个工具用起来比较方便,因为他的内核时IPython,所以文件名是.ipynb
      2
      4
    • 推荐使用array
      3
    • 新版特性
      5
  • 矩阵的常见操作
    • 转置
      8
    • 对角矩阵及偏移
      6
    • 上下三角矩阵及偏移
      7
    • 矩阵的逆:对于满秩的方阵,可求其逆矩阵;如果矩阵B与A相乘,能得到单位矩阵,则B称为A的逆

基础运算

  • 使用array表示矩阵,让矩阵带有了数组和矩阵的两重属性
    • 一维数组在这里也叫向量,二维数组也叫矩阵,向量和矩阵的核心的区别在于乘法运算
    • 线性代数运算将在后面讨论
  • 对于向量和矩阵这种有结构的对象,这里对乘法计算做一下分类(上下看)
    1
  • 逐元素相乘:每个对应位置元素相乘,矩阵和向量都一样
    2
  • 点积(内积):相乘再相加,这个不太一样
    3
  • 矩阵乘法:这个只有矩阵才有,向量没有;因为是代数学意义上的,和结构有关系(双中括号),向量只有逐元素相乘和点积;只有一列的矩阵(列向量)和向量也是不一样的!
    4
    • 这里也可以用A1.dot(A2)哦~
  • OK,以上就是向量和矩阵在乘法运算上的一些区别,掌握矩阵更重要;但他们都是在数组的基础上
  • 注意这几个说法,不能混淆

代数运算

  • 矩阵的代数运算
    • linalg是numpy中负责线性代数计算的模块,全称:linear algebra
      5
  • 矩阵的迹
    6
  • 矩阵的秩:不一定是方阵
    7
  • 矩阵的行列式:必须是方阵,才可以算行列式;可以看做是矩阵的某个性质;可以通过此值看出方阵是否满秩89
  • 对于满秩方阵,可以求其逆矩阵(inverse)
    10

矩阵方程

  • 将之前优化损失函数的最小二乘法得到的方程组用矩阵表示并运算(没有T)
    1
  • 接下来,就可以两边同时乘A的逆矩阵求解X
    2
    3

矩阵求导

  • 先看一下向量求导的推导过程
    • 向量变元就是原函数里的元组成的向量
      1
    • 注意这个形式,f(x)对向量变元求导,类似对应元素相乘,结果还是向量(向量求导结果),位置对应;本质还是逐个变量求偏导
      2
    • 该结论可以推导至一般情况,注:这个推导,为了证明向量/矩阵求导是可行的,我们将求导式子转化为了只包含变量;不是什么公式
      3
  • 很多时候并不区分向量方程还是矩阵方程;所有变量为向量或矩阵的方程,一般统一称为矩阵方程(矩阵表达式)
  • 总结上面的步骤,得到向量求导的定义法;梯度向量在后面会经常遇到
    4
    • 多元函数一定能够求得梯度向量;但梯度向量(向量求导结果)能否由一些已经定义的向量表示,则不一定(可能无解)
    • 补充一些常见的求导公式
      5
      6
      7
      8
      9
      10
      11
    • 上面都是采用直接用定义计算的方式证明,后面也会学到一些证明相关的技巧
  • 矩阵方程和矩阵函数
    12
  • 小结:
    • 向量变元 x
    • 梯度向量 A’

最小二乘法

  • 以多元线性回归为例,还是用最小二乘法原理,求矩阵的解,得到系数值
    1
    2
    3
  • So,特征矩阵也叫数据特征矩阵
    4
    5
  • 构造关于 w ^ \hat{w} w^ 的损失函数
    • 如何在CSDN插入公式,因为也是Markdown,所以和jupyter类似,$ $包裹即可
    • 损失函数还是SSE,这里引入二范数
    • 矩阵乘法中,相同矩阵的乘积(交叉乘积:转秩和自身的乘积)= 对应元素相乘再相加(点积),这里用矩阵简化向量的二范数计算
    • 之所以是向量的二范数,是因为这个式子的结果是一个向量,虽然里面用了矩阵(列向量/行向量)
      6
    • 接下来先用最小二乘法求解矩阵,得到最优解;会用到前面证明了的公式
      7
      8
    • 从这里可以看出,最小二乘法求解必须有一个强条件:特征矩阵的交叉乘积必须可逆
    • 之前也是一样的思路,只不过是求偏导用方程求解,这里直接用矩阵,但还是以导数为0建立等式
    • 用之前只有一个特征的简单线性回归试一下
      9
    • 结果是肯定的,得到矩阵 [ 1 1 ] \begin{bmatrix} 1\\ 1\\ \end{bmatrix} [11]
    • 因为这个结论很普适,很多问题都适用多元线性回归并使用最小二乘优化SSE,numpy也推出了直接计算的函数lstsq;先不管奇异值分解
      10
      11

小结

  • 本节了解了机器学习的基本概念和常规的建模流程
  • 使用SSE作为损失函数,使用最小二乘法作为优化方法
  • 从建立方程求解到使用矩阵运算,我们推导出了求多元线性回归的系数向量 w ^ \hat{w} w^ 的公式;结合numpy提供的函数比较方便的得到模型的最优解
  • numpy使用数组作为基本的数据结构,一维数组可看做向量,二维数组看做矩阵,但矩阵中的列向量/行向量也需用二维数组表示,不能与向量混淆,最显著的差异体现在乘法运算,但在表示一般结果时,效果是等价的~
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Roy_Allen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值