机器学习笔记(更新中)

1.1监督学习:数据集中包含大量的数据,但每一个数据都有确定的标签。比如:1.肿瘤数据:良性还是恶性 2.卖房子已知很多房子的数据并且知道最后买了多少钱。

基于这些数据对新的数据进行预测,比如归回问题:即通过回归来推出一个连续的输出;分类问题:其目标是推出一组离散的结果。肿瘤可以看成分类问题,预测房子的价格可以看成回归问题。

 

1.2无监督学习:大量的数据,但是没有一个明确的标签,只是有一堆数据而已。通过算法让机器自己根据这些数据的特点进行分类并根据分类对数据进行划分。

比如:大量新闻报道中,把对同事件的报道归为一类。鸡尾酒会问题:多个麦克风同时录制多种声音,最终分类消除杂音。

 

2.1线性回归模型:x-输入变量(例如房子的面积);y-输出变量(例如房子的成交价格);m-训练集中数据的数量;(x,y)一个训练集中的实例;(x(i),y(i))第i个训练实例;h代表学习算法的解决方案或函数也称为假设。

 

 

 2.2代价函数J:也被称为平方误差函数,是解决回归问题最常用的手段。

 

𝐽(𝜃0, 𝜃1) = 1/2m ∑m𝑖=1(ℎ𝜃(𝑥(𝑖)) − 𝑦(𝑖))2 ;拟合效果越好,J的值接近0。
 
 

 

 图例

可以看出在三维空间中存在一个使𝐽(𝜃0, 𝜃1)最小的点。

 

2.3 梯度下降:用来求代价函数𝐽(𝜃0, 𝜃1)的最小值,也叫批量梯度下降batch gradient descent 

计算公式:

 

 

其中α是学习率(learning rate)相当于步长;要注意在梯下降中要保证𝜃0,𝜃1同步更新。

 

 

 3.1 多变量线性回归及其多变量梯度下降

在多变量线性回归中,如果有n个特征,例如房子楼层数,卧室数,楼房年龄等,x=(x0,x1,....xn)是n+1维向量,其中x0=1,x1到xn是n个特征。

多变量线性回归中的代价函数:

 

 其中

 

 多变量线性回归的批量梯度下降算法为:

 

 

 即:

 

 求导后:

 

 其中x0(i)=1

最开始初始化参数值,计算所有的预测结果后,再给所有的参数一个新的值,如此循环直到收敛。

 

 3.2 特征缩放:

面对多维特征问题的时候,保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。

一般化公式:,μn是xn的平均值,sn是标准差,可以用范围的最大值减最小值代替。

 

一般(-3,3)以内(-1/3,1/3)以外是可接受范围。

 

3.3 学习率α的影响和选取

经验之谈:绘制迭代次数和代价函数的图表来观察算法在何时趋于收敛要好于设置阈值ε自动测试是否收敛,因为很难选取到合适的阈值ε。

梯度下降算法的每次迭代受到学习率的影响,如果学习率过小,则达到收敛所需的迭代次数会非常高;如果学习率过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。

通常可以考虑尝试些学习率:

α=0.01,0.03,0.1,0.3,1,3,10...

 

3.4 多项式回归

线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,比如一个二次方模型:
ℎ𝜃(𝑥) = 𝜃0+𝜃1𝑥1+𝜃2𝑥22
或者三次方模型:
ℎ𝜃(𝑥) =𝜃0+ 𝜃1𝑥1 + 𝜃2𝑥22 + 𝜃3𝑥33
面对这种情况,我们可以令:𝑥2 = 𝑥22;𝑥3= 𝑥33,从而将模型转化为线性回归模型。
注:如果我们采用多项式回归模型,在运行梯度下降算法前,特征缩放非常有必要。
 
3.5 正规方程
正规方程可以直接求解出使代价函数最小的参数𝜃;𝜃 = (𝑋𝑇𝑋)−1𝑋𝑇𝑦 。
例如:
 
运用正规方程方法求解参数:

 

 经验:只要特征变量的数目不大,标准方程是一个很好的计算参数𝜃的替代方法。

一般对于特征数量的要求是其小于10000,但其只适用于线性模型,不适合逻辑回归等其他模型;而梯度下降法适用于各类模型,当特征数量n较大时也能较好的适用。

 

4.1 分类问题:预测的是结果是否属于某一个类(例如正确或错误)。
例如:判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否是欺诈;区别一个肿瘤是恶性的还是良性的。在这些分类问题中,预测变量y是离散的值。
 
因变量y(dependent variable)可能属于的两个类分别称为负向类(negative class)和正向类(positive class),y只能取值0或1,其中0表示负向类,1表示正向类。
 
