吴恩达机器学习课程笔记一


通用人工智能—AGI

机器学习—机器无需明确编程即可学习的研究领域(非正式定义)

前言

监督学习—Supervised learning

监督学习指的是数据集有输出标签,每个数据样本都有输出标签—right answers,监督学习在实际应用中使用较多

监督学习主要有分类---Classification回归---Regression两大类别,分类和回归都是对输入进行预测,不同之处在于分类预测的结果是有限的(一组有限的可能输出类别),而回归预测的结果是无限的(如经典的房价预测)

无监督学习—Unsupervised learning

区别与监督学习,无监督学习的数据没有标签。因为没有数据标签,无监督学习并没有预测功能,我们使用无监督学习算法来找到数据集中的某种结构或某种模式,或者只是找到数据中一些有趣的特性。这就是无监督学习,并不是试图监督算法给每个输入一个正确的答案。

无监督学习可能决定数据可以分为不同的组或者集群,

聚类

将相似的数据点聚集在一起

异常检测

用于检测异常事件

降维

压缩大的数据集得到小数据集,并且丢失尽可能少的信息

增强学习—Reinforcement learning

Linear regression

一些机器学习的名词

线 性 回 归 模 型 − − − 一 条 拟 合 数 据 的 直 线 输 入 变 量 x − − − f e a t u r e ( 特 征 ) 输 出 变 量 y − − − t a r g e t ( 目 标 ) x ( 输 入 特 征 ) ⟶ f ( m o d e l : 模 型 ) ⟶ y ^ ( 评 估 预 测 的 结 果 ) 算 法 预 测 结 果 : y ^ 或 者 y − h a t , y ^ 是 对 正 确 结 果 y 的 估 计 或 者 预 测 线性回归模型---一条拟合数据的直线\\ 输入变量x---feature(特征) \\ 输出变量y---target(目标) \\ x(输入特征)\longrightarrow f(model:模型)\longrightarrow \hat{y}(评估预测的结果) \\ 算法预测结果:\hat{y}或者y-hat,\hat{y}是对正确结果y的估计或者预测\\ 线线xfeature()ytarget()x()f(model:)y^():y^yhat,y^y

最主要的是如何构建 模型:f

参考博客

一元线性回归_Chen的博客的博客-CSDN博客_一元线性回归法

损失函数

为了实现线性回归,关键步骤是定义一个损失函数(cost function)
损 失 函 数 J ( w , b ) = 1 2 m ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2 为 什 么 要 除 以 2 m ? : 如 果 不 除 于 m , 损 失 函 数 值 会 随 着 样 本 数 增 加 而 变 大 , 除 以 2 应 该 是 为 了 方 便 下 一 步 计 算 , 约 去 系 数 损失函数J(w,b)=\frac{1}{2m}\sum_{i=1}^{m}(\hat{y}^{(i)}-y^{(i)})^2\\ 为什么要除以2m?:如果不除于m,损失函数值会随着样本数增加而变大,除以2应该是为了方便下一步计算,约去系数 J(w,b)=2m1i=1m(y^(i)y(i))22m?:m2便
平方差成本函数是线性回归最普遍的损失函数

我们要求得使得损失函数最小的参数 w 和 b

线性回归的平方差成本函数只有一个全局最小值,是一个凸函数

参考博客

单变量梯度下降_Chen的博客的博客-CSDN博客

梯度下降的实现

w = w − α ∂ ∂ w J ( w , b ) α ( L e a r n i n g    r a t e ) : 学 习 率 , 通 常 取 值 在 0 − 1 之 间 , 通 俗 的 说 α 决 定 了 你 下 坡 的 幅 度 , α 非 常 大 代 表 着 下 坡 时 迈 出 一 大 步 , α 过 小 则 迈 小 步 下 坡 , 如 何 选 择 一 个 合 适 的 α 是 个 问 题 ∂ ∂ w J ( w , b ) : 代 表 着 往 哪 个 方 向 下 坡 此 外 , b = b − α ∂ ∂ b J ( w , b ) 重 复 上 面 两 个 不 断 更 新 的 步 骤 , 直 到 算 法 收 敛 , 达 到 算 法 的 局 部 最 小 值 如 何 同 时 更 新 w 和 b ( 更 新 其 中 一 个 , 另 一 个 不 受 影 响 ) 呢 ? t e m p _ w = w − α ∂ ∂ w J ( w , b ) t e m p _ b = b − α ∂ ∂ b J ( w , b ) w = t e m p _ w b = t e m p _ b 梯 度 下 降 的 正 确 方 式 是 参 数 同 时 更 新 w=w-\alpha\frac{\partial}{\partial w}J(w,b) \\ \alpha(Learning\ \ rate):学习率,通常取值在0-1之间,通俗的说\alpha决定了你下坡的幅度,\\ \alpha非常大代表着下坡时迈出一大步,\alpha过小则迈小步下坡,如何选择一个合适的\alpha是个问题\\ \frac{\partial}{\partial w}J(w,b):代表着往哪个方向下坡\\ 此外,b=b-\alpha\frac{\partial}{\partial b}J(w,b) \\ 重复上面两个不断更新的步骤,直到算法收敛,达到算法的局部最小值\\ 如何同时更新w和b(更新其中一个,另一个不受影响)呢?\\ temp\_w=w-\alpha\frac{\partial}{\partial w}J(w,b)\\ temp\_b=b-\alpha\frac{\partial}{\partial b}J(w,b)\\ w=temp\_w\\ b=temp\_b\\ 梯度下降的正确方式是参数同时更新 w=wαwJ(w,b)α(Learning  rate):01ααααwJ(w,b):b=bαbJ(w,b)wb()?temp_w=wαwJ(w,b)temp_b=bαbJ(w,b)w=temp_wb=temp_b

