Press "Enter" to skip to content

机器学习——监督学习:回归

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

目录

 

3.1 点向表示法(多元线性回归)

 

3.4.3 z值标准化(Z-score normalization 即 Z-score 标准化)

 

3.5 检查梯度下降是否收敛

 

4.1.1 二元分类(逻辑回归)

 

4.1.4 逻辑回归中的代价函数

 

5.5 用于线性回归的正则方法

 

5.6 用于逻辑回归的正则方法

 

(强推|双字)2022吴恩达机器学习Deeplearning.ai课程_哔哩哔哩_bilibili

 

一、概述

 

1.1 机器学习

 

使计算机具有无需明确编程的学习能力的研究领域

 

1.2监督学习

 

e.g.1

 

我们给算法一个数据集,其中包含了正确答案,也就是说我们给它一个房价数据集,在这个数据集中的每个样本,我们都给出正确的价格,即这个房子实际卖价;算法的目的就是给出更多的正确答案,例如为你的朋友想要卖掉的这所新房子给出估价;

 

更专业的说,他被称为回归问题,是指我们想要预测连续的数值输出,也就是价格,技术上而言,价格能够被圆整到分,因此价格实际上是一个离散值,但通常我们认为房价是一个实数、标量或是连续值;回归这个术语是指,我们设法预测连续值的属性。

 

 

横坐标:房子面积;

 

纵坐标:房价

 

e.g.2

 

这实际是个分类问题,分类是指我们设法预测一个离散值输出,0或1,恶性或良性,实际上在分类问题中,有时你也有两个以上的可能的输出值,在实际例子中就是,可能有三种类型的乳腺癌,因此可能要设法预测离散值0、1、2或3,其中0是良性的,良性瘤即没有癌症;1就是第一种癌症;2就是第二种癌症;3就是第三种癌症,这就是分类问题,因为这又是一组离散的输出值,对应于没有癌症,或是癌症一、二、三。

 

在分类问题中,有另一种方法来绘制这些数据,就是用不同的符号表示不同的结果,例如用×表示恶性,用:white_circle:表示良性。

 

 

1.3 无监督学习

 

e.g.1

 

我们得到一个数据集,不知道具体的点代表什幺,无监督学习会判定这个数据集包含两个不同的簇,这就是聚类算法。如谷歌新闻,每天将网络上的各种的新闻组合成一个个新闻专题;或者市场数据分析,交给算法。

 

 

e.g.2

 

处理音频并分离音频

 

 

二、一元线性回归

 

简单的公式:f(x)= wx + b

 

同样见下图

 

 

import numpy as np
import matplotlib.pyplot as plt
def compute_model_output(x, w, b):
    """
    Computes the prediction of a linear model
    Args:
      x (ndarray (m,)): Data, m examples 
      w,b (scalar)    : model parameters  
    Returns
      y (ndarray (m,)): target values
    """
    m = x.shape[0]
    f_wb = np.zeros(m)
    for i in range(m):
        f_wb[i] = w * x[i] + b
        
    return f_wb
x_train = np.array([1.0, 2.0])
y_train = np.array([300.0, 500.0])
tmp_f_wb = compute_model_output(x_train, w, b,)
# Plot our model prediction
plt.plot(x_train, tmp_f_wb, c='b',label='Our Prediction')
# Plot the data points
plt.scatter(x_train, y_train, marker='x', c='r',label='Actual Values')
# Set the title
plt.title("Housing Prices")
# Set the y-axis label
plt.ylabel('Price (in 1000s of dollars)')
# Set the x-axis label
plt.xlabel('Size (1000 sqft)')
plt.legend()
plt.show()

 

 

2.1 代价函数

 

(平方误差代价函数)

 

2.1.1 埃里克代价函数

 

 

选择合适的 w 和 b 参数使得代价函数 J 最小

 

 

在二维和三维中的理解

 

 

 

2.2 梯度下降算法

 

 

小人在山顶下山的每一步都选择梯度最大的方向,直到下到这个山谷的最底部

 

 

(1)编程语言中的 赋值 =   和 数学公式中的 真值=不一样,所以python中判断是否相等用 ==

 

(2)J(w,b)的导数决定下山的方向,学习速率Alpha决定你要走的步数,很小则代表你走了非常小的一小步

 

(3)对于分级下降算法,将重复 w、b 的这两个更新步骤,直到收敛,即到达一个局部最小的点,提示符w、b不再随着采取的每一步而改变太多

 

(4)在梯度下降算法中,是同时更新的 w 和 b,注意不要写成右边的 Incorrect

 

(5)梯度 即曲线上一点作切线的斜率

 

(6)若 Alpha 太小,虽然可以逐步减小 J ,但是太慢;如果太大,也可能直接迈出了一大步,超过的最合适的点

 

(7)但是这样会陷入到局部最小值

 

 

