吴恩达ML笔记

134 阅读3分钟

1. 监督学习与无监督学习

监督学习

定义

给算法一个数据集,其中包含正确答案,算法的目的是给出更多的正确答案

案例

例1:预测房价(回归问题)

回归:预测连续值的输出

image.png

  1. 用直线拟合

    image.png

  2. 用二次函数或二阶多项式拟合(效果更好)

    image.png

例2:预测肿瘤(分类问题)

分类:预测离散值的输出 对肿瘤而言,只有良性和恶性,不同于上面回归,可以有连续的房价数值 这里可以量化为0和1的输出

  1. 只有一个特征时 良性用“○”,恶性用“X” image.png
  2. 2个特征时 假设不仅知道肿瘤大小,还知道肿瘤年龄,需要预测一个直线,将两类肿瘤分隔开。 image.png 还可以用其他更多的特征

无监督学习

定义

数据集没有标签(即没有正确答案)

算法

  • 聚类算法:将数据分为两个不同的簇

    image.png

  • 案例

    1. google news:每天收集几十万条新闻,按主题分好类
    2. 市场:对用户数据集进行分类,细分到不同的市场,确定目标用户
    3. 鸡尾酒算法:两个麦克风分别离两人不同距离,录制两段录音,将两人声音分离开

2. 线性回归

1. 模型是什么样的
2. 整个监督学习的过程

代价函数

代价函数,有的地方也叫损失函数 训练模型的过程就是优化代价函数的过程 代价函数越小说明模型和参数越符合训练样本(x,y) 优化参数θ的过程中,最常用的方法是梯度下降 一般而言。损失函数的值越小,模型的精确度就越高 若要提高机器学习模型的准确度,就要尽可能降低损失函数的值→一般采用梯度下降方法

定义

假设函数:hθ(x)=θ0+θ1xh_{\theta}(x)=\theta_0+\theta_1x

代价函数:J(θ0,θ1)=12mi=1n(h(x(i)y(u)))2(m表示训练样本的数量)J(\theta_{0},\theta_{1})=\frac{1}{2m}\sum_{i=1}^n(h(x^{(i)}-y^{(u)}))^2 (m表示训练样本的数量)

假设有训练样本(x,y),模型为h,参数为θ,h(θ)=θTxθT表示θ的转置)\theta,h(θ) = θ^Tx( θ^T表示θ的转置)

  1. 任何能够衡量模型预测出来的值h(θ)与真实值y之间的差异的函数都可以叫做代价函数C(θ) 若有多个样本,则可以将所有代价函数的取值求均值,记做J(θ)
    • 可得关于代价函数的性质: 1. 每种算法,代价函数不唯一 2. 代价函数是参数θ的函数 3. 总的代价函数J(θ)可以用来衡量模型的好坏,代价函数越小说明模型和参数越符合训练样本(x,y) 4. J(θ)是一个标量
  2. 确定模型h的参数θ,也需要代价函数 代价函数衡量模型好坏 训练参数的过程就是不断改变θ,从而得到更小的J(θ) 理想情况下,当取到代价函数J的最小值时,就得到了最优的参数θ
  3. 优化参数θ时,常用梯度下降这里的梯度就是代价函数J(θ)对θ1, θ2, ..., θn的偏导数。由于需要求偏导,我们可以得到另一个关于代价函数的性质:
  • 选择代价函数时,最好挑选对参数θ可微的函数(全微分存在,偏导数一定存在)

只有一个参数θ1\theta_1

固定θ0\theta_0(先取为0),并改变θ1\theta_1的值,得到多组J(θ0)得到的 J(\theta_0) 得到的 minimize\ J(\theta_0) $$就是线性回归的目标函数

image.png

两个参数

相同原理,此时有2个参数,则代价函数J变为三维图像

image.png

等高线图表示:

image.png

梯度下降

定义

  • 作用:最小化函数
  • 做法
    1. 初始化θ0,θ1\theta_0,\theta_1,一般都初始化为0(也可以为其他值)
    2. 不断改变θ0θ1\theta_0、\theta_1的值使J(θ0,θ1)J(\theta_0,\theta_1)变小,直到找到最小值或局部最小值

image.png

  • 每次在当前位置像下降最多的方向迈出一步
  • 不同的起始点可能会得到不同的最小值(局部最小) image.png
  • 梯度下降公式: θj:=θjαδδθjJ(θ0,θ1) (for j=0 and j=1)\theta_j:=\theta_j-\alpha\frac{\delta}{\delta\theta_j}J(\theta_0,\theta_1)\ (for\ j=0\ and\ j=1)
  • NT:θ0θ1\theta_0和\theta_1应同步下降

image.png (右边不同时下降的梯度下降算法,可能也能正常运行,但是不是梯度下降算法,而是具有不同心之的其他算法)

线性回归的梯度下降

  • 公式

    J(θ0,θ1)=12mi=1n(h(x(i)y(1))2)                =12mi=1n((θ0+θ1x(i))y(i))2J(\theta_0,\theta_1)=\frac{1}{2m}\sum_{i=1}^n(h(x^{(i)}-y^{(1)})^2)\\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\frac{1}{2m}\sum_{i=1}^n((\theta_0+\theta_1x^{(i)})-y^{(i)})^2

    得到:

    θ0:=θ0α1m((θ0+θ1x(i))y(i))θ1:=θ0α1m((θ0+θ1x(i))y(i))x(i)\theta_0:=\theta_0-\alpha\frac{1}{m}\sum((\theta_0+\theta_1x^{(i)})-y^{(i)})\\ \theta_1:=\theta_0-\alpha\frac{1}{m}\sum((\theta_0+\theta_1x^{(i)})-y^{(i)})x^{(i)}

梯度下降的局限性:可能得到的是局部最优解

线性回归的梯度下降的函数是凸函数,因此没有局部最优解,只有全局最优解

3. 矩阵

向量表示

之后的内容除特殊说明,向量采取从1计数

习惯上用大写字母表示矩阵,小写字母表示向量

矩阵、向量运算

线性代数内容

乘法特性:不符合交换律,符合结合律

单位矩阵:一般记作I or InnI\ or\ I_{n*n}

逆矩阵

Python求逆矩阵: 使用numpy

import numpy as np
A = np.array([[3,4],[2,16]])
print(np.linalg.inv(A))  # 求逆矩阵

问题:有时候再成回来不是特别精确的单位矩阵 原因:求逆矩阵时的小数带来了精度损耗,一般四舍五入下是单位矩阵

4. 多变量线性回归