学习率alpha的选择

学习率过小

学习率过小,梯度下降算法照样可以起作用,但是需要重复很多的步骤,需要花费大量的时间

学习率过大

学习率过大可能永远都不会找到局部最小值,变量不能收敛,甚至可能使得变量发散

线性回归的梯度下降求法

线 性 回 归 模 型 : f w , b = w x + b          损 失 函 数 : J ( w , b ) = 1 2 m ∑ i = 1 m ( f w , b ( x ( i ) ) − y ( i ) ) 2 梯 度 下 降 算 法 : t e m p _ w = w − α ∂ ∂ w J ( w , b ) , 其 中 ∂ ∂ w J ( w , b ) = 1 m ∑ i = 1 m ( f w , b ( x ( i ) ) − y ( i ) ) x ( i ) t e m p _ b = b − α ∂ ∂ b J ( w , b ) , 其 中 ∂ ∂ b J ( w , b ) = 1 m ∑ i = 1 m ( f w , b ( x ( i ) ) − y ( i ) ) w = t e m p _ w b = t e m p _ b 线性回归模型:f_{w,b}=wx+b\ \ \ \ \ \ \ \ \\ 损失函数:J(w,b)=\frac{1}{2m}\sum_{i=1}^m(f_{w,b}(x^{(i)})-y^{(i)})^2\\ 梯度下降算法: \\ temp\_w=w-\alpha\frac{\partial}{\partial w}J(w,b),其中\frac{\partial}{\partial w}J(w,b)=\frac{1}{m}\sum_{i=1}^m(f_{w,b}(x^{(i)})-y^{(i)})x^{(i)}\\ temp\_b=b-\alpha\frac{\partial}{\partial b}J(w,b),其中\frac{\partial}{\partial b}J(w,b)=\frac{1}{m}\sum_{i=1}^m(f_{w,b}(x^{(i)})-y^{(i)})\\ w=temp\_w\\ b=temp\_b\\ 线:fw,b=wx+b        :J(w,b)=2m1i=1m(fw,b(x(i))y(i))2:temp_w=wαwJ(w,b),wJ(w,b)=m1i=1m(fw,b(x(i))y(i))x(i)temp_b=bαbJ(w,b),bJ(w,b)=m1i=1m(fw,b(x(i))y(i))w=temp_wb=temp_b

在这里插入图片描述

线性回归的平方差损失函数只有一个局部局最小值,即全局最小值,是一个凸函数

下图为梯度下降的过程图:

左上图为模型和数据图,右上为损失函数等高线图,下图为损失函数表面图

Multiple linear regression

多特征线性回归

考虑更加复杂,更加符合实际的线性回归–特征变多
x 2 ( 3 ) 表 示 第 3 个 样 本 点 的 第 2 个 特 征 f w , b ( x ) = w 1 x 1 + w 2 x 2 + w 3 x 3 + . . . . . . + w n x n + b 向 量 w → = [ w 1 , w 2 , w 3 . . . . w n ] b 表 示 数 字 , 不 是 向 量 x → = [ x 1 , x 2 , x 3 . . . . x n ] f w → , b ( x → ) = w → ∗ x → + b = w 1 x 1 + w 2 x 2 + w 3 x 3 + . . . . . . + w n x n + b x^{(3)}_2表示第3个样本点的第2个特征\\ f_{w,b}(x)=w_1x_1+w_2x_2+w_3x_3+......+w_nx_n+b \\ 向量\overrightarrow{w}=[w_1,w_2,w_3....w_n]\\ b表示数字,不是向量\\ \overrightarrow{x}=[x_1,x_2,x_3....x_n]\\ f_{\overrightarrow{w},b}(\overrightarrow{x})=\overrightarrow{w}*\overrightarrow{x}+b=w_1x_1+w_2x_2+w_3x_3+......+w_nx_n+b\\ x2(3)32fw,b(x)=w1x1+w2x2+w3x3+......+wnxn+bw =[w1,w2,w3....wn]bx =[x1,x2,x3....xn]fw ,b(x )=w x +b=w1x1+w2x2+w3x3+......+wnxn+b

