Lazy loaded image
🦾机器学习
字数 1094阅读时长 3 分钟
2026-4-21
2026-4-21
type
Post
status
Published
date
Apr 21, 2026
slug
mechine-learning
summary
机器学习笔记
tags
机器学习
Python
算法
category
学习笔记
icon
password
By BarryZed

概论

监督学习:有标签
损失函数
课上推导(两个偏导)
notion image
两个圈中=0,左侧w与有下w相等
范数:距离原点的距离
二范数:向量的直线距离

线性回归

目的

预测,找到最优的Wb(ais)
notion image
右上第二行应为1234减 导致-7.5为错误答案
  1. 骨架
  1. ML(Machine Learning)↔ 统计
  1. 标准框架:特征→模型→损失函数→优化(梯度下降)→评估(越大越好)
  1. 可解释性强
  1. 基准
  1. 有最完善的理论支持

代码

  1. 读数据,规范数据格式
  1. 特征归一化(Normalize)
    1. 特征标准化 = (X - 均值)/标准差
      • 均值:np.mean(X, axis=0)
      • 标准差:np.std(X, axis=0)
      axis=0 指按列求)
  1. 线性预测函数
    1. np.matmul(X, W) + bias
      matmul :matrix multiplication(@
  1. 损失函数
      • np.sum() 可以直接算和(当用就行)
  1. 梯度下降
      • grad_w
      • grad_bais
        • alpha :学习率
        • W = W - alpha * grad_w bias = bias - alpha * grad_b
    1. 训练函数
        • ite 指学习轮数(iteration,迭代次数)
      1. 先给初始值
        1. W = np.random.randn(n, 1) * 0.01W 一个随机值,*0.01 防止过大
          b = 0.1
          alpha = 0.01
      2. 声明costs 来记录每次的损失,来确定学习率是否合适
      3. 开始循环
        1. 先保存当前cost
        2. 进行(5)的梯度下降更新W, bais

    手算

    • 向量(一步一步算)
      • notion image
    • 正规方程解(一步到位最优解)
      • notion image

    逻辑回归

    “你有多像那一边?”(probability matters)——ChatGPT

    二分类

    目的

    把输入数据分为0和1两类((分割超平面)的两侧),找到最优的(矩阵) 和b
    则在1组,反之在0组(就是把放进Sigmoid里和0.5比)

    Sigmoid函数

    把数据压缩到0~1之间
    原函数

    //交叉熵损失(Cross Entropy Loss)

    梯度下降

    • grad_w
      • grad_b
        • 更新
          • alpha :学习率
          • W = W - alpha * grad_w b = b - alpha * grad_b
        • 更新时不把变为0或1,保留原始值,只有最后与测试再变

        手算

        notion image

        感知机

        “你在哪边?”(only side matters)——ChatGPT

        二分类

        if yi * (np.dot(w, xi) + b) <= 0 :误分类,重头重新算W, b
        更新W, b :
        w = w + alpha * yi * xi b = b + alpha * yi

        手算

        notion image
        • 某一轮指完全走一遍
          • 例子(4个数)
            • 第一个数错误:更新w1, b1
            • 用w1, b1分第二个数,正确
            • 用w1, b1分第三个数,错误,更新w2, b2
            • 用w2, b2分第四个数,错误,更新w3, b3
            →此时w3, b3则是第一轮的结果
             

        Fisher线性判别分析(Linear Discriminant Analysis, LDA)

        找一条直线(投影方向 w),让两类数据在这条线上“分得最开”。

        代码

        1. 分类
          1. class1, class2 = np.unique(x) :把数组 x 里“所有不重复的值”提取出来,并排序返回
            按照返回值将原数据X 分到X1, X2
        1. 计算类均值
          1. 找到class1, class2 的中心m1, m2 (m1 = np.mean(X1, axis=0))
        1. 计算散度矩阵和类内散度
          1. 散度矩阵:衡量“两个类别中心有多远”,越远越好
            1. 这里是外积(m_diff = m2 - m1; S_b = np.outer(m_diff, m_diff.T)),公式为:
          2. 类内散度:类别内部“散不散”,越近越好
            1. 先按类算出每类的散度
              1. S1 = np.dot((X1 - m1), (X1 - m1).T)
            2. 全部相加得出
        1. 找最优方向
            • 再归一化:w = w / np.linalg.norm(w)
              • 原因:只关心方向,不关心长度
                (w可以理解为是一个多维坐标,与原点连线就能确定一个方向;长短没啥用)
        1. 投影后均值
          1. 预测函数
            1. 算点的投影:proj = np.dot(w.T, x)
            2. 比较绝对值,分类
          上一篇
          “三下乡”
          下一篇
          算法设计与分析
          • 作者:BarryZed
          • 链接:
          • 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

          评论
          Loading...