4.2 逻辑回归模型:该模型的输出变量范围始终在0和1之间。
该模型的表达式:ℎ𝜃(𝑥) = 𝑔(𝜃𝑇𝑋),g代表的是一个常用逻辑函数,公式为:

 

 该函数图像:

 

 

 

 

ℎ𝜃(𝑥)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1的可能性;即ℎ𝜃(𝑥) = 𝑃(𝑦 = 1|𝑥;𝜃)。例如ℎ𝜃(𝑥) =0.7,表示有70%的可能性y=1
 
4.3 决策边界 (decision boundary)
决策边界是模型的分界线,将预测y=1的区域和预测y=0的区域分隔开,其中决策边界和训练集无关,仅由𝜃的取值所确定。
 
4.4 逻辑回归模型的代价函数
𝐽(𝜃) = − 1/𝑚∑i=1m[𝑦(𝑖) log (ℎ𝜃(𝑥(𝑖))) + (1 − 𝑦(𝑖))log (1 − ℎ𝜃(𝑥(𝑖)))]
对应的梯度下降算法:

 

 虽然形式和线性回归的梯度下降算法一样,但是ℎ𝜃(𝑥) 已经发生了变化。

 

5.1 过拟合问题 (over-fitting)
当我们有非常多的特征数量,但是训练集中样本少时就可能出现过拟合,虽然通过机器学习得到的假设可能能够非常好地适应训练集(代价函数可能几乎为 0),但是无法推广到新的数据。例如:
又或者:
 

 

 这两幅图的第一个都是欠拟合,第三个都是过拟合。

通过多项式理解, 多项式中x的次数越高,拟合的越好,但相应的预测的能力就可能变差。

处理方法:

1.丢掉一些不能帮助我们正确预测的特征。可以手工选择保留哪些特征,也可以运用一些模型选择的算法来帮助选择。

2.正则化方法:保留所有特征,但是减少每个特征的参数大小。

 

5.2 线性回归中的正则化

正则化线性回归的代价函数:

 

 
注:根据惯例,我们不对𝜃0 进行惩罚。

线性回归中最小化代价函数有两种方法,梯度下降法和正规方程法。

其中梯度下降法:

 ,(𝑗 =1,2, .. . ,𝑛 )

 

正规方程法:

 

 

 图中矩阵为(𝑛 + 1) ∗ (𝑛 + 1)阶矩阵。

 

5.3 逻辑回归模型中的正则化

正则化后的代价函数:

 

 梯度下降算法:

 

6.1 非线性假设

对于一些分类问题,例如预测房子能否卖出,识别图像是否为小汽车等,这些问题都有一个特点:特征数很多。当特征很多时,如果运用非线性模型,模型的特征数会指数倍增长,即使用只含平方项或立方项的logistic回归算法,计算成本也太高了。  

因此面对很多的特征时,我们需要更好的算法:神经网络算法。

 

6.2 神经网络的模型表示

神经网络是大量神经元相互链接并通过电脉冲来交流的一个网络。
每一个神经元都可以被认为是一个处理单元/神经核(processing unit/Nucleus),它含有许多输入/树突(input/Dendrite),并且有一个输出/轴突(output/Axon)。
 
如下图所示:

 

 

 三层神经网络:

 

 其中:

x1,x2,x3是输入单元(input units),我们将原始数据输入给它们;a1,a2,a3是中间单元,它们负责将数据进行处理,然后呈递到下一层;最后是输出单元,它负责计算。

 神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下

一层的输入变量。上图第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。为了控制输出不为零或增加模型的灵活性,有时会给每一层都增加一个偏差单位(bias unit)。
 
模型符号的含义:
𝑎𝑖(𝑗) 代表第𝑗 层的第 𝑖 个激活单元。𝜃(𝑗)代表从第 𝑗 层映射到第𝑗 + 1 层时的权重的矩阵,例如𝜃(1)代表从第一层映射到第二层的权重的矩阵。该矩阵的以第为以 𝑗 + 1层的激活单元数量为行数,以第 𝑗 层的激活单元数加一为列数的矩阵。例如:上图所示的神经网络中𝜃(1)的尺寸为 3*4。 
 
对于上图所示的模型,激活单元和输出分别表达为:

 

 

 

 

 

 

这种从左到右的算法称为前向传播算法( FORWARD PROPAGATION )。

 

6.3 模型的向量化

向量化的方法会让计算更加简便,令上图g()中的表达式为z(2),其中:

 

 

 

则:

同理,令

 

如图所示:

 

 

6.4 神经网络的一些简单应用