向量化

现 实 生 活 中 , 线 性 回 归 问 题 的 变 量 , 都 不 止 包 含 一 个 特 征 值 , 即 x 1 , x 2 , x 3 . . . . . , f w → , b ( x → ) = w 1 x 1 + w 2 x 2 + w 3 x 3 + . . . . . . + w n x n + b 可 以 用 向 量 来 表 示 : x → = [ x 1 , x 2 , x 3 . . . . . x n ] 同 样 , w 也 要 变 为 w → = [ w 1 , w 2 , w 3 . . . . . w n ] 其 中 , x 2 ( 3 ) 表 示 第 3 个 样 本 点 的 第 2 个 特 征 f w → , b ( x → ) = w → ∗ x → + b 现实生活中,线性回归问题的变量,都不止包含一个特征值,即x_1,x_2,x_3.....,\\ f_{\overrightarrow{w},b}(\overrightarrow{x})=w_1x_1+w_2x_2+w_3x_3+......+w_nx_n+b\\ 可以用向量来表示:\\ \overrightarrow{x}=\begin{bmatrix} x_1,x_2,x_3.....x_n \end{bmatrix} \\同样,w也要变为 \overrightarrow{w}=\begin{bmatrix} w_1,w_2,w_3.....w_n \end{bmatrix}\\ 其中,x^{(3)}_2表示第3个样本点的第2个特征\\ f_{\overrightarrow{w},b}(\overrightarrow{x})=\overrightarrow{w}*\overrightarrow{x}+b \\ 线x1,x2,x3.....fw ,b(x )=w1x1+w2x2+w3x3+......+wnxn+b:x =[x1,x2,x3.....xn]ww =[w1,w2,w3.....wn]x2(3)32fw ,b(x )=w x +b

向量化可以使得代码更短,运行更加高效

Python中,使用numpy

w=np.array([1.0,2.5,-3.3])
b=4
x=np.array([10,20,30])

f w → , b ( x → ) = w → ∗ x → + b = w 1 x 1 + w 2 x 2 + w 3 x 3 + . . . . . . + w n x n + b 没 有 向 量 化 的 情 况 : ( 1 ) f = w [ 0 ] ∗ x [ 0 ] + w [ 1 ] ∗ x [ 1 ] + w [ 2 ] ∗ x [ 2 ] + b ( 2 ) f w → , b ( x → ) = ∑ j = 1 n w j x j + b f = 0 f o r      j      i n      r a n g e ( 0 , n ) :         f = f + w [ j ] ∗ x [ j ] f = f + b 向 量 化 后 : w → = [ w 1 , w 2 , w 3 . . . . . w n ] x → = [ x 1 , x 2 , x 3 . . . . . x n ] f w → , b ( x → ) = w → ∗ x → + b 只 需 要 一 行 代 码 即 可 f = n p . d o t ( w , x ) + b 向 量 化 后 不 仅 代 码 变 短 , 而 且 代 码 的 运 行 速 度 比 上 面 两 种 都 要 快 , 原 因 是 n u m p y 可 以 使 用 G P U 来 加 速 矩 阵 运 算 计 算 机 可 以 并 行 的 将 每 个 w i ∗ x i , 再 使 用 专 门 的 硬 件 高 效 求 和 ∑ i = 1 n w i ∗ x i f_{\overrightarrow{w},b}(\overrightarrow{x})=\overrightarrow{w}*\overrightarrow{x}+b=w_1x_1+w_2x_2+w_3x_3+......+w_nx_n+b \\ 没有向量化的情况: \\ (1)f=w[0]*x[0]+ \\ w[1]*x[1]+\\ w[2]*x[2]+b \\ (2)f_{\overrightarrow{w},b}(\overrightarrow{x})=\sum_{j=1}^nw_jx_j+b\\ f=0\\ for\ \ \ \ j\ \ \ \ in\ \ \ \ range(0,n): \\ \ \ \ \ \ \ \ f=f+w[j]*x[j]\\ f=f+b \\ 向量化后:\\ \overrightarrow{w}=\begin{bmatrix} w_1,w_2,w_3.....w_n \end{bmatrix} \\ \overrightarrow{x}=\begin{bmatrix} x_1,x_2,x_3.....x_n \end{bmatrix} \\ f_{\overrightarrow{w},b}(\overrightarrow{x})=\overrightarrow{w}*\overrightarrow{x}+b \\ 只需要一行代码即可 \\ f=np.dot(w,x)+b \\ 向量化后不仅代码变短,而且代码的运行速度比上面两种都要快,原因是{numpy}可以使用GPU来加速矩阵运算 \\计算机可以并行的将每个w_i*x_i,再使用专门的硬件高效求和\sum_{i=1}^{n}w_i*x_i \\ fw ,b(x )=w x +b=w1x1+w2x2+w3x3+......+wnxn+b:(1)f=w[0]x[0]+w[1]x[1]+w[2]x[2]+b(2)fw ,b(x )=j=1nwjxj+bf=0for    j    in    range(0,n):       f=f+w[j]x[j]f=f+b:w =[w1,w2,w3.....wn]x =[x1,x2,x3.....xn]fw ,b(x )=w x +bf=np.dot(w,x)+bnumpy使GPUwixi,使i=1nwixi