三、多元线性回归

 

 

因为一元:f_w,b(x) = wx + b

 

所以多元:f_w,b(x) = w_1x_1 + w_2x_2 + w_3x_3 + … + w_nx_n + b

 

3.1 点向表示法(多元线性回归)

 

 

用向量表示,通过点积运算实现

 

3.2 向量化

 

# numpy 数值线性代数库
import numpy as np
w = np.array([1.0, 2.5, -3.3]) # 调用时:w[0], w[1], w[2]
b = 4
x = np.array([10, 20, 30])
# 假设有 n 个值
f = 0 
for j in range(0, n):  # range(0, n):j = 0 ... n-1
    f = f + w[j] * x[j]
f = f + b

 

 

 

3.3 多元的梯度

 

 

 

寻找 w 和 b 的另一种方法: 法向方程

 

3.4 特征缩放

 

先要观察 特性的大小(即特性的数值有多大)与相关参数的大小之间的关系

 

假设用两个特征值:房屋的大小和卧室的数量 预测房子的价格

 

 

可以看出,当一个特征的可能值很小时,那幺他的参数的合理值就会较大;反之就会较小

 

 

每个特征的值会有不同的范围,可以使直线和下降运行缓慢,但可以通过缩放使他们具有可以比较的数值范围

 

3.4.1 除以最大值

 

 

3.4.2  均值归一化

 

新值 = (原值 – 平均值) /(最大值 – 最小值),此时新值的范围为(-1,1)

 

 

3.4.3 z值标准化(Z-score normalization 即 Z-score 标准化)

 

需要计算标准差,使得其具有均值为0,方差为1的标准正态分布的特性

 

新值 = (原值 – 平均值)/ 标准差

 

标准差是总体各单位标准值与其平均数离差的和平方的算术平均数的平方根,即方差的算术平方根

 

 

当 x_j 的范围为 [0,3],[-2,0.5] 时认为是可以的;[-100,100] 则太大;[-0.001,0.001] 则太小,需要重新调整

 

3.5 检查梯度下降是否收敛

 

这个曲线也称 学习曲线

 

横轴是迭代的次数,纵轴是 J 代价函数的值

 

通过学习曲线,找出什幺时候可以停止训练

 

 

3.6 学习率

 

可以将 Alpha 设置为一个非常非常小的数字,然后看看这是否会导致每次迭代的成本降低;即便如此,J 有时候也不会始终在降低;但若学习率太小,则会需要很多的迭代次数

 

所以我们尝试找到一个太小至太大的范围,再尝试选择最大可能的学习率,或者只找到比最大合理值稍微小一点的值

 

3.7 特征工程

 

根据自己的知识 设计新的特征

 

如下,建立新特征 x_3 = x_1 · x_2

 

 

四、多项式回归

 

将 可选特征x 提高到2或3次幂 或 任何其他幂

 

 

可认为 第一个特征是大小、第二个特征是正方形大小、第三个特征是体积,此时功能缩放就很重要了

 

4.1 分类问题

 

4.1.1 二元分类(逻辑回归)

 

只有两种可能输出的分类问题,二元指只有两种可能的类或两种可能的类别,二分类通定输

 

出为 0 或 1

 

或者 设置一个阈值,大于的为1,小于的为0

 

这种方法可以用 逻辑回归 ,它的输出将始终在 0和1 之间

 

 

4.1.2 sigmoid函数

 

定义sigmoid函数

 

 

将 z = wx + b 代入进去

 

 

输入一个特征 或 一组特征 x 输出 0到1 之间的数字

 

 

4.1.3 决策边界

 

(1)线性

 

y=1的对于给定的一个x,w,b的概率,将是一个类似0.7或0.3这样的数字;

 

此时可以设置一个阈值,大于等于阈值 y=1;小于阈值 y=0

 

 

当参数 w1、w2、b 依次为 1、1、-3 时,此时当 z = 0时,又因为有两个特征,所以获得一条线性边界线 x_1 + x_2 = 3

 

 

修改不同的参数值,会获得不同的决策边界

 

(2)非线性

 

此时,参数设置为 1,1,-1

 

边界为 x_1² + x_2² = 1,所以在这个圆的外面,y=1;里面 y=0

 

 

(3)更复杂的边界

 

也可能出现 边界里面 y=0 , 外面 y=1

 

 

4.1.4 逻辑回归中的代价函数

 

如图,有m个数据集,n个特征

 

 

逻辑回归若使用和线性回归一样的代价函数,则会出现下图情况,此时采用梯度下降的话,会出现很多的局部最小值,所以该平方误差成本函数并不合适

 

 

称这个为 单个训练实例的损失:损失函数,用L表示,使其再次称为一个凸函数

 

(1)y = 1时

 

