精华内容
下载资源
问答
  • softmax回归梯度公式推导及实现

    千次阅读 2018-03-24 15:23:22
    最近在看小象学院的机器学习视频,里面只稍微提了下softmax回归,并没给推导过程和代码,于是就自己尝试了一下。 推导如下: 代码实现使用的是鸢尾花数据集,该数据集有3种鸢尾花,数据集刚开始长下面这个...

    最近在看小象学院的机器学习视频,里面只稍微提了下softmax回归,并没给推导过程和代码,于是就自己尝试了一下。

    推导如下:

    代码实现使用的是鸢尾花数据集,该数据集有3种鸢尾花,数据集刚开始长下面这个样子:

    data=pd.read_csv('iris.data',header=None) #一共有150个样本

     

     

    对数据进行预处理,首先把3种鸢尾花名称编码成0,1,2,然后还要插入一列,使数据x变成(1,x),方便算theta*(1,x)

    sort=data[4]   
    data[4]=pd.Categorical(data[4]).codes   #将种类编码成0,1,2
    data.insert(0,'常数项',1)   #将x扩展成(1,x),以便计算theta*(1,x)

     

    变换完成后,数据变成下面的样子

     

    然后就可以选出训练集和测试集了

    x=data.iloc[:,0:5].as_matrix()
    y=data[4].as_matrix()
    x,x_test,y,y_test=train_test_split(x,y,test_size=0.3)  #用105个样本训练
    theta=softMax(x,y,0.02)   #学习因子不能取太大,否则最后计算出的theta无穷大

     

    softmax回归参数训练的程序如下

     

    #采用随机梯度下降法,每次只挑选一个样本做优化
    def softMax(x,y,alpha):  
        theta=np.zeros((3,5))  #初始theta矩阵  
        for i in range(10000): #迭代10000次  
            k=np.random.randint(0,105) #从105个样本中随机挑选一个做优化
            x_=x[k].reshape(5,1)
            theta_T_x=np.dot(theta,x_)  #计算所有的theta*x  
            e_theta_T_x=np.exp(theta_T_x)   #计算所有指数函数  
            denominator=e_theta_T_x.sum()  #计算分母  
            numerator=e_theta_T_x   #分子  
            fraction=numerator/denominator  #计算所有分数  
            y_vector=np.where(np.arange(3).reshape(3,1)==y[k],1,0) #计算y向量
            gradient=(fraction-y_vector)*x[k]
            theta-=alpha*gradient   #更新theta矩阵  
        return theta  

     

    训练完theta后,就可以在测试集上验证了

     

    predict=np.dot(theta,x_test.T)
    predict_sort=predict.argmax(axis=0)
    num_of_wrong=(predict_sort!=y_test).sum()
    print("预测错误的个数: ",num_of_wrong)
    print("正确率为: {0}%".format((45-num_of_wrong)/45*100))

     

    结果如下:

     

    预测错误的个数:  1
    正确率为: 97.77777777777777%

    完整的代码实现如下所示:

    import numpy as np  
    import pandas as pd  
    from sklearn.model_selection import train_test_split  
      
    #采用随机梯度下降法,每次只挑选一个样本做优化
    def softMax(x,y,alpha):  
        theta=np.zeros((3,5))  #初始theta矩阵  
        for i in range(10000): #迭代10000次  
            k=np.random.randint(0,105) #从105个样本中随机挑选一个做优化
            x_=x[k].reshape(5,1)
            theta_T_x=np.dot(theta,x_)  #计算所有的theta*x  
            e_theta_T_x=np.exp(theta_T_x)   #计算所有指数函数  
            denominator=e_theta_T_x.sum()  #计算分母  
            numerator=e_theta_T_x   #分子  
            fraction=numerator/denominator  #计算所有分数  
            y_vector=np.where(np.arange(3).reshape(3,1)==y[k],1,0) #计算y向量
            gradient=(fraction-y_vector)*x[k]
            theta-=alpha*gradient   #更新theta矩阵  
        return theta  
              
              
              
              
    if __name__=="__main__":  
        data=pd.read_csv('iris.data',header=None)  #一共有150个样本  
        sort=data[4]     
        data[4]=pd.Categorical(data[4]).codes   #将种类编码成0,1,2  
        data.insert(0,'常数项',1)   #将x扩展成(1,x),以便计算theta*x  
        x=data.iloc[:,0:5].as_matrix()  
        y=data[4].as_matrix()  
        x,x_test,y,y_test=train_test_split(x,y,test_size=0.3)  #用105个样本训练  
        theta=softMax(x,y,0.01)   #学习因子不能取太大,否则最后计算出的theta无穷大  
        predict=np.dot(theta,x_test.T)  
        predict_sort=predict.argmax(axis=0)  
        num_of_wrong=(predict_sort!=y_test).sum()  
        print("预测错误的个数: ",num_of_wrong)  
        print("正确率为: {0}%".format((45-num_of_wrong)/45*100))  

     

     

     

     

     

     

     

    展开全文
  • 公式满足分布函数的性质 (1)非负有界性 0<=F(x)<=10<= F(x) <=10<=F(x)<=1 (2)单调连续性 (3)右连续性 F(x0+)=F(x)F(x_0^+) = F(x)F(x0+​)=F(x) 所以可以认为是随机变量x的分布函数,即为F(x)=P...

    逻辑回归的损失函数

      逻辑回归的函数为
    f(x)=11+eθTxf(x) = \cfrac{1} {1+e^{-\theta^T x }}

      公式满足分布函数的性质
    (1)非负有界性 0<=F(x)<=10<= F(x) <=1 (2)单调连续性 (3)右连续性 F(x0+)=F(x)F(x_0^+) = F(x)
      所以可以认为是随机变量x的分布函数,即为F(x)=P(x)F(x) = P(x)即为
    P(x)=11+eθTxP(x) = \cfrac{1} {1+e^{-\theta^T x }} 公式1
      假设该分类标签为1时的概率为P,我们可以假设对于一个特定的score,如果大于该score该事件发生;小于或等于该score,该事件不发生。
    发生该事件即为变量Y = 1,不发生即为Y = 0,假设Y = 1发生的概率为P,这Y = 0发生的概率为1 - P。
      对于变量Y分布函数可以写成
    p(yx)=f(x)={P,  Y=11P,  Y=0p(y|x) =f(x) = \left\{\begin{matrix} P, \; Y = 1 \\ 1 - P, \; Y = 0 \end{matrix}\right.

      为简化表示可以写成
    P(yx)=Py(1P)(y1)P(y|x) = P^{y} {(1 - P)^{(y-1)}}
      对于已有的样本数据集X1,X2,...,Xn{X_1,X_2,...,X_n}
    对于上述样本同时发生的概率可以表示为

    P=P(y1x1)P(y1x2)P(y1x2)...P(ynxn)=i=1nP(yixi)=i=1nPyi(1P)(yi1) P_总 = P(y_1|x_1) P(y_1|x_2) P(y_1|x_2)... P(y_n|x_n)\\ = \prod_{i= 1}^{n}P(y_i|x_i)\\ = \prod_{i= 1}^{n}P^{y_i} {(1 - P)^{(y_i-1)}}\\
      根据极大似然估计法的思想,我们应该假设出现事件的概率最大,所以我们应该求该函数值最大的情况下对应的θ\theta。该函数值最大时表示当前的模型与实际的输出结果间的差距最小。为符合损失函数的定义,我们可以将其加一个负号
    w=argmax(P)=argmin(P)=argmin(lnP)w^* = arg max(P_总) = arg min(-P_总)= arg min(-lnP_总)
      为方便求导运算,可以对两边取对数

    P=lni=1nPyi(1P)(yi1)=i=1nlnPyi(1P)(yi1)=i=1n(yilnP+(1yi)ln(1P)) P_总= ln{\prod_{i= 1}^{n}P^{y_i} {(1 - P)^{(y_i-1)}}}\\ = \sum_{i= 1}^{n}ln{P^{y_i} {(1 - P)^{(y_i-1)}}}\\ = \sum_{i= 1}^{n} {(y_i lnP + (1-y_i) ln(1 - P))}\\

      为了消除样本量对损失函数的影响,我们将其除以nn得到
    F(θT)=1ni=1nPyi(1P)(yi1)F(\theta^T) = -\cfrac{1}{n} \prod_{i= 1}^{n}P^{y_i} {(1 - P)^{(y_i-1)}}

    PθT=P(z)zθT=P(1P)(θTX)(θT)=P(1P)X {P}'_{\theta^T} = {P}'_{(z)} {z}'_{\theta^T}\\ =P (1-P) {(\theta^T X)}'_{(\theta^T)}\\ =P (1 - P) X
      根据链式求导法则

    FθT=1nFPPθT=1ni=1n(yiPy11P)P(1P)xi=1ni=1n(y(1P)+(y1)P)xi=1ni=1n(Pyi)xi \nabla F_{\theta^T} = -\cfrac {1} {n}{F}'_{P} {P}'_{\theta^T}\\ = -\cfrac {1} {n} \sum_{i = 1}^{n} {({\cfrac{y_i} {P} - \cfrac {y-1}{1-P})}P (1-P) x_i}\\ = -\cfrac {1} {n} \sum_{i = 1}^{n} {(y (1-P) + (y-1) P)} x_i\\ = \cfrac {1} {n} \sum_{i = 1}^{n} {(P - y_i)} x_i

      使用随机梯度下降需要指定优化的初始值w0w_0,指定学习率α\alpha,这每次迭代的新值为
    wi=w0αFθT=w0α1ni=1n(Pyi)xi w_i = w_0 - \alpha \nabla F_\theta^T\\ = w_0 - \alpha \cfrac {1} {n} \sum_{i = 1}^{n} {(P-y_i)}x_i

    展开全文
  • 这篇是西瓜书第五章的公式推导笔记,主要在于对公式推导过程说明的笔记,但是博客标注转载需要原文链接,我没有啊,所以写了原创,愧疚。

    这篇是西瓜书第五章的公式推导笔记,主要在于对公式推导过程说明的笔记,但是博客标注转载需要原文链接,我没有啊,所以写了原创,愧疚。

     

     

     

    下面开始是推导过程的近一步的解释。

    首先:BP算法的梯度下降(gradient descent)是梯度的反方向,所以有个负号。 

    先看

     η是学习率,后面是偏导数,再乘以-1(梯度反方向嘛)

    根据链式法则,求偏导一个一个分解过程,所以这个链式法则应该都能看懂了。

    过程如下:

    类似可得,这个真的类似:

     

    展开全文
  • 策略梯度算法是众多强化学习算法的基础,但公式推导通常不集中,这里将其集中到一起,便于前后对照查看。

    策略梯度算法是众多强化学习算法的基础,但公式推导通常不集中,这里将其集中到一起,便于前后对照查看。
    在这里插入图片描述
    图片中的所有公式均依赖于《深入浅出强化学习原理入门》一书。

    展开全文
  • mllib之梯度下降公式推导

    千次阅读 2015-03-25 00:15:14
    梯度下降(GD)是最小化风险函数、损失函数的一种常用方法,随机梯度下降和批量梯度下降是两种迭代求解思路,下面从公式和实现的角度对两者进行分析,如有哪个方面写的不对,希望网友纠正。 下面的h(x)是要拟合的...
  • 梯度下降数学解释: 场景假设 梯度下降法的基本思想可以类比为一个下山的过程。 假设这样一个场景:一个人被困在山上,需要从山上下来(找到山的最低点)。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径...
  • 梯度向下公式中,计算J(w)的梯度可以归结为计算f(u)的梯度。可以使用链式求导法计算: δ δ w j f ( u ) = f ′ ( u ) u ′ x i j \frac{δ}{δw_j}f(u) = f'(u)u'x_{ij} δ w j ​ δ ​ f ( u ) = f ′ ( u ...
  • 梯度下降法公式推导

    千次阅读 2019-07-28 15:52:22
    梯度下降法 梯度下降法是求解无约束最优化问题的一种最常用的方法,是一种迭代算法,每一步需要求解目标函数的梯度向量。 梯度的定义: 某一函数沿着某点处的方向导数可以以最快速度到达极大值,该方向导数我们...
  • 什么是梯度下降,举个栗子,(假设地面无障碍物)我们在山顶丢一个网球,啪,一下就越过这个坡了,然后在另一个沟里来回跳动,一直到达最低点。那么问题来了,这这里在跳跃的过程中,直接越过第一个坡度。这样的结果...
  • Logistic回归cost函数的推导过程。算法求解使用如下的cost函数形式: 梯度下降算法 对于一个函数,我们要找它的最小值,有多种算法,这里我们选择比较容易用代码实现和符合机器学习步骤的梯度下降算法。 先...
  • 这要从梯度下降算法推导来理解: 首先看一下梯度的定义: 看不懂也没关系,只要认识梯度的符号▽ 请看下面的推导过程: 可以发现5.19和5.23很相似,就可以将5.19的推论应用到5.23来理解。 5.19:对x的变化更新,...
  • 用张量运算推导了弹性应变梯度轴对称问题的基本公式。建立了应变梯度轴对称不协调元的弱连续条件 ,进一步建立了满足弱连续条件的应变梯度轴对称 18-DOF三角形单元(BCIZ + ART9) ,其中 BCIZ满足线性应变 C0 连续 ,...
  • 之前在看批量梯度下降的时候,看到代价函数J(w)的求导过程中,一直搞不明白它是怎么推导出来的,今天终于把它推导出来了。
  • 文章目录前言公式推导总结 前言 什么是AI? The theory and development of computer systems able to perform tasks normally requiring human intelligence.(–Oxford Dictionary) Using data to solve problems....
  • 这篇博文的工作是详细推导了逻辑回归反向传播梯度计算公式(什么是梯度?简单来讲就是成本函数对未知参数向量的导数,这个梯度方向是成本函数下降最快的方向),最后附上逻辑回归优化算法和逻辑回归实现...
  • 文中元学习(Meta Learning)是学习了李宏毅教授的视频... 提出问题: 根据参数更新的第一,二两个公式,可以将公式一中的梯度写成如下: 此时,有一个问题,梯度是 那么 公式推导 所以
  • 梯度下降及反向传递公式推导 之前发布在作业部落了,可以通过这个链接访问,其中的数学公式转过来比较麻烦,先看作业部落的链接吧:https://www.zybuluo.com/JackMeGo/note/1052246 ...
  • Logistic回归代价函数的梯度下降公式推导过程Logistic回归代价函数梯度下降公式数学推导过程数学推导过程如下 Logistic回归代价函数梯度下降公式数学推导过程 因为最近在学习吴恩达的机器学习,这只是个人顺手保存...
  • 机器学习中逻辑回归的梯度下降算法中theta更新公式推导
  • 梯度下降法复杂度计算与公式推导

    千次阅读 2019-05-26 19:39:00
    梯度下降法的好坏的评估与公式推导 如何评估一个梯度下降法的好坏 通过自己的数据进行实际代码运行测试,看看时间性能如何。但是这样子不能直观看出类似于:quick sort(nlogn)这样的复杂度 通过公式进行复杂度评估 ...
  • 理解梯度首先要理解导数、偏导数、方向导数。 导数: 指的是一元函数y=f(x)y = f(x)y=f(x) 在某一点处沿x轴正方向的变化率。若导数大于0,说明函数值在该点处沿x轴正方向是递增的,若导数小于0,说明函数值在该...
  • 本文介绍了梯度下降的一般格式、梯度下降算法(小批量、批量、随机)、momentum、adagrad、adadelta、adam算法中参数更新的思想及公式推导
  • 梯度下降的矩阵分解公式推导与实例分析 当我们了解和学习过梯度下降之后,对于矩阵分解的学习会更直接易懂。 矩阵分解就是将一个大的矩阵分解成两个行对应列相等的两个小矩阵,用两个小的矩阵去预测大的矩阵的取值。...
  • 这篇Blog的主要内容是关于梯度下降法的一些理解,以及相关的公式推导梯度下降法很早之前就接触过,但是因为长时间不用,所以理解上也有了一些欠缺,今天看了一些参考文献,写一下自己的一些理解。便于以后帮助自己...
  • 稀疏编码中涉及到的: LASSO,近端梯度优化(PGD),迭代软阈值算法(ISTA),L-Lipschitz条件,软阈值的公式推导
  • 牛顿法与梯度下降法数学公式推导过程 迭代更新数学公式推导过程 1、牛顿法 首先对于有n个变量的函数的一阶导数为:   其次对于其二阶导数为:   之后关于目标函数的包含二阶导数的泰勒展开式为:   这时...
  • 梯度旋度公式推导

    千次阅读 多人点赞 2020-02-27 23:48:45
    关于场论一些公式推导 最近学电磁场,手动推了一些公式并写了出来。我在我的资源放置了pdf版,大家有需要可以下载。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 865
精华内容 346
关键字:

梯度公式推导