向量化在多元线性回归中的显著作用:
w → = [ w 1 , w 2 , w 3 . . . . . w n ] d → = [ d 1 , d 2 , d 3 . . . . . d n ] , d i 为 关 于 w i 的 偏 导 w j = w j − α d j    ( j = 1 − n ) 没 有 矢 量 化 的 情 况 : \overrightarrow{w}=\begin{bmatrix} w_1,w_2,w_3.....w_n \end{bmatrix}\\ \overrightarrow{d}=\begin{bmatrix} d_1,d_2,d_3.....d_n \end{bmatrix},d_i为关于w_i的偏导 \\ w_j=w_j-\alpha d_j\ \ (j=1-n)\\ 没有矢量化的情况: \\ w =[w1,w2,w3.....wn]d =[d1,d2,d3.....dn],diwiwj=wjαdj  (j=1n):

for  in range(0,n):
    w[j]=w[j]-alpha*d[j]

在 并 行 情 况 下 , w i ∼ n 并 行 的 减 去 α ∗ d i ∼ n , 而 不 需 要 依 次 的 计 算 w i ∼ n = w i ∼ n − α ∗ d i ∼ n 在并行情况下,w_{i\sim n}并行的减去\alpha*d_{i\sim n},而不需要依次的计算 \\ w_{i\sim n}=w_{i\sim n}-\alpha*d_{i\sim n} winαdin,win=winαdin

当特征非常多或者数据集非常大时,矢量化后用numpy加速计算就会很有用

多元线性回归的梯度下降

f w → , b ( x → ) = w → ∗ x → + b = w 1 x 1 + w 2 x 2 + w 3 x 3 + . . . . . . + w n x n + b f w → , b ( x → ) = w → ∗ x → + b 损 失 函 数 : J ( w 1 , . . . , w n , b ) = J ( w → , b ) = 1 2 m ∑ i = 1 m ( w → ∗ x ( i ) → + b − y ( i ) ) 2 t e m p _ w j = w j − α ∂ ∂ w j J ( w 1 , . . w n , b ) t e m p _ b = b − α ∂ ∂ b J ( w 1 , . . w n , b ) 可 以 写 成 : t e m p _ w j = w j − α ∂ ∂ w j J ( w → , b ) t e m p _ b = b − α ∂ ∂ b J ( w → , b ) f_{\overrightarrow{w},b}(\overrightarrow{x})=\overrightarrow{w}*\overrightarrow{x}+b=w_1x_1+w_2x_2+w_3x_3+......+w_nx_n+b \\ f_{\overrightarrow{w},b}(\overrightarrow{x})=\overrightarrow{w}*\overrightarrow{x}+b\\ 损失函数:J(w_1,...,w_n,b)=J(\overrightarrow{w},b)=\frac{1}{2m}\sum_{i=1}^{m}(\overrightarrow{w^{}}*\overrightarrow{x^{(i)}}+b-y^{(i)})^2\\ temp\_w_j=w_j-\alpha\frac{\partial}{\partial w_j}J(w_1,..w_n,b)\\ temp\_b=b-\alpha\frac{\partial}{\partial b}J(w_1,..w_n,b)\\ 可以写成:\\ temp\_w_j=w_j-\alpha\frac{\partial}{\partial w_j}J(\overrightarrow{w},b)\\ temp\_b=b-\alpha\frac{\partial}{\partial b}J(\overrightarrow{w},b)\\ fw ,b(x )=w x +b=w1x1+w2x2+w3x3+......+wnxn+bfw ,b(x )=w x +b:J(w1,...,wn,b)=J(w ,b)=2m1i=1m(w x(i) +by(i))2temp_wj=wjαwjJ(w1,..wn,b)temp_b=bαbJ(w1,..wn,b):temp_wj=wjαwjJ(w ,b)temp_b=bαbJ(w ,b)