如下图所示,f 是输出,在 0-1之间,对应对数函数 L = log f 即是定义域在(0,1)的范围,此时如果输出f为1,损失为0,即结果无限准确;若输出为0.5,损失不算太大,也不算太小;如果输出为 0.1 ,则认为是恶性肿瘤只有 10%的可能性,损失很大,所以判断为不是恶性肿瘤;

 

 

(2)y = 0时

 

当输出 f 无限接近1时,此时认为是恶性肿瘤的可能性为 99%,但实际上却不是,所以就要以非常高的损失惩罚模型;故当 f 远离目标 y 时,损失越大

 

 

(3)简化形式

 

只用一个式子

 

 

(4)简化形式反推成本函数

 

 

简化形式是一个凸函数,可以用 极大似然估计

 

(Option Lab:Cost Function for Logistic Regression)

 

4.1.5 梯度下降

 

 

这似乎看起来和线性回归的相同,但是对于x 的 f 函数的定义已经更改,所以实质上不同

 

(Option Lab:Gradient Descent for Logistic Regression)

 

(Ungraded Lab:Logistic Regression using Scikit-Learn)

 

五、过拟合

 

5.1 线性回归模型

 

虽然图3的五个训练示例误差都为0,但这是一条摇摆不定的曲线,在上下起伏,这并不是一个很好的模型,一个术语称为 过拟合 了数据 或 存在 过拟合 问题;另一种术语是该算法具有 高方差 ,在机器学习中 过拟合 和 高方差 可以互换使用

 

高方差 :若两个机器学习工程师来拟合这个四阶多项式模型,只是稍微不同的数据集,他们最终不能得到完全不同的预测或高度可变的预测,这就是为什幺说该算法具有 高方差

 

第一个模型欠拟合和有高偏差;而中间模型我们称为 恰到好处 ,既不欠拟合也不过拟合,所以我们机器学习目标可以说是找到一个模型 既不欠拟合也不过拟合 或者说 既没有高偏差也没有高方差 的模型

 

 

5.2 分类问题

 

同样过拟合也适用于 分类

 

 

5.3 解决过拟合

 

(1)收集更多的训练数据

 

(2)特征选择

 

只使用认为是最相关的特征,即最小的特征子集;

 

如,若预测房价,有面积、收入、地理位置、大小、楼层高度五项特征,只选择最相关的面积、位置和高度;但是该算法正在丢弃一些有关房屋的一些信息

 

(3)正则化(regularization)

 

特征选择是消除特征,它的特征的参数往往较大,将特征的参数置为0;

 

而正则化则不是消除特征,是鼓励学习算法缩小参数,不要求其参数为0;正则化保留了所有特征,但又防止了过大的影响,导致的过拟合; 但只是鼓励减小 w_n,而没有鼓励 b 减小

 

 

最好选择正则化

 

(Ungraded Lab:Overfitting)

 

5.4 正则化

 

主要对于特征过多,但不知道哪个更重要或要排除哪个时,惩罚全部的 w_j参数,这通常会导致拟合更平滑、更简单,且不易过拟合,并将这个值 lambda ,进行缩放后加入

 

 

 

前一项 鼓励算法通过最小化预测的平方差来很好地拟合训练数据和实际值 ;该算法还试图 使参数 w_j 保持较小,这将有助于减少过拟合 ;而选择的 lambda 值 指定了相对重要性或相对权衡或如何在这两个目标之间取得平衡

 

lambda的影响 :

 

(1)lambda = 0:没有使用正则化,最终会拟合过度摆动,过度复杂的曲线,且过度拟合

 

(2)lambda 非常大(如 = 10的10次方):此时对右边的正则化非常重视,w的所有值都非常接近于0,此时 f_w,b(x)基本上等于b,因此学习算法拟合水平直线和欠拟合

 

所以想要的是介于两者之间的 lambda,恰当的平衡了第一项和第二项,最小化均方误差并保持较小的参数

 

5.5 用于线性回归的正则方法

 

 

上一个式子因为求的是偏导,所以不要求和

 

下一个式子因为并未对 b 减小

 

 

 

转化一下

 

 

后一项认为是普通线性回归的梯度下降的,前一项表示在每次迭代中,w_j 就下降一点点

 

 

5.6 用于逻辑回归的正则方法

 

 

 

(Regularization)

 

Jupyter Notebooks

 

JupyterNotebook 快捷键使用说明_zhaosjdo的博客-CSDN博客_jupyternotebook快捷键

 

JupyterNotebook 共两种键盘输入模式。

 

从命令模式进入编辑模式需按 Enter 键,从编辑模式切换到命令模式需按 Esc 键。

 

Enter:转入编辑模式

 

Shift + Enter:运行本单元,选中下个单元 — 新单元默认为命令模式

 

Ctrl + Enter:运行本单元

 

Alt + Enter:运行本单元,在其下插入新单元 –新单元默认为编辑模式

 

Octave

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注