精华内容
下载资源
问答
  • (特殊的:自变量个数为1个,为一元线性回归)多元线性回归模型如下所示: 如上图所示,一元线性回归图形为一条直线。而二元线性回归,拟合的为一个平面。多元线性回归拟合出的图像为以超平面; 逻辑回归...

    多元线性回归

    定义:回归分析中,含有两个或者两个以上自变量,称为多元回归,若自变量系数为1,则此回归为多元线性回归。

    (特殊的:自变量个数为1个,为一元线性回归)多元线性回归模型如下所示:

     如上图所示,一元线性回归图形为一条直线。而二元线性回归,拟合的为一个平面。多元线性回归拟合出的图像为以超平面;

     逻辑回归(分类问题的处理)

    求解步骤:1)确定回归函数 (通常用Sigmoid函数) ; 2)确定代价函数(含有参数);3)求解参数(梯度下降/最大似然)

    1)Sigmoid函数可以作为二分类问题的回归函数,而且此函数为连续的且通过0为界限分为大于0.5与小于0.5的两部分;

    Sigmoid函数形式为:

    Sigmoid函数图像为:(连续可导满足我们的需求,便于后续参数的求解

     第一步:构造预测函数为:

    在这里就是将sigmoid函数中的自变量部分替换为多元线性回归模型

    第二步:构造损失函数: 

    这里的y为样本的真实值,根据预测值与真实值之间的关系构造损失函数,求解预测函数参数使得其损失值最小。

    结合函数图像当真实值y=1时,预测值越接近1则代价越小(反之越大),同理可得真实值y=0的情况; 

    由此我们根据y的取值不同构造出损失函数:

    第三步:求解函数参数:在这里采用梯度下降法求解参数   

    通过对参数求偏导数可得变化率为,并通过此关系式求解参数;

    逻辑回归实战(Fight)

    1)导入所需要的库文件以及获取数据集合(数据集合在最底部^_^)

    import numpy as np
    import matplotlib.pyplot as plt
    import  math
    #导入必备的包
    
    positive = [] #正值点
    negative = [] #负值点
    #导入数据
    dataSet = [] #数据点
    def functionexp(k1,k2,x,y,b):
        return math.exp(k1 * x + k2 *y + b)  #e^(θx+b)
    
    #数据集合获取
    with open('testSet.txt') as f:
        for line in f:
            line = line.strip('\n').split('\t')
            if line[2]=='1':
                positive.append([float(line[0]),float(line[1])])
            else:
                negative.append([float(line[0]),float(line[1])])
            dataSet.append([float(line[0]),float(line[1]),int(line[2])])
    

    2)根据样本集合求解参数(使用梯度下降法)

    #求解参数
    k1 = 0
    k2 = 0
    b = 0
    step =2500 #学习步长
    learnrate = 1 #学习率
    for i in range(step):
        temp0 = 0
        temp1 = 0 #初始化参数
        temp2 = 0
        for j in dataSet:
            e = functionexp(k1, k2, j[0], j[1], b)
            temp0 = temp0 + (e /( 1 + e ) - j[2] ) / len(dataSet)
            temp1 = temp1 + (e / (1 + e ) - j[2] ) * j[0]/ len(dataSet)
            temp2 = temp2 + (e / (1 + e ) - j[2] ) * j[1] / len(dataSet)
        k1 = k1 - temp1 * learnrate
        k2 = k2 - temp2 * learnrate
        b  = b  - temp0 * learnrate

    3)绘制样本散点图以及决策边界(拟合曲线)

    #绘制样本点以及分类边界
    dataX = []#样本点X集合
    dataY = []#样本点Y集合
    for i in positive:
        dataX.append(i[0])
        dataY.append(i[1])
    plt.scatter(dataX,dataY,c='red')#绘制正样本散点图
    dataX.clear()
    dataY.clear()
    for i in negative:
        dataX.append(i[0])
        dataY.append(i[1])
    plt.scatter(dataX,dataY,c='blue')#绘制负样本散点图
    XX=[-3,3]
    plt.plot(XX,(-k1/k2)*np.array(XX)-b/k2,'yellow')
    plt.show()

    运行结果如下图所示(这里没有过多使用numpy库中的矩阵运算,仅限理解逻辑回归)

    up通过sklearn进行逻辑回归:

    import numpy as np
    import matplotlib.pyplot as plt
    import  math
    from sklearn import linear_model
    from sklearn import preprocessing
    from sklearn.metrics import classification_report
    
    positive = [] #正值点
    negative = [] #负值点
    #导入数据
    dataSet = [] #数据点
    X=[]
    Y=[]
    
    #数据集合获取
    with open('testSet.txt') as f:
        for line in f:
            line = line.strip('\n').split('\t')
            if line[2]=='1':
                positive.append([float(line[0]),float(line[1])])
            else:
                negative.append([float(line[0]),float(line[1])])
            dataSet.append([float(line[0]),float(line[1]),int(line[2])])
            X.append([float(line[0]),float(line[1])])
            Y.append([int(line[2])])
    
    #求解参数
    logistic = linear_model.LogisticRegression()
    logistic.fit(np.array(X),np.array(Y))
    
    #绘制样本点以及分类边界
    dataX = []#样本点X集合
    dataY = []#样本点Y集合
    for i in positive:
        dataX.append(i[0])
        dataY.append(i[1])
    plt.scatter(dataX,dataY,c='red')#绘制正样本散点图
    dataX.clear()
    dataY.clear()
    for i in negative:
        dataX.append(i[0])
        dataY.append(i[1])
    plt.scatter(dataX,dataY,c='blue')#绘制负样本散点图
    XX=[-3,3]
    plt.plot(XX,(-np.array(XX)*logistic.coef_[0][0]-logistic.intercept_)/logistic.coef_[0][1],'black')
    plt.show()

    回归效果(感觉比自己写的回归效果好=_=)

    总结 (关于逻辑回归的思考以及正确率、召回率、F1指标)

    在分类问题中可以灵活运用二分类的解法来求解多分类问题(是否问题,即是这一类的和不是这一类的),将多分类问题

    转化为二分类问题。而且采用的模型并不一定必须是多元线性模型(非线性模型),根据情况选取合适的模型。

    正确率:检索出来的条目有多少是正确的(相对于结果而言)。即:正确的个数在预测为正确总个数的比例;

    召回率:正确的有多少被检测出来了,即:检测(预测)出的正确个数/总正确个数;

    F1指标:2*正确率*召回率/(正确率+召回率);(综合反映上述两个指标)

    以上的指标都是介于0-1之间的,且数值越接近于1说明效果越好

    -0.017612	14.053064	0
    -1.395634	4.662541	1
    -0.752157	6.538620	0
    -1.322371	7.152853	0
    0.423363	11.054677	0
    0.406704	7.067335	1
    0.667394	12.741452	0
    -2.460150	6.866805	1
    0.569411	9.548755	0
    -0.026632	10.427743	0
    0.850433	6.920334	1
    1.347183	13.175500	0
    1.176813	3.167020	1
    -1.781871	9.097953	0
    -0.566606	5.749003	1
    0.931635	1.589505	1
    -0.024205	6.151823	1
    -0.036453	2.690988	1
    -0.196949	0.444165	1
    1.014459	5.754399	1
    1.985298	3.230619	1
    -1.693453	-0.557540	1
    -0.576525	11.778922	0
    -0.346811	-1.678730	1
    -2.124484	2.672471	1
    1.217916	9.597015	0
    -0.733928	9.098687	0
    -3.642001	-1.618087	1
    0.315985	3.523953	1
    1.416614	9.619232	0
    -0.386323	3.989286	1
    0.556921	8.294984	1
    1.224863	11.587360	0
    -1.347803	-2.406051	1
    1.196604	4.951851	1
    0.275221	9.543647	0
    0.470575	9.332488	0
    -1.889567	9.542662	0
    -1.527893	12.150579	0
    -1.185247	11.309318	0
    -0.445678	3.297303	1
    1.042222	6.105155	1
    -0.618787	10.320986	0
    1.152083	0.548467	1
    0.828534	2.676045	1
    -1.237728	10.549033	0
    -0.683565	-2.166125	1
    0.229456	5.921938	1
    -0.959885	11.555336	0
    0.492911	10.993324	0
    0.184992	8.721488	0
    -0.355715	10.325976	0
    -0.397822	8.058397	0
    0.824839	13.730343	0
    1.507278	5.027866	1
    0.099671	6.835839	1
    -0.344008	10.717485	0
    1.785928	7.718645	1
    -0.918801	11.560217	0
    -0.364009	4.747300	1
    -0.841722	4.119083	1
    0.490426	1.960539	1
    -0.007194	9.075792	0
    0.356107	12.447863	0
    0.342578	12.281162	0
    -0.810823	-1.466018	1
    2.530777	6.476801	1
    1.296683	11.607559	0
    0.475487	12.040035	0
    -0.783277	11.009725	0
    0.074798	11.023650	0
    -1.337472	0.468339	1
    -0.102781	13.763651	0
    -0.147324	2.874846	1
    0.518389	9.887035	0
    1.015399	7.571882	0
    -1.658086	-0.027255	1
    1.319944	2.171228	1
    2.056216	5.019981	1
    -0.851633	4.375691	1
    -1.510047	6.061992	0
    -1.076637	-3.181888	1
    1.821096	10.283990	0
    3.010150	8.401766	1
    -1.099458	1.688274	1
    -0.834872	-1.733869	1
    -0.846637	3.849075	1
    1.400102	12.628781	0
    1.752842	5.468166	1
    0.078557	0.059736	1
    0.089392	-0.715300	1
    1.825662	12.693808	0
    0.197445	9.744638	0
    0.126117	0.922311	1
    -0.679797	1.220530	1
    0.677983	2.556666	1
    0.761349	10.693862	0
    -2.168791	0.143632	1
    1.388610	9.341997	0
    0.317029	14.739025	0

     

    展开全文
  • 2 从线性回归模型到最小二乘法的构建   [问题] 对于给定向量集合Ω={Xi},i:={1,...m},Xi属于集合Rn;再给出一个数集Y={yi},i:={1,...m}存在一个映射{Di}→{Yi}试给出它们的最佳超平面模拟; [分析]映射Z =...

    1 引言

      给出多元线性回归的解法,本篇重点回答如何构造“梯度下降法解”的数学模型。

    2 从线性回归模型到最小二乘法的构建 

      [问题] 对于给定向量集合Ω={Xi},i:={1,...m},Xi属于集合Rn;再给出一个数集Y={yi},i:={1,...m}存在一个映射{Di}→{Yi}试给出它们的最佳超平面模拟;

          [分析]   映射        Z = Xα + β          ; Z是m×1向量;X是m×n的矩阵; α是1×n的向量;β为标量常量

                     最小二乘法表达式: E = ∑i( yi  - Zi2

          改写为: E = ∑i( yi  - Xi α - β)2

                     重新拼接表达式:令 Xα + β = [X I ][α β],且W = [X,I],ω = [α,β]T

                     E = || Y - Wω||2

                     梯度表达式:∂E/∂ω = 2(-W)T( Y - W ω );       //   此处为E对ω的梯度;根据此梯度更新ω的系数;对矩阵求导后,需要转置换位;

                     令迭代序列为 {ω  ω1   ω2    ω3 ...  ωs }

                     其中 ωi+1 = ωi  - 2ε(∂E/∂ω) ,               其中ε是给定的迭代步长;每次迭代增加梯度方向上的ε个长度

           至此,按照梯度逐步下降的方向,一步一步将ωi迭带为数值解。

    3 Python代码实现

    import numpy as np
    Y = np.array([0.75,0.98,1.76,1.98,2.63])
    W = np.array([[2.1,1],[2.98,1],[4.9,1],[6.1,1],[7.6,1]])
    omig = np.array([0,0])
    for i in range(60000):
    mid = Y - np.dot(W,omig)
    Gnd = -2*np.dot(W.T,mid)
    omig = omig - 0.0002*Gnd
    if (i%10000 == 0 ):
    print omig
    结果打印
    [ 0.01807416 0.00324 ]
    [ 0.33869174 0.0163087 ]
    [ 0.33910011 0.0140404 ]
    [ 0.33912152 0.01392144]
    [ 0.33912265 0.0139152 ]
    [ 0.3391227 0.01391487]
    打印图

     

    转载于:https://www.cnblogs.com/gongdiwudu/p/6138151.html

    展开全文
  • 本文从统计的角度解释了二元逻辑回归和多元逻辑回归两个经典模型背后的数学理论,以及其是如何和机器学习联系上的




    概述

    以下是此篇文章要用的包

    # 加载包
    import numpy as np
    import seaborn as sns
    import matplotlib.pyplot as plt
    sns.set_style('darkgrid')
    

    两个重要函数


    二元逻辑回归的出发点是sigmoid函数
    S(x)=11+ex=ex1+ex S(x)= \frac{1}{1+e^{-x}}= \frac{e^{x}}{1+e^{x}}

    Sigmoid函数能将实数域的连续数映射到0,1区间,概率的取值范围就在0,1之间,因此可以用来做概率的预测。

    以下是Sigmoid函数的代码和图像

    x=np.arange(-10,10)
    y=1/(1+np.exp(-x))
    plt.plot(x,y)
    

    Output:



    多元逻辑回归的出发点是softmax函数
    S(x)=exij=1kexj S(x)=\frac{e^{x_i}}{\sum_{j=1}^{k}e^{x_j}}
    Softmax函数也是将实数域的连续数映射到0,1区间,进而可以理解为是概率。

    以下是softmax函数的代码和图像

    图像的特点:

    • 设向量x=[0,1,2,3,…,49],其输出也是一个向量y
    • 这里Softmax函数会将x里的每个数映射到0,1区间
    • 并且y里元素加和为一
    • 数越大,其输出也越大,即概率越大。
    x=np.arange(0,50)
    y=np.exp(x)/np.sum(np.exp(x))
    plt.plot(x,y)
    print('the sum of y={}'.format(y.sum()))
    

    Output:
    the sum of y=1.0


    预测的基本思想


    我们想处理分类问题,最基本的统计模型便是逻辑回归,之所以使用它,最主要的原因是其输出是在0,1之间。

    注意,我们并不是直接输出类别编号,而是一个概率值

    然后我们会根据情况的不同来确定一个阈值,通常这个阈值定在0.5。比如,二元模型中(类别0和1),我的输出是P(Y=1)=0.75(0.75>0.5),则认为此时Y是属于类别1的。




    二元逻辑回归


    线性模型的简单回顾

    要解释二元逻辑回归,我们得先来了解下什么是线性模型

    首先这个模型建立在两个个假设上

    • 假设yyXX之间是一个线性关系
    • yi(i=1,2,3,...,n)y_i(i=1,2,3,...,n)是独立同分布

    yyXX之间的线性关系

    y=Xβ y=Xβ

    因变量yy是一个nx1向量

    y=[y1y2yn] y= \left[ \begin{matrix} y_1 \\ y_2 \\ \vdots\\ y_n \end{matrix} \right]

    带截距项的自变量XX是一个nx(m+1)的矩阵
    X=[1x11x12...x1m1x21x21...x2m1xn1xn2...xnm] X= \left[ \begin{matrix} 1&x_{11}&x_{12}&...&x_{1m}\\ 1&x_{21}&x_{21}&...&x_{2m}\\ \vdots&\vdots&&\vdots\\ 1&x_{n1}&x_{n2}&...&x_{nm} \end{matrix} \right]

    带截距项的参数ββ是一个mx1向量
    β=[β0β1β2βm] β= \left[ \begin{matrix} β_0 \\ β_1 \\ β_2 \\ \vdots\\ β_m \end{matrix} \right]

    从线性回归到二元逻辑回归

    对于二值因变量yiy_i(yi=0y_i=0yi=1y_i=1),我们的假设是yi(i=1,2,...,n)y_i(i=1,2,...,n) 独立同分布Bernouli分布,即

    yiBernouli(P(yi=1)) y_i\sim Bernouli (P(y_i=1))
    首先我们想到用最基本的线性回归来估计yiy_i,在Bernouli分布中,yiy_i的均值是P(yi=1)P(y_i= 1),因此我们的预测模型为

    E(yi)=P(yi=1)=xiβ E(y_i) = P(y_i= 1) =x_iβ

    但这样做的缺点就是xiβx_iβ的取值可能会落在[0,1]之外,受Sigmoid函数的启发,我们将预测模型改成
    E(yi)=P(yi=1)=11+exiβ E(y_i) = P(y_i = 1) =\frac{1}{1+e^{-x_iβ}}
    β=(β0,β1,βm)xi=(1,xi1,xi2,,xim)xiβ=β0+xi1β1+...+ximβmβ = (β_0, β_1, … β_m)',且 x_i= (1, x_{i1}, x_{i2}, … ,x_{im}),即x_iβ=β_0+x_{i1}β_1+...+x_{im}β_m


    参数怎么估计

    前面知道YiY_i 服从Bernouli分布,既然分布已知了,我们自然会想到用极大似然估计的方法去估计参数,此时的似然函数是
    L(β)=f(y1,y2,..,yn)=j=1npiyj(1pi)1yi=j=1n(pi1pi)yi(1pi) L(β)=f(y_1,y_2,..,y_n)=\prod_{j=1}^np_i^{y_j}(1-p_i)^{1-y_i}=\prod_{j=1}^n(\frac{p_i}{1-p_i})^{y_i}(1-p_i)
    其中pi=P(Yi=1)=11+exiβp_i=P(Y_i = 1)=\frac{1}{1+e^{-x_iβ}},又发现这样的关系Logpi1pi=xiβLog\frac{p_i}{1-p_i}=x_iβ,为了之后计算方便,先对上式两边取对数得到

    LogL(β)=Logf(y1,y2,..,yn)=j=1nyj(Logpi)+(1yj)(Log(1pi))(1) LogL(β)=Logf(y_1,y_2,..,y_n)=\sum_{j=1}^n y_j(Logp_i)+(1-y_j)(Log(1-p_i))\tag1 =j=1nyjLogpi1pi+Log(1pi)=j=1nyjxiβLog(1+exiβ)(2) =\sum_{j=1}^ny_jLog\frac{p_i}{1-p_i}+Log(1-p_i)=\sum_{j=1}^ny_jx_iβ-Log(1+e^{x_iβ})\tag2
    最大化这个似然函数,并取此时满足情况的ββ作为参数的估计值β^\widehat{β},就能得到预测模型E(Yi)=P(Yi=1)=11+exiβ^E(Y_i) = P(Y_i= 1) =\frac{1}{1+e^{-x_i\widehatβ}}了,而为什么要最大化这个似然函数呢,也就是极大似然估计的意义在哪?

    • 因为我们的假设是YiY_i独立同分布,这里的似然函数实质就是Yi(i=1,2,...,n)Y_i(i=1,2,...,n)的联合密度函数,当联合密度函数最大的时候,也就是概率最大的时候,事件最可能发生的时候,所以我们会想去最大化似然函数。

    我想大部分读者都是对机器学习感兴趣来的,那这我们用一个机器学习里的名词,代价函数(Cost function),来进行接下来的步骤,把(1)式做个小小修改就变成了,大家熟悉的代价函数

    Cost(β)=1nj=1nyj(Logpi)+(1yj)(Log(1pi))(3) Cost(β)=-\frac{1}{n}\sum_{j=1}^n y_j(Logp_i)+(1-y_j)(Log(1-p_i))\tag3

    其实质就是将似然函数的对数函数做了一个平均,最大化似然函数的对数函数,也就是最小化这个代价函数

    如果想要更严格地估计,我们还可以在这个基础上,再添加惩罚项(Penalty),这个步骤也叫正则化(Regularization),常见的惩罚项是一范数和二范数,也分别叫做Lasso和Ridge,叫啥都无所谓,实质都是数学。

    CostL1(β)=Cost(β)+λnj=1mβjCostL2(β)=Cost(β)+λ2nj=1mβj2 Cost_{L_1}(β)=Cost(β)+\frac{λ}{n}\sum_{j=1}^m|β_j|\\ Cost_{L_2}(β)=Cost(β)+\frac{λ}{2n}\sum_{j=1}^mβ_j^2

    明白了这层关系后,进一步的问题就在于如何最小化代价函数,并且得到其对应的参数ββ

    求参数ββ的方法常用的有两个,一个是梯度下降(Gradient descent),另一个是牛顿迭代(Newton’s Iteration)。


    梯度下降

    对(3)式里的代价函数求导,而(3)式就是把(2)式做了一个变换(2)n-\frac{(2)}{n},因此

    Cost(β)β=1n(2)β=1nj=1nxi(yjpi) \frac{\partial Cost(β)}{\partial β}=-\frac{1}{n}\frac{\partial (2)}{\partial β}=-\frac{1}{n}\sum_{j=1}^nx_i(y_j-p_i)

    和之前一样,这里pi=P(Yi=1)=11+exiβp_i=P(Y_i = 1)=\frac{1}{1+e^{-x_iβ}}

    xix_iyjy_j都是已知,给定初值β(0)=[β0(0),β1(0),β2(0),...,βm(0)]β^{(0)}=[β_0^{(0)},β_1^{(0)},β_2^{(0)},...,β_m^{(0)}]'后,得到pi(0)p_i^{(0)},因此参数βm(0)β_m^{(0)}的更新可以写成
    βm(t)=βm(t1)lCost(β(t1))β(t1)=βm(t1)l1nj=1nxi(yjpi(t1))(4) β_m^{(t)}=β_m^{(t-1)} - l·\frac{\partial Cost(β^{(t-1)})}{\partial β^{(t-1)}}\\ =β_m^{(t-1)} - l·\frac{1}{n}\sum_{j=1}^nx_i(y_j-p_i^{(t-1)})\tag4
    写成矩阵的形式
    β(t)=β(t1)l1nXT(yp) β^{(t)}=β^{(t-1)}-l·\frac{1}{n}·X^T·(y-p)
    其中ll学习速度(learning rate),XX是nx(m+1)的矩阵,yy是nx1的向量,pp是nx1的向量(p=[p1,p2,...,pn]p=[p_1,p_2,...,p_n]'),在实际的操作中,我们会多次取不同的初值,由此希望达到全局最小值。

    以下是梯度下降的简单实现,其中省略了计算pp的函数

    def update_bata(X, y, beta, l):
    	'''
    	X: 自变量是一个(n,m+1)的矩阵
    	y: 因变量是一个(n,1)的向量
    	beta: 参数β是一个(m+1,1)的向量
    	l: 学习速率
    	'''
        n = len(y)
    
        #1 由(4)的算式得到p,设函数名为cal_p
        p= cal_p(X, beta)
    
        #2 (4)的一部分
        gradient = np.dot(X.T,  y-p)
    
        #3 Take the average cost derivative for each feature
        gradient /= N
    
        #4 - Multiply the gradient by our learning rate
        gradient *= l
    
        #5 - Subtract from our weights to minimize cost
        beta -= gradient
    
        return beta
    

    牛顿迭代

    可以说这个方法是从泰勒展开得到的灵感,f(x)f(x)xkx_k处的展开式f(x)=f(xk)+f(xk)(xxk)+12!f(xk)(xxk)2+...f(x)=f(x_k)+f'(x_k)(x-x_k)+\frac{1}{2!}f''(x_k)(x-x_k)^2+...,我们想寻找满足f(x)=0f(x)=0xx,即牛顿迭代的终点是f(x)f(x)收敛到0

    在这我们只取前两项,h(x)=f(xk)+f(xk)(xxk)h(x)=f(x_k)+f'(x_k)(x-x_k),我们认为h(x)h(x)f(x)f(x)的一个近似,那么有f(x)=h(x)=0f(x)=h(x)=0,得到
    x=xkf(xk)f(xk) x=x_k-\frac{f(x_k)}{f'(x_k)}
    进而有迭代
    xk+1=xkf(xk)f(xk) x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}
    在我们的二元逻辑回归中,代价函数就是这里的f(x)f(x),参数ββ更新方法是
    β(k)=β(k1)cost(β(k1))cost(β(k1)) β^{(k)}=β^{(k-1)}-\frac{cost(β^{(k-1)})}{cost'(β^{(k-1)})}
    直至代价函数趋近于0。这里做一个区分,梯度下降方法中的代价函数不一定趋近于0。




    多元逻辑回归


    模型解释

    在这个模型中,自变量,因变量和参数的样子如下,可以看到yiy_i的取值由两元变成了多元,多元逻辑回归有次序多元逻辑回归无序多元逻辑回归之分,本文这只讨论无序的情况。

    因变量yy是一个nx1向量,yiy_{i}∈{w1,w2,w3,...,wKw_1,w_2,w_3,...,w_K},i=1,2,3,...,ni=1,2,3,...,n

    y=[y1y2yn] y= \left[ \begin{matrix} y_1 \\ y_2 \\ \vdots\\ y_n \end{matrix} \right]

    带截距项的自变量XX是一个nx(m+1)的矩阵
    X=[1x11x12...x1m1x21x21...x2m1xn1xn2...xnm] X= \left[ \begin{matrix} 1&x_{11}&x_{12}&...&x_{1m}\\ 1&x_{21}&x_{21}&...&x_{2m}\\ \vdots&\vdots&&\vdots\\ 1&x_{n1}&x_{n2}&...&x_{nm} \end{matrix} \right]

    带截距项的参数βkβ_k是一个mx1向量,k=1,2,3,....,Kk=1,2,3,....,K
    βk=[βk0βk1βk2βkm] β_k= \left[ \begin{matrix} β_{k0} \\ β_{k1} \\ β_{k2} \\ \vdots\\ β_{km} \end{matrix} \right]

    与二元逻辑回归的另一个区别就是,多元逻辑回归中用的是softmax函数。

    于是我们的自变量和因变量的概率之间的关系可以表示如下

    P(yi=wk)=exiβkj=1Kexiβj(5) P(y_i=w_k)=\frac{e^{x_iβ_k}}{\sum_{j=1}^{K}e^{x_iβ_j}}\tag{5}

    参数的估计

    这个无序多元逻辑回归模型有以下几个事实

    • 我们总共进行了n次试验
    • 每次试验的可能结果有K种,分别是yi(i=1,2,3,...n)=w1,w2,w3,...wKy_i(i=1,2,3,...n)=w_1,w_2,w_3,...w_K
    • 每种结果发生的概率pkp_k如(5)式所示,pkP(yi=wk)p_k\triangleq P(y_i=w_k)
    • 并且(5)具有这样的特点i=1Kpi=1\sum_{i=1}^Kp_i=1
    • n次试验中,结果kk发生次数nkn_ki=1nI(yi=k)\sum_{i=1}^{n}I(y_i=k),这里I(yi=k)I(y_i=k)指示函数(indicator function),当yi=ky_i=k成立时取1,不成立时取0

    通过上面的分析我们知道,当我们知道无序多元逻辑回归实质上是一个多项分布
    P(n1,n2,n3,...,nKβ1,β2,...βK)=n!n1!n2!n3!...nK!p1n1p2n2...pKnK(6) P(n_1,n_2,n_3,...,n_K|β_1,β_2,...β_K)=\frac{n!}{n_1!n_2!n_3!...n_K!}p_1^{n_1}p_2^{n_2}...p_K^{n_K}\tag6

    将(6)式两边取对数,有

    LogP(n1,n2,n3,...,nKβ1,β2,...βK)k=1KnkLogpk=k=1Ki=1nI(yi=k)Logexiβkj=1Kexiβj(7) LogP(n_1,n_2,n_3,...,n_K|β_1,β_2,...β_K) \propto \\ \sum_{k=1}^Kn_kLogp_k=\sum_{k=1}^K\sum_{i=1}^{n}I(y_i=k)Log\frac{e^{x_iβ_k}}{\sum_{j=1}^{K}e^{x_iβ_j}}\tag7

    \propto是正比符号,省略的部分是常数求导之后为零,因此这里就直接省掉了

    极大似然估计的方法是最大化(7)式,这里我们采用梯度下降的办法,于是我们的损失函数可以写成

    L(β)=k=1Ki=1nI(yi=k)Logexiβkj=1Kexiβj(8) L(β)=-\sum_{k=1}^K\sum_{i=1}^{n}I(y_i=k)Log\frac{e^{x_iβ_k}}{\sum_{j=1}^{K}e^{x_iβ_j}}\tag8

    先对log(pk)log(p_k)求导,pkp_k如(5)式所示,\sumj=1Kexiβj\sum_{j=1}^{K}e^{x_iβ_j}的简写,矩阵的求导请参考我的另一篇博文统计里的矩阵导数

    pkβk=exiβkexiβkxiexiβkexiβkxi2=xi(1pk) \frac{\partial p_k}{\partial β_k}=\frac{\sum}{e^{x_iβ_k}} · \frac{e^{x_iβ_k}·x_i·\sum-e^{x_iβ_k} ·e^{x_iβ_k}· x_i}{\sum^2}\\ =x_i(1-p_k)
    pkβm(mk)=exiβk0exiβkexiβkxi2=xipk \frac{\partial p_k}{\partial β_m}(m\neq k)=\frac{\sum}{e^{x_iβ_k}} · \frac{0·\sum-e^{x_iβ_k} ·e^{x_iβ_k}· x_i}{\sum^2}\\ =-x_i·p_k

    yi=ky_i=k对应的参数是βkβ_k,在更新参数βkβ_k时,会用βkβ_k的偏导。简单的说,m=km=kyi=ky_i=k是一回事。综上所述
    pkβm=exiβk0exiβkexiβkxi2=xi(I(yi=k)pk) \frac{\partial p_k}{\partial β_m}=\frac{\sum}{e^{x_iβ_k}} · \frac{0·\sum-e^{x_iβ_k} ·e^{x_iβ_k}· x_i}{\sum^2}\\ =x_i(I(y_i=k)-p_k)

    所以(8)式的导数
    L(β)βk=i=1nxi(I(yi=k)pk) \frac{\partial L(β)}{\partial β_k}=-\sum_{i=1}^{n}x_i(I(y_i=k)-p_k)



    以上就是全部内容了,笔者从统计的角度大致解释了下机器学习中逻辑回归损失函数的来源,希望能帮助到各位读者

    展开全文
  • 于是这里插入了本篇,主要就介绍下常用的两种回归模型,从中你会知道为什么信贷风控普遍使用逻辑回归而不是我们熟悉的线性回归。希望读者看完,能对风控建模要达到的目的有一个总体的sense。~~~~~~~~~切入...

    本来想按照实操上的建模工作顺序,从数据源计算IV和WOE值、变量筛选、逻辑回归到模型评价写这系列文章,但有读者反应读起来有些生涩无聊(请原谅笔者也是第一次写公众号啊/(ㄒoㄒ)/~~)

    于是这里插入了本篇,主要就介绍下常用的两种回归模型,从中你会知道为什么信贷风控普遍使用逻辑回归而不是我们熟悉的线性回归。希望读者看完,能对风控建模要达到的目的有一个总体的sense。

    ~~~~~~~~~切入正题~~~~~~~~~

    一切预测模型,你都可以理解为是一个黑箱,往黑箱里输入一堆数据(自变量,或称之为特征变量),然后黑箱给你输出一堆数(应变量,或称之为被预测值、Y值)。

    7a4bb43dc038a6caebe5928291838820.png

    注:后文讲解我们先跳过后续文章会介绍的在IV和WOE值计算之后,还需进行的缺失值填充、相关分析、多重共线性分析、主成分分析等工序以筛选出最后“合格”的入模变量。假设此时我们已经完成上述过程,并获得符合标准格式的"prohibit"表以按列次存放主键、Y值和特征取值。

    ef31670761202f0e1c638c4ba9a3b931.png

    方法一:线性回归模型

    在信贷领域,风控人员在贷前审批无非做出是否能放款给某个客户的判断,其依据就是通过历史经验区分出具备某些特征的客户为好客户,具备另一些特征的某些客户为坏客户。

    上述过程在量化预测领域,可以简化为输出变量要么为0(好)、要么为1(坏)的0-1预测模型。很多没学过计量或者生物统计的童鞋,本能的反应就是使用中学时就学过的多元线性回归预测模型。

    46d55c6ca5fe2b57730e35dc39158509.png

    而且这个模型确实能够简单粗暴的解决0-1分类问题,我们将prohibit表第3~11列作为X1~X9,将第2列作为Y值训练线性回归模型。

    % 读取存放prohibit数据的Excel文档
    [prohibit,title]=xlsread('C:\Users\Administrator\Desktop\Prohibit.xlsx','a1:k2');
    [prohibit,txt,data_org] =xlsread('C:\Users\Administrator\Desktop\Prohibit.xlsx','a3:k7000');% 多元线性回归
    [B,BINT,R,RINT,STATS]=regress(prohibit(:,2),[ones(size(prohibit,1),1) prohibit(:,3:11)]);
    head={'判定系数','F统计量','p值','误差方差的估计值'};
    [head;num2cell(STATS)] % 展示检验统计量
    % 回归预测
    y_predict=B(1,1)+prohibit(:,3:11)*B(2:10,1);
    scatter(y_predict,prohibit(:,2));
    xlabel('预测值');
    ylabel('实际值');

    获得模型检验统计量及预测值和Y值散点图如下:

    24b1d06ad565693d6aa2057c37ac1944.png

    cfd8f5d5c02268f48957f5dd469e5ed7.png

    从p值可以看出模型是显著的,但是判定系数可以看出模型的拟合优度很差,原因在于Y值只有两个取值。我们分别取预测值为0.05和0.10作为阈值(即若阈值取0.05,则大于等于0.05就预测为坏客户,小于0.05则预测为好客户),可以得到如下混淆矩阵。可以看出使用多元线性回归模型可以较好地识别出坏客户(第二类错误),但同时也会错杀很多好的客户(第一类错误)。

    2bd64e68fe031809985e831afd70f304.png

    方法二:逻辑回归

    从上述预测值和Y值散点图以及混淆矩阵可以看出,特定的预测值范围往往同时具有好客户和坏客户。而且图中可以明显看出,随着预测值取值增大,坏客户的占比也会提高(坏客户集中在散点图右上方)。一个很自然的设想是,如果我们不直接预测客户好坏,而是预测具有一定特征的客户是坏客户的概率,这个结果是否具有业务意义呢?

    答案是肯定的。复习一下我们在微观经济学里学过的价格歧视定价策略(Price Discrimination),产品定价可以向不同的客户收取不同的价格,那么我们当然也能向具有更高概率成为坏客户的客群收取更高的费率,这个在风控领域就叫做风险定价(Risk Pricing)。

    我们将客户预测值做二十等分,并计算出各分组坏客户概率,如下图:

    880b8ade43491fa0fa0521e96da1ec1d.png

    对上述表格绘制散点图,我们同时绘制一Sigmoid函数图像,如下图:

    58cf5ea03842451cf28bc26724d9839b.png

    其中,Sigmoid函数表达式:

     6d615382ea841cb6358972c455255288.png

    可以看出,Sigmoid函数是能够比较好的拟合线性回归的预测结果和坏客户概率间关系的,那么我们就可以利用Sigmoid函数来联结上述的线性回归模型和坏客户概率建立广义线性模型(Generalized Linear Model)。利用Sigmoid作为联结函数的广义线性回归也叫做逻辑回归。函数表达式如下:

    a3910cf7a4408276119f9edc3c707d52.png

    % 逻辑回归
    [B_logit,DEV,STATS]=glmfit(prohibit(:,3:size(prohibit,2)), [prohibit(:,2) ones(size(prohibit,1),1)], 'binomial', 'link', 'logit');% 回归预测
    y_predict=glmval(B_logit,prohibit(:,3:size(prohibit,2)),'logit','binomialsize',ones(size(prohibit,1),1));

    如何评价逻辑回归模型的有效程度呢,我们先来看下回归预测值范围对应的坏客户比例统计,如下表:

    2ac2859bea4da31f12697e6ad3e37fe9.png

    可以看出,除了个别客户量较少的区间外,预测值范围区间所覆盖的91.8%客户的实际坏客户比例都落在了相应的预测区间内。故基本可以认为逻辑回归模型是有效的。当然,在信贷风控实操中常用的评价指标和工具还有诸如K-S值、AUC值、ROC Curve、Lift Chart等,相关资料网上有很多,在此就不加赘述了。

    展开全文
  • 逻辑斯谛回归是统计学习中的经典分类方法,属于对数线性模型。一、逻辑斯谛分布设 是连续的随机变量...二、逻辑斯谛回归模型二项逻辑斯谛回归模型是一种分类模型,由条件概率 表示,随机变量 取值为实数,随机变量 ...
  • R语言多元Logistic逻辑回归 应用案例

    万次阅读 2019-06-14 15:00:55
    可以使用阶梯函数通过逐步过程确定多重逻辑回归。此函数选择模型以最小化AIC,而不是像手册中的SAS示例那样根据p值。另请注意,在此示例中,步骤函数找到了与“ 手册”中的过程不同的模型。 通常建议不要盲目地遵循...
  • 1 多元线性回归模型
  • 本文基于核稀疏多元逻辑回归分类误差的统计建模分析,提出一种联合核稀疏多元逻辑回归和正则化错误剔除的高光谱图像分类模型.提出的模型通过引入隐概率场,采取L1范数度量KSMLR分类误差的重尾特性建立数据保真项;利用...
  • 如何进行多元逻辑回归可以使用阶梯函数通过逐步过程确定多元逻辑回归。此函数选择模型以最小化AIC。通常建议不要盲目地遵循逐步程序,而是要使用拟合统计(AIC,AICc,BIC)比较模型,或者根据生物学或科学上合理的...
  • 如何进行多元逻辑回归可以使用阶梯函数通过逐步过程确定多元逻辑回归。此函数选择模型以最小化AIC。通常建议不要盲目地遵循逐步程序,而是要使用拟合统计(AIC,AICc,BIC)比较模型,或者根据生物学或科学上合理的...
  • 文章目录问题的提出softmax运算符在运用softmax运算符是的注意事项交叉熵损失函数使用Pytorch实现softmax回归模型导入必要的包初始化参数的获取数据定义网络模型初始化模型参数定义损失函数定义优化函数训练 ...
  • 文章目录一、 Softmax函数与多元逻辑回归二、广告时间 一、 Softmax函数与多元逻辑回归 为了之后更深入地讨论神经网络,本节将介绍在这个领域里很重要的softmax函数,它常被用来定义神经网络的损失函数(针对分类...
  • 原文链接拓端数据科技 / Welcome to tecdat​tecdat.cn通常,我们在回归模型中一直说的一句话是“ 请查看一下数据 ”。在上一篇文章中,我们没有查看数据。如果我们查看单个损失的分布,那么在数据集中,我们会看到...
  • 对于连续性变量的预测,例如,如何根据产品的市场价格、广告力度、销售渠道等因素预测利润的高低、基于患者的各种身体指标预测其病症的发展趋势等,基本上可以借助于多元线性回归模型、零回归模型或LASSO回归模型来...
  • 最近在学习TensorFlow,发现它构造一个模型非常的简单,它的计算可以表示为一个有向图,每个运算操作将作为一个节点,节点与节点之间的连接称为边(edge),tensor即在计算图的边中流动。import tensorflow as tf ...
  • 算法:我实现了一个多元线性回归模型来预测房价。这种方法也称为多元回归,是一种统计技术,它使用几个参数变量来预测响应变量的结果。在这种情况下,我从数据集中提取了几个变量,包括房价,犯罪率,年龄,距水的近...
  • 机器学习算法(4)用Python实现用scikit-learn训练逻辑回归模型 该实现支持多元分类场景(默认OvR)。下面的代码示例将用 sklearn.linear_model.LogisticRegression类以及熟悉的fit方法在三种花的标准化训练集上训练...
  • 逻辑回归 Logistic Regression1 原理1.1 分类问题目标是面对某种事物,估计它的可能性,判断属于哪种已知的样本类,比如买不买某种东西、是不是垃圾邮件等。类别的数量可以有很多,所以按数量可以分为二分类(binary ...
  • scikit-learn机器学习(一)–多元线性回归模型 scikit-learn机器学习(二)–岭回归,Lasso回归和ElasticNet回归 scikit-learn机器学习(三)–逻辑回归和线性判别分析LDA 假设我们给定一个样本(x,y),x有n个...
  • 参考材料:sas高级教程一、基础知识1、优势(odds):注:类似多元线性回归方程,但要求没有那么严格,如此方差中弱化了残差部分,不要求正态分布、独立同分布等。但还是要解决共线性问题(任何模型都要解决的问题)...
  • 机器学习2-逻辑回归

    2020-05-03 22:54:40
    目录前言算法思想二元逻辑回归模型二元逻辑回归梯度推导多元逻辑回归模型逻辑回归&朴素贝叶斯逻辑回归优缺点优点:缺点应用面试问题收集 前言 逻辑回归是一个分类算法(二元/多分类),并不是回归算法。Y是连续...
  • 主要介绍了二元分类及多元分类中的逻辑回归模型的假设函数、代价函数、优化算法及其他的一些细节问题。
  • 逻辑回归模型分析

    2019-10-07 13:57:54
    本文主要分两个部分进行讨论,首先介绍最简单的线性回归模型;接着对逻辑回归进行分析 1、线性回归-->最小二乘法 对于线性回归问题,我们根据自变量的个数将其分为一元线性回归和多元线性回归,本部分先详细...
  • 多元分类(classification) 在机器学习中,多元分类 是将示例归类为多个(大于两个)类别中的一类(将示例归为两类中的一类被称为二元分类)。 一些分类算法自然地允许使用超过两类,另一些自然是二元分类算法;...
  • 手推模型逻辑回归

    2019-08-29 16:51:44
    关于逻辑回归的文章有很多,但是关于前因后果逻辑和公式的推导的...所以理解逻辑回归的前提,你要对多元线性回归有一个清晰的认识。 说到线性回归,它的模型输出是连续的,可以笼统上认为是实数集,即 负无穷到正无...
  • sklearn逻辑回归实现更加优化,且支持多元分类场景 下面的代码展示如何用sklearn,linear_model.LogisticRegression类以及fit方法在三种花的标准化训练集上训练模型 from sklearn.linear_model import Logistic...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 288
精华内容 115
关键字:

多元逻辑回归模型