单个特征和多个特征的参数w , b 迭代过程的对比:
单 个 特 征 下 参 数 更 新 情 况 : w = w − α 1 m ( f w , b ( x ( i ) ) − y ( i ) ) x ( i ) b = b − α 1 m ( f w , b ( x ( i ) ) − y ( i ) ) 这 里 的 x ( i ) 只 有 一 个 特 征 , 即 没 有 下 标 多 个 特 征 下 ( n ≥ 2 ) 时 , 参 数 更 新 : w 1 = w 1 − α 1 m ∑ i = 1 m ( f w → , b ( x → ( i ) ) − y ( i ) ) x 1 ( i )    ,   其 中 ∂ ∂ w j J ( w → , b ) = 1 m ∑ i = 1 m ( f w → , b ( x → ( i ) ) − y ( i ) ) x 1 ( i ) w n = w n − α 1 m ∑ i = 1 m ( f w → , b ( x → ( i ) ) − y ( i ) ) x n ( i ) b = b − α 1 m ( f w , b ( x ( i ) ) − y ( i ) ) 单个特征下参数更新情况: \\ w=w-\alpha \frac{1}{m}(f_{w,b}(x^{(i)})-y^{(i)})x^{(i)}\\ b=b-\alpha \frac{1}{m}(f_{w,b}(x^{(i)})-y^{(i)}) \\ 这里的x^{(i)}只有一个特征,即没有下标\\ 多个特征下(n\geq2)时,参数更新:\\ w_1=w_1-\alpha \frac{1}{m} \sum_{i=1}^{m}(f_{\overrightarrow{w},b}(\overrightarrow{x}^{(i)})-y^{(i)})x_1^{(i)}\ \ ,\ 其中\frac{\partial}{\partial w_j}J(\overrightarrow{w},b)=\frac{1}{m} \sum_{i=1}^{m}(f_{\overrightarrow{w},b}(\overrightarrow{x}^{(i)})-y^{(i)})x_1^{(i)}\\ w_n=w_n-\alpha \frac{1}{m} \sum_{i=1}^{m}(f_{\overrightarrow{w},b}(\overrightarrow{x}^{(i)})-y^{(i)})x_n^{(i)}\\ b=b-\alpha \frac{1}{m}(f_{w,b}(x^{(i)})-y^{(i)}) \\ :w=wαm1(fw,b(x(i))y(i))x(i)b=bαm1(fw,b(x(i))y(i))x(i)(n2):w1=w1αm1i=1m(fw ,b(x (i))y(i))x1(i)  , wjJ(w ,b)=m1i=1m(fw ,b(x (i))y(i))x1(i)wn=wnαm1i=1m(fw ,b(x (i))y(i))xn(i)b=bαm1(fw,b(x(i))y(i))
梯度下降是最小化损失函数 J, 找到w和b的好方法。

正规方程法Normal Equation):几乎只适用于线性回归,这种方法不需要迭代梯度下降算法,没有推广到其他算法,且当特征数量较大时,正规方程法也很慢(跟线性代数有关,等复习完线代再学)

归一化

特征缩放能够使得梯度下降的速度更快

当一个特征的可能值很大时,一个好的模型可能选择一个相对较小的参数值;当特征的可能值很小时,一个好的模型可能选择一个相对较大的参数值。

上 图 为 特 征 散 点 图 和 损 失 函 数 等 高 线 图 特 征 值 x 1 较 大 , 特 征 值 x 2 较 小 好 的 模 型 会 给 x 1 一 个 小 参 数 w 1 , 给 x 2 一 个 大 参 数 w 2 因 为 特 征 值 x 1 较 大 , 所 以 w 1 的 一 个 小 变 化 会 对 估 计 价 格 y ^ 产 生 较 大 影 响 , 对 损 失 函 数 J 也 会 产 生 较 大 的 影 响 而 w 2 则 需 要 更 多 的 变 化 才 能 改 变 y ^ , w 2 小 的 变 化 几 乎 不 会 影 响 损 失 函 数 J 上图为特征散点图和损失函数等高线图\\ 特征值x_1较大,特征值x_2较小\\ 好的模型会给x_1一个小参数w_1,给x_2一个大参数w_2\\ 因为特征值x_1较大,所以w_1的一个小变化会对估计价格\hat{y}产生较大影响,对损失函数J也会产生较大的影响\\ 而w_2则需要更多的变化才能改变\hat{y},w_2小的变化几乎不会影响损失函数J\\ 线x1x2x1w1,x2w2x1w1y^Jw2y^w2J

对梯度下降的影响

