精华内容
下载资源
问答
  • 本文基于核稀疏多元逻辑回归分类误差的统计建模分析,提出一种联合核稀疏多元逻辑回归和正则化错误剔除的高光谱图像分类模型.提出的模型通过引入隐概率场,采取L1范数度量KSMLR分类误差的重尾特性建立数据保真项;利用...
  • 定义:回归分析中,含有两个或者两个以上自变量,称为多元回归,若自变量系数为1,则此回归为多元线性回归。 (特殊的:自变量个数为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

     

    展开全文
  • 线性回归,前面用Python从底层一步一个脚印用两种方法实现了回归拟合。在这个高级语言层出不穷的年代,这样做显然不明智,所以我考虑用优秀的数据分析工具——R语言(不敢说最...
        

    640?wx_fmt=png

    线性回归,前面用Python从底层一步一个脚印用两种方法实现了回归拟合。在这个高级语言层出不穷的年代,这样做显然不明智,所以我考虑用优秀的数据分析工具——R语言(不敢说最优秀,虽然心里是这么想的,我怕有人要骂我!)做回归分析。包括简单多变量回归、逐步回归、逻辑回归!

    对了,上次,用Python写的两篇回归拟合分别是:

    多元回归分析,生活中用的很多,因为一个因素可能与很多其它因素有关!言归正传,这里考虑用R语言里面的相关函数做回归分析。

    需要的用到的知识储备:

    • 线性代数

    • 概率论与数理统计

    • 高等数学

    • R语言基础

    下面分别从普通多元线性回归、逐步回归、逻辑回归进行介绍。前面用Python实现的只是一元回归,由于R语言实现线性回归很方便,所以我会着重介绍原理。

    多元线性回归

    不论是单变量还是多元线性回归分析,他们都是直接或间接(有时候需要通过变量代换)程线性的关系。我们需要找到一个通用的线性模型来描述这种关系,在我们可以接受的误差范围内对数据进行预测或者发现规律。

    多元线性回归理论基础

    对于一组变量数据,如果我们不管是通过画散点图还是其它方法,知道了一个变量与其它变量程很强线性关系。我们就需要知道,到底是什么样的关系,关系系数是多少。通常是用经典的最小二乘法,因为这样算出的确实是最优的系数,可以保证残差平方和最小的优化目标。

    对于一个因变量y,有一组自变量X = (x1,x2,...,xk),x1,x2,...,xk,eps是列向量,考虑它们之间有如下线性关系:

    640?wx_fmt=png

    当然了,这里X = (x1,x2,...,xk),y都是给的一组数据,就像这样

    640?wx_fmt=png

    那么,对每一组(比如第一行)数据,就有如下关系:

    640?wx_fmt=png

    目标函数为残差平方和的关于系数beta0,beta1,...,betak的多元二次函数,我们希望找到一组系数使得目标函数值最小,即误差最小。目标函数如下:

    640?wx_fmt=png

    学过数学分析或者高等数学的人都知道,这只要关于beta0,beta1,...,betak分别求偏导数,得到k+1方程,再求出零点即可。

    我们用矩阵表示各个变量如下:

    640?wx_fmt=png

    那么,学过高等代数(数学专业)或者线性代数(工科)都知道,因变量与自变量关系可以表示为:

    640?wx_fmt=png

    中间推导过程这里不在赘述了,最终系数向量表达式为:

    640?wx_fmt=png

    关于多元线性回归的理论就到这里,有兴趣可以参考:线性回归导论(机械工业出版社 王辰勇 译)

    多元线性回归的R语言实现

    这里用R语言里面的常用数据集iris来说明,这个数据集包含五个指标,我们这里先只用前面四个:花萼长度、花萼宽度、花瓣长度、花瓣宽度,进行多元线性回归分析。

    数据预处理

    大家都知道,为了消除不同变量量纲或者数量级不一致,做数据标准化的数据预处理是有必要的。用到的R语言函数是scale(),这个函数的机理具体公式如下:

    640?wx_fmt=png

    R语言实现如下:

    640?wx_fmt=png

    标准化后数据选择前六行我们看一下:

    > head(sl.sc)

         Sepal.Length

    [1,]   -0.8976739

    [2,]   -1.1392005

    [3,]   -1.3807271

    [4,]   -1.5014904

    [5,]   -1.0184372

    [6,]   -0.5353840

    下面构建多元线性回归

    我们用花萼标准化后的数据sl.sc与其它三个变量做线性回归,先做有常数项的多元回归。

    lm.sc <- lm(sl.sc~sw.sc+pl.sc+pw.sc)

    summary(lm.sc)

    640?wx_fmt=png

    summary(lm.sc)给出了线性回归的相关信息,各个系数Residuals给出了残差的5分位数,Estimate、Std. Error、t value、Pr(>|t|)分别给出了自变量系数、标准误、t值和p值,Multiple R-squared:  0.8586, Adjusted R-squared:  0.8557分别给出了R方与修正的R方,这里 R-squared:  0.8557表示这个线性回归模型可以解释85.57的原数据,还是不错的,后面就不再解释这几个指标的意思了。可以看出无论是每个系数还是总体的p-value都远远小于0.05,给出了三颗星***的等级,但是如图蓝色方框是常数项的值是-1.176e-16,太小了,p值是1,告诉我们常数项可以不用,这些数据是过原点的线性关系。

    去掉常数项的多元回归,不同的是,减一表示不要常数项

    lm.sc <- lm(sl.sc~sw.sc+pl.sc+pw.sc-1)

    summary(lm.sc)

    模型详细情况:

    640?wx_fmt=png

    显然,去掉后R方,F值没有明显变换,系数等级都是三颗星,表明去掉常数项确实在不影响模型情况下简化了模型。

    我们来看一下残差图与QQ图:

    plot(lm.sc,1,col = 'orange',main = '残差图')

    plot(lm.sc,2,col = 'orange',main = 'QQ图')

    640?wx_fmt=png

    640?wx_fmt=png

    通过残差图与QQ图也可以明显看出这个不带常数项的线性回归模型是不错的。

    逐步回归

    逐步回归的基本思想是将变量逐个引入模型,每引入一个解释变量后都要进行F检验,并对已经选入的解释变量逐个进行t检验,当原来引入的解释变量由于后面解释变量的引入变得不再显著时,则将其删除。以确保每次引入新的变量之前回归方程中只包含显著性变量。这是一个反复的过程,直到既没有显著的解释变量选入回归方程,也没有不显著的解释变量从回归方程中剔除为止。以保证最后所得到的解释变量集是最优、最简单的。

    逐步回归最常用的挑选准则有修正复相关系数、预测平方和、Cp和AIC等,这里用AIC准则,对于含有P个自变量的回归方程,n为观测值(样本)个数,AIC越小越好,具体计算公式为:

    640?wx_fmt=png

    使用R语言构建逐步回归模型

    知道原理后,我们试图从三个自变量中筛选出两个,首先看一下上述模型的AIC

    step(lm.sc)

    640?wx_fmt=png

    显然,三个变量时AIC是最小的,这里为了说明问题,实在要剔除一个变量的话,当然要剔除第一个。因为我们发现剔除pw.sc时AIC为-272.06,如果剔除pl.scAIC就为-181.26,而AIC越小越好,所以就剔除变量pw.sc吧。

    lm.new <- lm(sl.sc~sw.sc+pl.sc-1)

    summary(lm.new)

    640?wx_fmt=png

    R方稍微减小了一点,因为三个变量AIC最小(即模型最优),提出后肯定会减小的。这里为了说明问题才强行提出一个。

    逻辑回归

    在介绍逻辑回归前我们先介绍什么是哑变量,其实,R语言用的多的人都知道iris这个数据集有5列,第五列是花的分类:setosa、versicolor、 virginica。那么花萼长度是否与花的分类有关呢?一般是有的。增加三列,我们考虑引入0~1变量那么对于属于setosa的,记为1,versicolor、 virginica位置记为0,同理就多了3列,这里的0,1就是哑变量。还是为了减少变量,简化模型,我们只增加2列versicolor和 virginica,这样versicolor、 virginica位置都为0时,就属于setosa这个分类,versicolor位置为1时就为versicolor这个分类。0,1是逻辑变量,线性回归引入了逻辑变量,故称为逻辑回归。

    下面就进行R语言实现,要不看一下iris数据集长什么样:

    640?wx_fmt=png

    第五列变量就有三个水平,都是50条,正好。

    640?wx_fmt=png

    两个for()语句就是构造逻辑变量的,还是很好理解的,这样就有五个变量了。构造的应该像这样:

    640?wx_fmt=png

    这里省略了前面的,只为说明构造的逻辑变量(实际应该是s1里面51~100为1,s2里面101~150为1,其它为0)。看一下结果:

    640?wx_fmt=png

    所有变量系数p-value都小于0.05,R-squared:  0.8627,比没有增加逻辑变量的R-squared:  0.8557好一些,可见花的分类确实对花萼长度sl.sc有关系。最终表达式为:

    640?wx_fmt=png

    猜你可能喜欢

    640?wx_fmt=jpeg

    展开全文
  •  给出多元线性回归的解法,本篇重点回答如何构造“梯度下降法解”的数学模型。 2 从线性回归模型到最小二乘法的构建   [问题] 对于给定向量集合Ω={Xi},i:={1,...m},Xi属于集合Rn;再给出一个数集Y={yi},i:...

    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

    展开全文
  • 机器学习算法(8)之多元线性回归分析理论详解

    万次阅读 多人点赞 2018-08-29 16:28:27
    线性回归(Linear regressions)和逻辑回归(Logistic regressions)是人们学习算法的第一个预测模型。因此它们很常见,还有许多分析人员认为它们是仅有的回归模型,部分分析师认为它们是所有回归模型中最重要的。 事实...

    前言:当影响因变量的因素是多个时候,这种一个变量同时与多个变量的回归问题就是多元回归,分为:多元线性回归和多元非线性回归。线性回归(Linear regressions)和逻辑回归(Logistic regressions)是人们学习算法的第一个预测模型。因此它们很常见,还有许多分析人员认为它们是仅有的回归模型,部分分析师认为它们是所有回归模型中最重要的。 事实上有无数的回归模型都能被使用,每种形式的回归模型都有它独特且重要的应用场景。在这篇文章里以简单的方式解释最常用的7种回归模型,通过这篇文章,对回归模型有一种广泛性的了解,取而代之的是希望能在每个场景合适的使用linear / logistic regression。


    一、回归分析(Regression Analysis)定义与分类

            回归分析(Regression Analysis)是一种统计学上分析数据的方法目的在于了解两个或多个变量间是否相关、相关方向与强度,并建立数学模型以便观察特定变量来预测研究者感兴趣的变量。更具体的来说,回归分析可以帮助人们了解在只有一个自变量变化时因变量的变化量。一般来说,通过回归分析我们可以由给出的自变量估计因变量的条件期望。回归分析是建立因变数  Y(或称依变数,反应变数)与自变数 X(或称独变数,解释变数)之间关系的模型。

    回归分析的主要算法包括:

    1. 线性回归(Linear Regression)
    2. 逻辑回归(Logistic regressions)
    3. 多项式回归(Polynomial Regression)
    4. 逐步回归(Step Regression)
    5. 岭回归(Ridge Regression)
    6. 套索回归(Lasso Regression)
    7. 弹性网回归(ElasticNet)

    为什么使用回归分析?

    如上所述,回归分析是评估两个或更多变量之间的关系。让我们使用一个简单的例子进行理解:

           你想基于当前的经济状况去评估公司的销售额的增长,公司最近的数据表明在当前的经济条件下出现2到5倍的增长,利用这个发现,我们能基于当前或过去的信息来预测公司未来的销售情况。

    这有使用回归分析的几点好处: 
    1.它表明了因变量和独立变量之间的重要关系; 
    2.它表明的是多个独立变量对因变量影响的强度。

    回归分析还使我们能比较变量在不同程度上影响,如价格变动对促销活动的影响。这样有利于市场研究员/数据分析师/数据科学家在建立模型的时候排除并评估出最好的变量。

    二、七种回归算法

    1)线性回归(Linear Regression)

           这里就忽略一元线性回归了,直接讲多元线性回归,原理都是一样的。对于n维特征的样本数据,如果我们决定使用线性回归,那么对应的模型是这样的:

    这个表示可以简化,我们增加一个特征x0=1,这样

    进一步用矩阵形式表达更加简洁如下:h_{\theta }(X)=X\cdot \theta

           其中, 假设函数h_{\theta }(X)为mx1的向量,θ为nx1的向量,里面有n个代数法的模型参数。X为mxn维的矩阵。m代表样本的个数,n代表样本的特征数。

    得到了模型,我们需要求出需要的损失函数,一般线性回归我们用均方误差作为损失函数。损失函数的代数法表示如下:

    进一步用矩阵形式表达损失函数:

    我们常用的有两种方法来求损失函数最小化时候的θθ参数:一种是梯度下降法,一种是最小二乘法

    如果采用梯度下降法,则θ的迭代公式是这样的:

     

    \theta =\theta -\alpha X^{T}(\theta X-Y)

    如果采用最小二乘法,则θ的结果公式如下:

    \theta =(X^{T}X)^{-1}X^{T}Y

    当然线性回归,还有其他的常用算法,比如牛顿法和拟牛顿法,这里不详细描述。

    注意,在业务上对数据的拟合,要注意多重共线性的问题以及对回归方程的检验。

    回归方程的拟合优度:

     多重判定系数:(Multiple coefficient of determination)

    线性关系的检验:统计学中F统计量(还有t检验量)

    步骤: 
    (1):提出假设

    (2):计算检验的统计量F. 

    (2)’:计算检验的统计量t

    (3):作出统计决策。

     

    多重共线性----这是回归任务中比较常见的额问题,要引起高度重视    

           在多元线性回归模型经典假设中,其重要假定之一是回归模型的解释变量之间不存在线性关系,也就是说,解释变量X1,X2,...,Xk中的任何一个都不能是其他解释变量的线性组合。如果违背这一假定,即线性回归模型中某一个解释变量与其他解释变量间存在线性关系,就称线性回归模型中存在多重共线性多重共线性违背了解释变量间不相关的古典假设,将给普通最小二乘法带来严重后果。

    造成多重共线性的原因有一下几种:

    1. 解释变量都享有共同的时间趋势
    2. 一个解释变量是另一个的滞后,二者往往遵循一个趋势
    3. 由于数据收集的基础不够宽,某些解释变量可能会一起变动
    4. 某些解释变量间存在某种近似的线性关系

    判别:

    1. 回归系数的正负号与预期的相反
    2. 某些重要的解释变量t值低,而R方不低
    3. 当一不太重要的解释变量被删除后,回归结果显著变化
    4. 模型中各对自变量之间显著相关 
    5. 容忍度(tolerance) 与方差扩大因子(variance inflation factor, VIF). 

          容忍度:某个变量的容忍度等于 1 减去该自变量为因变量而其他k−1个自变量为预测变量时所得到的线性回归模型的判定系数。即1−R2i。 容忍度越小,多重共线性越严重。通常认为 容忍度小于 0.1 时,存在严重的多重共线性。 
          方差扩大因子:容忍度的倒数。 因此,VIF越大,多重共线性越严重,一般认为VIF的值大于10时,存在严重的多重共线性。

    检验:

    1. 相关性分析,相关系数高于0.8,表明存在多重共线性;但相关系数低,并不能表示不存在多重共线性
    2. VIF检验
    3. 条件系数检验

    对X变量探索两两之间的相关性(相关矩阵)

    这里在顺带总结一下相关分析的问题:

    1. 相关分析与回归分析都是研究变量相互关系的分析方法
    2. 相关分析是回归分析的基础和前提,而回归分析则是认识变量之间相关程度的具体形式

    根据相关关系的方向划分:正相关和负相关
    根据相互关系的表现形式划分:线性相关、非线性相关、不相关

    根据相互关系的强弱划分:强相关、弱相关

    线性相关性度量:皮尔逊相关系数

          皮尔森相关系数是一种最简单的,能帮助理解特征和响应变量之间关系的方法,该方法衡量的是变量之间的线性相关性,结果的取值区间为[-1,1],-1表示完全的负相关,+1表示完全的正相关,0表示没有线性相关。

         Pearson Correlation速度快、易于计算,经常在拿到数据(经过清洗和特征提取之后的)之后第一时间就执行。Scipy的 pearsonr 方法能够同时计算相关系数和p-value.

    Pearson相关系数的一个明显缺陷是,作为特征排序机制,他只对线性关系敏感。如果关系是非线性的,即便两个变量具有一一对应的关系,Pearson相关性也可能会接近0例如:

    x = np.random.uniform(-1, 1, 100000)
    print pearsonr(x, x**2)[0]
    -0.00230804707612

    另外,如果仅仅根据相关系数这个值来判断的话,有时候会具有很强的误导性,如 Anscombe’s quartet ,最好把数据可视化出来,以免得出错误的结论。

    不同类型的变量的相关分析方法也不同

    常用的回归模型评估指标

    • 解释方差( Explained variance score)
    • 绝对平均误差(Mean absolute error)
    • 均方误差(Mean squared error)
    • 决定系数(R² score)

    #解释方差( Explained variance score)
    from sklearn.metrics import explained_variance_score
    explained_variance_score(y_true, y_pred)
    
    #绝对平均误差(Mean absolute error)
    from sklearn.metrics import mean_absolute_error
    mean_absolute_error(y_true, y_pred)
    
    #均方误差(Mean squared error)
    from sklearn.metrics import mean_squared_error
    mean_squared_error(y_true, y_pred)
    
    #决定系数(R² score)
    from sklearn.metrics import r2_score
    r2_score(y_true, y_pred)

    解决方法:参考博文

    1. 增加数据(这个在实际中难度较大)
    2. 对模型施加某些约束条件
    3. 删除一个或几个共线变量(常用的方法)
    4. 将模型适当变形,改变解释变量的形式, 改变解释变量的形式是解决多重共线性的一种简易方法,例如对于横截面数据采用相对数变量,对于时间序列数据采用增量型变量。;
    5. 主成分回归:主成分分析作为多元统计分析的一种常用方法在处理多变量问题时具有其一定的优越性,其降维的优势是明显的,主成分回归方法对于一般的多重共线性问题还是适用的,尤其是对共线性较强的变量之间。(PCA之后,结果可能会变好,但模型此时已经不好做出解释了)
    6. 逐步回归分析:逐步回归(Stepwise Regression)是一种常用的消除多重共线性、选取“最优”回归方程的方法。(下面会讲到)

    sklearn中线性回归的参数:

    class sklearn.linear_model.LinearRegression(fit_intercept=Truenormalize=Falsecopy_X=Truen_jobs=1)

    Parameters:

    fit_intercept : boolean, optional, default True

    whether to calculate the intercept for this model. If set to False, no intercept will be used in calculations (e.g. data is expected to be already centered).

    normalize : boolean, optional, default False

    This parameter is ignored when fit_intercept is set to False. If True, the regressors X will be normalized before regression by subtracting the mean and dividing by the l2-norm. If you wish to standardize, please use sklearn.preprocessing.StandardScaler before calling fit on an estimator with normalize=False.

    copy_X : boolean, optional, default True

    If True, X will be copied; else, it may be overwritten.

    n_jobs : int, optional, default 1

    The number of jobs to use for the computation. If -1 all CPUs are used. This will only provide speedup for n_targets > 1 and sufficient large problems.

    Attributes:

    coef_ : array, shape (n_features, ) or (n_targets, n_features)

    Estimated coefficients for the linear regression problem. If multiple targets are passed during the fit (y 2D), this is a 2D array of shape (n_targets, n_features), while if only one target is passed, this is a 1D array of length n_features.

    intercept_ : array

    Independent term in the linear model.

    2)逻辑回归(Logistic regressions)

    这里不做过多阐述,详见机器学习算法系列

    3)多项式回归(Polynomial Regression)

         多项式回归是线性回归的推广:

         如果这里不仅仅是x的一次方,比如增加二次方,那么模型就变成了多项式回归。这里写一个只有两个特征的p次方多项式回归的模型:

    我们令x_{0}=1,x_{1}=x_{1},x_{2}=x_{2},x_{3}=x_{1}^{2},x_{4}=x_{2}^{2},x_{5}=x_{1}x_{2} ,这样我们就得到了下式:

          可以发现,我们又重新回到了线性回归,这是一个五元线性回归,可以用线性回归的方法来完成算法。对于每个二元样本特征(x1,x2),我们得到一个五元样本特征(1,x_{1},x_{2},x_{1}^{2},x_{2}^{2},x_{1}x_{2}),这其中包含着映射函数的过程,这里不作出过深的阐述了,通过这个改进的五元样本特征,我们重新把不是线性回归的函数变回线性回归。

    附注:线性回归的推广还有另一种形式

           上面是我们对样本特征端做了推广,这里我们对于特征y做推广。比如我们的输出Y不满足和X的线性关系,但是lnY 和X满足线性关系,模型函数如下:lny=X\theta

    注意,多项式回归sklearn中没有现成的算法可以调用,但我们理解了多项式回归的原理之后,是可以分步来操作的

    Python中的多项式回归实现

    1.第一步--特征转换(sklearn中有现成的算法):先构造x特征的多项式组合:组合前x1,x2,设置degree(例如2),组合
    后的特征:(1,x_{1},x_{2},x_{1}^{2},x_{2}^{2},x_{1}x_{2})

    在机器学习中,通过增加一些输入数据的非线性特征来增加模型的复杂度通常是有效的。一个简单通用的办法是使用多项式特征,这可以获得特征的更高维度和互相间关系的项。这在 PolynomialFeatures 中实现:

    class sklearn.preprocessing.PolynomialFeatures(degree=2interaction_only=Falseinclude_bias=True)

    >>> import numpy as np
    >>> from sklearn.preprocessing import PolynomialFeatures
    >>> X = np.arange(6).reshape(3, 2)
    >>> X                                                 
    array([[0, 1],
           [2, 3],
           [4, 5]])
    >>> poly = PolynomialFeatures(2)
    >>> poly.fit_transform(X)                             
    array([[  1.,   0.,   1.,   0.,   0.,   1.],
           [  1.,   2.,   3.,   4.,   6.,   9.],
           [  1.,   4.,   5.,  16.,  20.,  25.]])

    2.第二步:调用线性回归算法针对组合特征构建回归模型(sklearn中有现成的算法)

    sklearn.linear_model.LinearRegression,直接用模型拟合转换后的数据

    4)逐步回归(Step Regression)

         是一种多元回归模型进行变量筛选的方法,筛选尽量少的变量来获得最大化预测能力。与平时所说的 regression analysis 不太相同,stepwise regression 可以算是一种 feature extraction 的方法。

    有三种方法:

    • 向前选择法
    • 向后剔除法
    • 逐步回归法

    向前选择从零模型(即只含常数项的模型)出发,每一步向模型中增加一个X变量:

    • 首先选取一个X变量,它与Y变量的相关系数的绝对值最大。
    • 其次,在模型中增加一个X变量,使得增加的X变量具有最大的F统计量值。
    • 依次下去,直到某一步,若尚未在模型中的每一个X变量对应的F统计量值都小于某一个预先给定的值,则停止X变量选择过程

    向后法和向前法实施过程正好相反。它是从全模型(即包含所有自变量的模型)出发,每一步从模型中剔除一个变量:

    • 选择当前模型中的所有X变量对应的F统计量最小的那个,然后剔除掉
    • 停止准则是:若在某一步,在当前模型中的每一个X变量对应的F统计量值都大于某个预先给定的临界值则停止剔除过程。

    逐步回归是上述两种方法的结合:

    • 假设利用向前法已经选择了两个X变量进入当前模型下一步不是继续使用向前法选择尚未在模型中的变量,而是对当前模型中的X变量做检验,看看当前模型中的每一个自变量是否显著,不显著的变量从模型中剔除(同向后剔除法)(这样做的原因是,向前法第二步选入的变量可能使第一步选入的变量变得不再显著)。
    • 继续使用向前法选择尚未在模型中的X变量,然后再用向后法对当前模型做检验...依次下去。停止准则是:若在某一步,当前模型中的每一个变量都是显著的,而尚未在模型中的每一个变量都是不显著的。

    我记得,逐步回归在《机器学习实战》中有讲到,并附有案例代码,这里我就略过了。感兴趣的话也可以自己上网查一下。

    5)岭回归(Ridge Regression)

    为了防止模型的过拟合,我们在建立线性模型的时候经常需要加入正则化项。一般有L1正则化和L2正则化。

            线性回归的L2正则化通常称为Ridge回归,它和一般线性回归的区别是在损失函数上增加了一个L2正则化的项。具体Ridge回归的损失函数表达式如下:

    其中α为常数系数,需要进行调优。||\theta||_{2}^{2}为L2范数。Ridge回归在不抛弃任何一个特征的情况下,缩小了回归系数,使得模型相对而言比较的稳定,但和Lasso回归比,这会使得模型的特征留的特别多,模型解释性差。

     Ridge回归的求解比较简单,一般用最小二乘法。这里给出用最小二乘法的矩阵推导形式,和普通线性回归类似。

    令J(θ)的导数为0,得到下式:

    整理即可得到最后的θθ的结果:

    Ridge回归是当数据受多重共线性(自相关变量高度相关)时常使用的技术。

    要点 
    * 该回归的假设与最小二乘回归相同,除非不假设数据集正态性; 
    * 它收缩系数的值,但不会达到零,这表明没有特征选择特征; 
    * 这是一个正则化方法,并使用l2正则化。

    class sklearn.linear_model.Ridge(alpha=1.0fit_intercept=Truenormalize=Falsecopy_X=Truemax_iter=Nonetol=0.001solver='auto'random_state=None)

    6)套索回归(Lasso Regression)

           线性回归的L1正则化通常称为Lasso回归,它和一般线性回归的区别是在损失函数上增加了一个L1正则化的项,L1正则化的项有一个常数系数α来调节损失函数的均方差项和正则化项的权重,具体Lasso回归的损失函数表达式如下:

    Lasso回归可以使得一些特征的系数变小,甚至还是一些绝对值较小的系数直接变为0。增强模型的泛化能力。Lasso回归的求解办法一般有坐标轴下降法(coordinate descent)和最小角回归法( Least Angle Regression).

    要点 
    * 该回归的假设与最小二乘回归相同,除非不假设正态性; 
    * 它将系数收缩为零(正好为零),这有助于特征选择; 
    * 这是一个正则化方法,使用l1正则化; 
    * 如果一批预测变量是高度相关,则Lasso只挑选其中一个,并将其他缩减为零。

    class sklearn.linear_model.Lasso(alpha=1.0fit_intercept=Truenormalize=Falseprecompute=Falsecopy_X=Truemax_iter=1000tol=0.0001warm_start=Falsepositive=Falserandom_state=Noneselection='cyclic')

    7).弹性网回归 ElasticNet Regression

    ElasticNet是Lasso和Ridge回归技术的混合模型。它是用L1和L2作为正则化训练的。当有多个相关的特征时,Elastic-net是有用的,Lasso可能随机选择其中一个,Elastic-net很可能选择两个

    在Lasso和Ridge之间折衷的实际优点是它允许Elastic-Net继承一些Ridge的稳定性。

    要点 
    * 它鼓励在高度相关变量之间的群效应; 
    * 对所选变量的数量没有限制; 
    * 它可能遭受双倍收缩率。

    class sklearn.linear_model.ElasticNet(alpha=1.0l1_ratio=0.5fit_intercept=Truenormalize=Falseprecompute=Falsemax_iter=1000copy_X=Truetol=0.0001warm_start=Falsepositive=Falserandom_state=Noneselection='cyclic')

    三、如何正确的选择回归模型?

          在多种类型的回归模型中,重要的是基于独立因变量的类型、数据的维度和数据的一些其他基本特征来选择最适合的技术。 以下是选择正确回归模型的关键因素:

    1. 数据探索是建立预测模型的必要组成部分。它应该是你选择正确的模型之前的第一步,如识别变量的关系和影响;
    2. 为了比较不同模型的拟合程度,我们可以分析不同的指标,如参数的重要性统计、R平方、调整r平方、AIC、BIC和误差项。另一个是Mallow的Cp标准。这本质上是通过将模型与所有可能的子模型(或仔细选择它们)进行比较来检查模型中的可能偏差;
    3. 交叉验证是评估用于预测的模型的最佳方式。这里您将数据集分为两组(训练集和验证集)。观测值和预测值之间的简单均方差给出一个预测精度的指标;
    4. 如果您的数据集有多个混杂变量,您不应选择用自动模型选择的方法,因为您不想同时将它们放在一个模型中;
    5. 这也将取决于你的目标。与高度统计学显着的模型相比,一个相对不强大的模型更容易实现;
    6. 回归正则化方法(Lasso,Ridge和ElasticNet)在具有高维度和多重共线性的数据集变量上效果更好

     

    参考资料:

    https://www.jianshu.com/p/9d14c3c34a0c

    https://blog.csdn.net/yangzhiyouvl/article/details/53955073

    https://www.cnblogs.com/pinard/p/6004041.html

    http://blog.sina.com.cn/s/blog_13eaccf160102xscv.html

    https://blog.csdn.net/nieson2012/article/details/48980491

    https://blog.csdn.net/diyiziran/article/details/17025471

     

    展开全文
  • 回归分析整体逻辑 回归分析(Regression Analysis) 研究自变量与因变量之间关系形式的分析方法,它主要是通过建立因变量y与...- 逻辑回归 - 神经网络 回归分析的步骤 根据预测目标,确定自变量和因变量 绘制散...
  • 对于本研究中分析的每种回归类型,都将讨论优缺点。 2回归 现代AI是为特定任务而创建的机器学习解决方案。 从了解和分析市场份额趋势到找到比萨饼店的最佳位置,这可能会有所不同。 这些AI并不是真正的智能,而是...
  • 1 多元线性回归模型
  • 文章目录回归定义最常用回归方法一、线性回归(Linear Regression)二、逻辑回归(Logistic Regression) 回归定义 回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常...
  • 多元逻辑斯蒂回归matlab代码势利的 用于自动聚类的灵活混合物模型 SNOB是有限混合模型的Matlab实现。 Snob使用最小消息长度标准来估计混合模型的结构(即子种群的数量;哪个样本属于哪个子种群)并估计所有混合模型...
  • 多元逻辑斯蒂回归matlab代码机器学习课程 挑战 了解机器学习的基础。 动作 研究了以下概念: 线性回归:训练集,特征,目标变量,假设,学习算法,参数,成本函数,优化问题,梯度下降,学习率,批次梯度下降 多元...
  • 正则化(regularization) 正则化路径是在正则化参数lambda的值网格上计算套索LASSO...它还可以拟合多元线性回归。” 例子 加载数据 这里加载了一个高斯(连续Y)的例子。 as_data_frame(y) ## # A tibble: 1..
  • 多元逻辑斯蒂回归matlab代码Coursera-机器学习-斯坦福大学-安德鲁·伍(Andrew-Ng) 这是斯坦福大学“机器学习”课程中我的课程分配解决方案的存储库:Andrew Ng的课程。 用MATLAB编写的解决方案。 欲了解更多信息,...
  • R语言数据分析系列之九 - 逻辑回归

    万次阅读 2015-04-15 17:46:08
    本节将一下逻辑回归和R语言实现,逻辑回归(LR,LogisticRegression)其实属于广义回归模型,根据因变量的类型和服从的分布可以分为,普通多元线性回归模型,和逻辑回归逻辑回归是指因变量是离散并且取值范围为{0,1...
  • 线性回归,逻辑回归与神经网络原理推导:包括以下几点内容:1.线性回归的定义及求解方法的推导,线性回归与最小二乘关系,线性回归显著性...3多元回归分析概述;4神经网络反向传播关系的推导,举例说明反向传播过程。
  • 多元逻辑斯蒂回归matlab代码机器学习 对基本机器学习算法和系统设计的直观介绍和面向应用的介绍。 算法在Matlab / Octave中编码。 研究了以下主题: 监督学习 线性回归 逻辑回归 神经网络 支持向量机 无监督学习 K...
  • 回归分析

    2020-06-29 22:32:53
    文章目录回归分析一、线性回归1. 定义2. 损失函数3....如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。 单变量情形:y=ax+b,b为误差服从均值为0
  • 一 机器学习分类 有监督学习 1 概述: 主要用于决策支持,它利用有标识的历史数据进行训练,以实现对新数据的表示的预测 ...包括一元回归多元回 ​ 归,线性回归和非线性回归: 例如 线性回归、...
  • 逻辑回归原理介绍 实例分析 1.逻辑回归原理介绍 Logistic Regression是一个分类算法,它可以处理二元分类以及多元分类。 1.1逻辑回归原理介绍 逻辑回归算法主要由以下三部分构成: 1.2 逻辑回归分类器介绍 ...
  • scikit-learn机器学习(三)–逻辑回归和线性判别分析LDA 前面的线性回归模型是解决预测问题的,根据样本的多个特征,推测其目标值,但是现实生活中除了这种预测问题之外,还有一种问题就是分类问题,比如这个人...
  • 线性回归和逻辑回归

    2019-06-11 22:37:57
    #如果包含两个以上的自变量,则称为多元回归分析 2最小二乘法,就是代价函数的定义 3相关系数:衡量线性相关性的强弱(越接近1越接近线性关系) 4决定系数 注:y(带一个小帽子的是)预测值 5梯度下降法...
  • 逻辑回归模型分析

    2019-10-07 13:57:54
    接着对逻辑回归进行分析 1、线性回归-->最小二乘法 对于线性回归问题,我们根据自变量的个数将其分为一元线性回归和多元线性回归,本部分先详细介绍一元线性模型,然后将其推广到多元线性模型 1)一元线性...
  • 线性回归与逻辑回归

    2016-01-26 10:09:00
    线性回归(Linear regression)是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况...
  • 逻辑回归 简介 在一元回归和多元回归模型中,处理的因变量都是数值型区间变量,建立的模型描述的是因变量的期望与自变量之间的线性关系。然而,在实际的问题分析时,所研究的变量往往不全是区间变量而是顺序变量...
  • SPSS-回归分析

    2018-10-16 18:25:00
    回归分析(一元线性回归分析、多元线性回归分析、非线性回归分析、曲线估计、时间序列的曲线估计、含虚拟自变量的回归分析以及逻辑回归分析) 回归分析中,一般首先绘制自变量和因变量间的散点图,然后通过数据在...
  • 线性回归通过一个或者多个自变量与因变量之间之间进行建模的回归分析。 其中特点为一个或多个称为回归系数的模型参数的线性组合 分类 一元线性回归:涉及到的变量(特征)只有一个 多元线性回归:涉及到的变量(特征)两...
  • (一)线性回归:1、基本概念:线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。2、分类线性回归包括一元线性回归和多元线性回归,一元的是只有一...
  • 在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合(自变量都是...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 237
精华内容 94
关键字:

多元逻辑回归分析