从本质上讲,神经网络能够通过学习得出其自身的一系列特征。在普通的逻辑回归中,我们被限制为使用一些二项式来拟合数据中的原始特征,拟合过程会受到特征数的限制。在神经网络中,原始特征只是输入层,在上面三层的神经网络例子中,第三层也就是输出层做出的预测利用的是第二层的特征,而非输入层中的原始特征,可以认为第二层中的特征是神经网络通过学习后自己得出的一系列用于预测输出变量的新特征。

单层神经元可表示逻辑与逻辑或逻辑非运算。

逻辑与:

其中𝜃0=-30,𝜃1=20,𝜃2=20;输出函数h𝜃(x)=g(-30+20x1+20x2)

逻辑或:

 

逻辑非:

 

 三者相比只是𝜃的取值不同。 

 

三者组合可以实现XNOR运算符功能的神经网络。

 

 

按这种方法可以逐渐构造出越来越复杂的函数,也能得到更加厉害的特征值,这就是神经网络相比线性回归,逻辑回归的厉害之处。

 

7.1 神经网络的代价函数

 

 k=2称为二类分类,k>2称为K类分类;其中m代表训练样本个数,L代表神经网络的层数,Sl代表第L层神经元的个数(不包括偏置单元)

神经网络中,k=2时输出0或1,k>2时ℎ𝜃(𝑥)输出的是一个向量。

 

7.2 反向传播算法

反向传播算法的目的是为了计算代价函数的偏导数

举例说明:

 

用𝛿来表示误差,则:𝛿(4) = 𝑎(4) − y,利用这个误差值来计算前一层的误差:𝛿(3) = (𝛩(3))𝑇𝛿(4) .∗ 𝑔′(𝑧(3)),同理计算𝛿(2) = (𝛩(2))𝑇𝛿(3) .∗ 𝑔′(𝑧(2))。
有了每一层的误差后就可以进行偏导数的计算,当𝜆 = 0时,也就是不做正则化处理时,

 

 如果考虑正则化,则计算偏导数的算法为

 

 算法的含义为首先用正向传播方法计算出每一层的激活单元,利用训练集的结果与神经网络预测的

结果求出最后一层的误差,然后利用该误差运用反向传播法计算出直至第二层的所有误差,得到𝛥𝑖𝑗(𝑙)

偏导数计算公式如下图:

 

 

7.3 梯度检验

在反向传播的实现中可能会存在一些bug,即使存在bug也能进行梯度下降最小化代价函数,但是最终可能和没有bug的反向传播所得出的结果相差一个数量级,所以梯度检验是很有必要的。

我们采取梯度的数值检验(Numerical Gradient Checking)方法。这种方法的思想是通过估计梯度值来检验计算的导数值是否合理。
 
这种方法是在代价函数上沿着切线的方向选择离两个非常近的点然后计算两个点的平均值用以估计梯度。即对于某个特定的 𝜃,我们计算在 𝜃-𝜀 和 𝜃+𝜀 的代价值(𝜀是一个非常小的值,通常选取 0.001),然后求两个代价的平均,用以估计在 𝜃处的代价值。如下图所示
当𝜃是一个向量时,则需要对偏导数进行检验。因为代价函数的偏导数检验只针对一个参数的改变进行检验,下面是一个只针对𝜃1进行检验的示例:

 

检验时,要将𝛥𝑖𝑗(𝑙)矩阵展开成为向量,同时我们也将 𝜃 矩阵展开为向量,我们针对每一个 𝜃 都计算一个近似的梯度值,将这些值存储于一个近似梯度矩阵中,最终将得出的这个矩阵同𝛥𝑖𝑗(𝑙) 进行比较。

 

 

7.4 随机初始化

到目前为止线性回归,逻辑回归都是初始所有参数为 0,但是对于神经网络来说是不可行的。如果我们令所有的初始参数都为 0,这将意味着我们第二层的所有激活单元都会有相同的值。同理,如果我们初始所有的参数都为一个非 0 的数,结果也是一样的。
对于神经网络,通常初始参数为 [ - 𝜀 , 𝜀 ] 的随机值。
 
7.5 神经网络总结
【1】网络结构:第一件要做的事是选择网络结构,即决定选择多少层以及决定每层分别有多少个单元。
【2】第一层的单元数即我们训练集的特征数量,最后一层的单元数是我们训练集的结果的类的数量。
【3】如果隐藏层数大于 1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。
【4】我们真正要决定的是隐藏层的层数和每个中间层的单元数。 
训练神经网络的步骤:
【1】参数的随机初始化
【2】利用正向传播方法计算所有的ℎ𝜃(𝑥)
【3】编写计算代价函数 𝐽 的代码
【4】利用反向传播方法计算所有偏导数
【5】利用数值检验方法检验这些偏导数
【6】使用优化算法来最小化代价函数
 

posted on   zc-DN  阅读(103)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示