上述参数大小相差很大的情况,会导致损失函数J的等高线呈椭圆型,在梯度下降的过程中,反复横跳,无法收敛或者收敛速度慢。

解决这个问题就要使用归一化,提前处理数据,将数据的范围统一

归一化具体操作

0-1归一化
x ∗ = x − x m i n x m a x − x m i n x^*=\frac{x-x_{min}}{x_{max}-x_{min}} x=xmaxxminxxmin
适用在数值比较集中的情况,如果max和min不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定。实际使用中可以用经验常量来替代max和min。

Z—score 标准化
x ∗ = x − μ σ μ 、 σ 为 数 据 集 的 均 值 和 方 差 μ = 1 n ∑ i = 1 n x i    , σ = 1 n ∑ i = 1 n ( x i − μ ) 2 x^*=\frac{x-\mu}{\sigma}\\ \mu、\sigma为数据集的均值和方差 \\ \mu=\frac{1}{n}\sum_{i=1}^{n}x_i\ \ ,\sigma=\sqrt{\frac{1}{n}\sum_{i=1}^{n}(x_i-\mu)^2} x=σxμμσμ=n1i=1nxi  ,σ=n1i=1n(xiμ)2

判断梯度下降是否收敛

运行梯度下降时,如何判断其是否收敛?

​(损失函数J值与迭代次数图)

正常情况下,每次迭代损失函数的值都会减少,如果损失函数的值增大了,那么就说明学习率alpha(太大)的值选取不正确,或者代码有问题。

可以通过这个图表来判断收敛,还可以通过下面这种方法来判断是否收敛

自动收敛测试(Automatic convergence test)

ϵ 代 表 小 数 的 变 量 , 一 搬 都 非 常 小 , 例 如 1 0 − 3 如 果 在 一 次 迭 代 过 程 中 , 损 失 函 数 J 减 小 的 值 小 于 ϵ , 那 么 损 失 函 数 已 经 到 了 上 图 中 比 较 平 坦 的 位 置 了 , 那 么 可 以 认 为 已 经 收 敛 了 \epsilon代表小数的变量,一搬都非常小,例如10^{-3}\\ 如果在一次迭代过程中,损失函数J减小的值小于\epsilon,那么损失函数已经到了上图中比较平坦的位置了,那么可以认为已经收敛了 ϵ103Jϵ

一般看图是看图判断收敛,容易发现错误。

学习率alpha的选择

学习率太小,程序的运行较慢;学习率太大,可能不会收敛

学习率过大的时候没法收敛,可能出现上图中的情况,上图情况也可能是代码出错。

那么如何选择学习率?

当学习率比较小时,不会出现反复横跳(图像上不会出现损失函数的值随着迭代的次数的增加反而增加的情况)

即每次迭代损失函数J的值都会减少。所以如果梯度下降不起作用,那么就把学习率alpha设置的非常小,如果此时损失函数J任然不会在迭代中减小,或者还会增加,这时候一般就是代码有问题了。

如果学习率alpha非常小,那么就可能经过很多次迭代才收敛,这需要花费很多时间

alpha可以选择:0.001 0.003 0.01 0.03 0.1 1

选择一个小的学习率,再选择一个大的学习率(反复横跳),再尽可能选择大的学习率(收敛),这样做一般可以选择出一个合适的学习率alpha。

逻辑回归(Logistic Regression)

特征工程:使用直觉去设计新的特征,通过变换和组合原始数据
回归算法在解决分类问题时,效果并不是太好

binary alsssification : 二分类问题,预测结果只有两个可能

sigmoid/logistic function函数

sigmoid/logistic function函数输出值介于0和1之间
g ( z ) = 1 1 + e − z    ,    0 < g ( z ) < 1 f w → , b ( x → ) = z = w → ∗ x → + b g ( z ) = g ( w → ∗ x → + b ) = 1 1 + e − ( w → ∗ x → + b ) 设 置 一 个 阈 值 , 当 预 测 值 y ^ ≥ 阈 值 时 , 预 测 结 果 为 1 , 当 预 测 值 y ^ < 阈 值 时 , 预 测 结 果 为 0 常 见 的 阈 值 = 0.5 g(z)=\frac{1}{1+e^{-z}}\ \ ,\ \ 0<g(z)<1\\ f_{\overrightarrow{w},b}(\overrightarrow{x})=z=\overrightarrow{w}*\overrightarrow{x}+b \\ g(z)=g(\overrightarrow{w}*\overrightarrow{x}+b)=\frac{1}{1+e^{-(\overrightarrow{w}*\overrightarrow{x}+b)}}\\ 设置一个阈值,当预测值\hat{y}\geq阈值时,预测结果为1,当预测值\hat{y}<阈值时,预测结果为0 \\ 常见的阈值=0.5 g(z)=1+ez1  ,  0<g(z)<1fw ,b(x )=z=w x +bg(z)=g(w x +b)=1+e(w x +b)1y^,1y^<,0=0.5

决策边界

KaTeX parse error: Undefined control sequence: \ at position 71: …<3时,\hat{y}=0\ \̲ ̲

非线性的情况:

KaTeX parse error: Undefined control sequence: \ at position 84: …<1时,\hat{y}=0\ \̲ ̲

当 然 还 可 以 构 建 更 加 复 杂 的 决 策 边 界 , 如 z = w 1 x 1 + w 2 x 2 + w 3 x 1 2 + w 4 x 1 x 2 + w 5 x 2 2 , 等 等 当然还可以构建更加复杂的决策边界,如z=w_1x_1+w_2x_2+w_3x_1^2+w_4x_1x_2+w_5x_2^2,等等 ,z=w1x1+w2x2+w3x12+w4x1x2+w5x22

逻辑回归的损失函数

逻辑回归使用线性回归的损失函数,会使得损失函数出现下图的情况,导致梯度下降无法达到最低点

此时损失函数变成非凸函数

定义新的损失函数:
J ( w → , b ) = 1 m ∑ i = 1 m L ( f w → , b ( x ( i ) → ) , y ( i ) ) L ( f w → , b ( x ( i ) → ) , y ( i ) ) = { − l o g ( f w → , b ( x ( i ) → ) )            i f    y ( i ) = 1 − l o g ( 1 − f w → , b ( x ( i ) → ) )     i f    y ( i ) = 0 J(\overrightarrow{w},b)=\frac{1}{m}\sum_{i=1}^{m}L(f_{\overrightarrow{w},b}(\overrightarrow{x^{(i)}}),y^{(i)}) \\ L(f_{\overrightarrow{w},b}(\overrightarrow{x^{(i)}}),y^{(i)})= \begin{cases} -log(f_{\overrightarrow{w},b}(\overrightarrow{x^{(i)}})) \ \ \ \ \ \ \ \ \ \ if \ \ y^{(i)}=1\\ -log(1-f_{\overrightarrow{w},b}(\overrightarrow{x^{(i)}})) \ \ \ if \ \ y^{(i)}=0 \end{cases} J(w ,b)=m1i=1mL(fw ,b(x(i) ),y(i))L(fw ,b(x(i) ),y(i))=log(fw ,b(x(i) ))          if  y(i)=1log(1fw ,b(x(i) ))   if  y(i)=0

简化损失函数:
L ( f w → , b ( x ( i ) → ) , y ( i ) ) = − y ( i ) l o g ( f w → , b ( x ( i ) → ) ) − ( 1 − y ( i ) ) l o g ( 1 − f w → , b ( x ( i ) → ) ) J ( w → , b ) = − 1 m ∑ i = 1 m [ y ( i ) l o g ( f w → , b ( x ( i ) → ) ) + ( 1 − y ( i ) ) l o g ( 1 − f w → , b ( x ( i ) → ) ) ] L(f_{\overrightarrow{w},b}(\overrightarrow{x^{(i)}}),y^{(i)})=-y^{(i)}log(f_{\overrightarrow{w},b}(\overrightarrow{x^{(i)}}))-(1-y^{(i)})log(1-f_{\overrightarrow{w},b}(\overrightarrow{x^{(i)}})) \\ J(\overrightarrow{w},b)=-\frac{1}{m}\sum_{i=1}^{m} \left[ y^{(i)}log(f_{\overrightarrow{w},b}(\overrightarrow{x^{(i)}}))+(1-y^{(i)})log(1-f_{\overrightarrow{w},b}(\overrightarrow{x^{(i)}}))\right] L(fw ,b(x(i) ),y(i))=y(i)log(fw ,b(x(i) ))(1y(i))log(1fw ,b(x(i) ))J(w ,b)=m1i=1m[y(i)log(fw ,b(x(i) ))+(1y(i))log(1fw ,b(x(i) ))]

欠拟合与过拟合

模型对训练集数据的误差称为经验误差,对测试集数据的误差称为泛化误差。模型对训练集以外样本的预测能力就称为模型的泛化能力

欠拟合

模型的学习能力较弱,而数据的复杂度较高,模型的学习能力较弱,无法从这些复杂的数据中总结出规律,模型在训练集上就表现得很差。

过拟合

模型的学习能力过强,学习了一些没必要的特征,模型过度学习了训练数据,所以模型在训练数据上表现得很好,在测试数据上表现得不好。

造成过拟合的原因一般有:训练样本不足,样本特征少;模型过于复杂。

如何解决过拟合问题

1.获取更多的训练数据

2.看看是否能使用更少的特征来训练模型(会丢失某些信息)

3.正则化,正则化一般缩小特征的参数而不是直接去掉这个特征(参数设置为0),正则化可以保留所有特征,同时防止一些特征产生过大的影响。

正则化

正则化线性回归

J ( w → , b ) = 1 2 m ∑ i = 1 m ( w → ∗ x ( i ) → + b − y ( i ) ) 2 + λ 2 m ∑ j = 1 n w j 2 J(\overrightarrow{w},b)=\frac{1}{2m}\sum_{i=1}^{m}(\overrightarrow{w^{}}*\overrightarrow{x^{(i)}}+b-y^{(i)})^2+\frac{\lambda}{2m}\sum_{j=1}^nw_j^2\\ J(w ,b)=2m1i=1m(w x(i) +by(i))2+2mλj=1nwj2

随之改边的梯度下降迭代过程:
t e m p _ w j = w j − α ∂ ∂ w j J ( w → , b ) 其 中 , ∂ ∂ w j J ( w → , b ) = 1 m ∑ i = 1 m ( f w → , b ( x → ( i ) ) − y ( i ) ) x j ( i ) + λ m w j t e m p _ b = b − α ∂ ∂ b J ( w → , b ) 其 中 , ∂ ∂ b J ( w → , b ) = 1 m ∑ i = 1 m ( f w , b ( x ( i ) ) − y ( i ) ) temp\_w_j=w_j-\alpha\frac{\partial}{\partial w_j}J(\overrightarrow{w},b)\\ 其中,\frac{\partial}{\partial w_j}J(\overrightarrow{w},b)=\frac{1}{m} \sum_{i=1}^{m}(f_{\overrightarrow{w},b}(\overrightarrow{x}^{(i)})-y^{(i)})x_j^{(i)}+\frac{\lambda}{m}w_j\\ temp\_b=b-\alpha\frac{\partial}{\partial b}J(\overrightarrow{w},b)\\ 其中,\frac{\partial}{\partial b}J(\overrightarrow{w},b)=\frac{1}{m}\sum_{i=1}^m(f_{w,b}(x^{(i)})-y^{(i)})\\ temp_wj=wjαwjJ(w ,b),wjJ(w ,b)=m1i=1m(fw ,b(x (i))y(i))xj(i)+mλwjtemp_b=bαbJ(w ,b),bJ(w ,b)=m1i=1m(fw,b(x(i))y(i))

t e m p _ w j = w j − α [ 1 m ∑ i = 1 m ( f w → , b ( x → ( i ) ) − y ( i ) ) x j ( i ) + λ m w j ] t e m p _ w j = w j ( 1 − α λ m ) − α 1 m ∑ i = 1 m ( f w → , b ( x → ( i ) ) − y ( i ) ) x j ( i ) ( 1 − α λ m ) < 1 , 每 次 迭 代 收 缩 w j 一 点 点 temp\_w_j=w_j-\alpha\left[\frac{1}{m} \sum_{i=1}^{m}(f_{\overrightarrow{w},b}(\overrightarrow{x}^{(i)})-y^{(i)})x_j^{(i)}+\frac{\lambda}{m}w_j\right] \\ temp\_w_j=w_j(1-\alpha\frac{\lambda}{m})-\alpha\frac{1}{m} \sum_{i=1}^{m}(f_{\overrightarrow{w},b}(\overrightarrow{x}^{(i)})-y^{(i)})x_j^{(i)}\\ (1-\alpha\frac{\lambda}{m})<1,每次迭代收缩w_j一点点 temp_wj=wjα[m1i=1m(fw ,b(x (i))y(i))xj(i)+mλwj]temp_wj=wj(1αmλ)αm1i=1m(fw ,b(x (i))y(i))xj(i)(1αmλ)<1,wj

正则化逻辑回归

J ( w → , b ) = − 1 m ∑ i = 1 m [ y ( i ) l o g ( f w → , b ( x ( i ) → ) ) + ( 1 − y ( i ) ) l o g ( 1 − f w → , b ( x ( i ) → ) ) ] + λ 2 m ∑ j = 1 n w j 2 J(\overrightarrow{w},b)=-\frac{1}{m}\sum_{i=1}^{m} \left[ y^{(i)}log(f_{\overrightarrow{w},b}(\overrightarrow{x^{(i)}}))+(1-y^{(i)})log(1-f_{\overrightarrow{w},b}(\overrightarrow{x^{(i)}}))\right]+\frac{\lambda}{2m}\sum_{j=1}^nw_j^2 J(w ,b)=m1i=1m[y(i)log(fw ,b(x(i) ))+(1y(i))log(1fw ,b(x(i) ))]+2mλj=1nwj2

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

chp的博客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值