精华内容
下载资源
问答
  • 来源于机器学习实战中p138,求解线性回归的回归系数w的最优解,涉及到矩阵求导等知识,推导过程中还对矩阵求导的分子、分母布局进行说明,部分参考链接如下: 1....

    来源于机器学习实战中p138,求解线性回归的回归系数w的最优解,涉及到矩阵求导等知识,推导过程中还对矩阵求导的分子、分母布局进行说明,部分参考链接如下:
    1.https://en.wikipedia.org/wiki/Matrix_calculus#Denominator-layout_notation(wiki矩阵求导说明)
    2.http://f.dataguru.cn/thread-598486-1-1.html(最小二乘估计、岭回归和lasso)
    3.http://blog.csdn.net/shouhuxianjian/article/details/46669365(对wiki矩阵求导进行了翻译)
    **

    背景

    **
    问题的背景是从大量数据中求出回归方程,常用的方法就是找出误差最小的w(存放回归系数的向量)。一般采用的方法是下图即平方误差(这里X是n*p的矩阵,y是n*1的结果向量,w便是p*1的回归系数向量),求和公式是误差项的平方值,我们需要做的就是取求和公式最小值下的w

    这里写图片描述

    用矩阵表示还可以写作

    这里写图片描述

    下面也就是对上述公式进行求导,令其导数等于0,所得w即为最优回归参数

    **

    求导过程

    **
    敲公式太麻烦就放了张手写图

    这里写图片描述

    1-4步涉及到了矩阵求导知识和分子布局、分母布局两种不同的规定格式(具体见wiki

    1.先将分子展开成四项,然后就可以对四个部分分别进行求导(累加后求导等于求导后累加)
    2.步骤1中的分子为标量(1*n向量与n*1向量),属于表格中第一种情形,即分子为标量分母为向量,因此求导结果为0
    3.同样,步骤23中对应表格第3行,步骤4对应表格的第11行。但是涉及到不同的布局最后的表现形式也不同,如本次采用的是分母布局(也就是行向量和列向量的表示区别)

    **

    布局约定

    **

    这里引用第三个连接中对wiki中矩阵求导的翻译

    这里写图片描述

    展开全文
  • 讲解了多元线性回归公式的推导以及分别用解析解和sklearn两种方法求解发电厂数据集。

    什么是多元线性回归

    要了解这个问题,我们首先想到一元线性回归f(x)=wx+b,一元线性回归是一个主要影响因素作为自变量来解释因变量的变化,在现实问题研究中,因变量的变化往往受几个重要因素的影响,此时就需要用两个或两个以上的影响因素作为自变量来解释因变量的变化,这就是多元回归亦称多重回归。当多个自变量与因变量之间是线性关系时,所进行的回归分析就是多元线性回归。
    f ( x i ) f(x_i) f(xi)为因变量, x 1 , x 2 , . . . x k 为 自 变 量 , x_1,x_2,...x_k 为自变量, x1,x2,...xk,则多元线性回归可以表示为:
    f ( x i ) = w 1 x 1 + w 2 x 2 + . . . w k x k + b f(x_i)=w_1x_1+w_2x_2+...w_kx_k+b f(xi)=w1x1+w2x2+...wkxk+b

    多元线性回归公式推导

    向量表达形式

    用向量形式写成: f ( x i ) = w T x i + b , f(x_i)=w^Tx_i+b, f(xi)=wTxi+b,
    其 中 w = [ w 1 , w 2 , . . . w k ] , x = [ x 1 , x 2 . . . x k ] 均 为 列 向 量 其中w=[w_1,w_2,...w_k],x=[x_1,x_2...x_k]均为列向量 w=[w1,w2,...wk],x=[x1,x2...xk]
    w T 表 w 的 转 置 , 即 行 向 量 。 w^T表w的转置,即行向量。 wTw

    推导过程

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    代码实战

    数据集

    这里有一个循环发电场的数据集,格式为csv,共有1001条记录,每个数据有6列,分别是: PE(输出电力),AT(温度), V(压力), AP(湿度), RH(压强),FL(风力)。我们要得到一个线性的关系,对应PE是label,而AT/V/AP/RH/FL这5个是feature。
    部分数据集截图如下:

    在这里插入图片描述

    1、解析解求解

    #用解析解(正规方程)求解多元线性回归代码
    import  numpy as np
    from sklearn.model_selection import train_test_split
    import matplotlib.pyplot as plt
    
    #读数据 数据预处理
    data=np.loadtxt("发电厂数据集.csv",delimiter=",",skiprows=1,dtype=np.float32)
    #print(data)
    #print(data.shape[1])  #shape[0]返回行  shape[1]返回列
    index=np.ones((data.shape[0],1))
    #print(index)
    data=np.hstack((data,index))  #数据集合并全1的列
    X=data[:,1:]  #切片
    y=data[:,0]
    #print(y)
    
    #将数据集分成训练数据和测试数据  X的80%作为训练数据  20%作为测试数据
    train_x,text_x,train_y,text_y=train_test_split(X,y,train_size=0.8)
    # print(train_x.shape[0])
    # print(text_x.shape[0])
    #参数(权重)推导出来的解析解(正规方程)的代码
    weight=np.dot(np.dot(np.linalg.inv(np.dot(train_x.T,train_x)),train_x.T),train_y)
    #print(weight)
    
    #用训练(学习)得到的模型预测
    predict=np.dot(text_x,weight)  #得到预测值
    # print(predict)
    
    #绘制曲线可视化拟合情况
    plt.plot(range(len(text_y)),text_y,c="red",alpha=0.5)  #绘制测试数据的真实值
    plt.plot(range(len(text_y)),predict,c="blue",alpha=0.5)  #绘制测试数据的预测值
    plt.show()
    

    效果展示

    运行结果如下:
    在这里插入图片描述

    sklearn求解

    import numpy as np
    from sklearn import linear_model
    from sklearn.model_selection import  train_test_split
    import matplotlib.pyplot as plt
    import pickle
    #读数据
    data = np.loadtxt("发电厂数据集.csv",delimiter=",",skiprows=1,dtype=np.float32)
    #分出特征数据X和Y
    X=data[:,1:]
    Y=data[:,0]
    #分割训练数据与测试数据
    X_train,X_test,y_train,y_test = train_test_split(X, Y, test_size=0.8)
    #使用sklearn线性模型中的线性回归模型
    model = linear_model.LinearRegression()
    #训练模型
    model.fit(X_train,y_train)
    
    # 查看训练好的模型的参数
    print(model.coef_)  #系数(权重)
    print(model.intercept_)   #截距(偏重)
    #模型预测
    y_predict=model.predict(X_test)
    #可视化看看模型效果
    plt.rcParams['font.sans-serif']=["SimHei"]  #支持中文
    plt.title("预测值与真实值的散点图")
    plt.xlabel("样本ID")
    plt.ylabel("Label值")
    plt.scatter(np.arange(100),y_test[:100],c="red" )
    plt.scatter(np.arange(100),y_predict[:100],c="green")
    plt.show()
    

    效果展示:

    在这里插入图片描述
    至此,我们多元线性回归就已经学完了,喜欢的小伙伴可以一键三连呦。

    展开全文
  • 多元线性回归 多元线性回归模型 实际中有很多问题是一个因变量与多个自变量成线性相关,我们可以用一个多元线性回归方程来表示。 为了方便计算,我们将上式写成矩阵形式: Y = XW 假设自变量维度为N W为自变量的...

    多元线性回归

    多元线性回归模型

    实际中有很多问题是一个因变量与多个自变量成线性相关,我们可以用一个多元线性回归方程来表示。
    282357-20180812104552018-1155558715.png

    为了方便计算,我们将上式写成矩阵形式:

    Y = XW

    • 假设自变量维度为N
    • W为自变量的系数,下标0 - N
    • X为自变量向量或矩阵,X维度为N,为了能和W0对应,X需要在第一行插入一个全是1的列。
    • Y为因变量
      那么问题就转变成,已知样本X矩阵以及对应的因变量Y的值,求出满足方程的W,一般不存在一个W是整个样本都能满足方程,毕竟现实中的样本有很多噪声。最一般的求解W的方式是最小二乘法。

    最小二乘法

    我们希望求出的W是最接近线性方程的解的,最接近我们定义为残差平方和最小,残差的公式和残差平方和的公式如下:

    282357-20180812104621648-1260933428.png

    上面的公式用最小残差平方和的方式导出的,还有一种思路用最大似然的方式也能推导出和这个一样的公式,首先对模型进行一些假设:

    • 误差等方差不相干假设,即每个样本的误差期望为0,每个样本的误差方差都为相同值假设为σ
    • 误差密度函数为正态分布 e ~ N(0, σ^2)

    简单推导如下:
    282357-20180812104635827-1160637046.png

    由此利用最大似然原理导出了和最小二乘一样的公式。

    最小二乘法求解

    二次函数是个凸函数,极值点就是最小点。只需要求导数=0解出W即可。
    282357-20180823101512671-426252816.jpg

    模拟数据

    我们这里用R语言模拟实践一下,由于我们使用的矩阵运算,这个公式一元和多元都是兼容的,我们为了可视化方便一点,我们就用R语言自带的women数据做一元线性回归,和多元线性回归的方式基本一样。
    women数据如下

    > women
       height weight
    1      58    115
    2      59    117
    3      60    120
    4      61    123
    5      62    126
    6      63    129
    7      64    132
    8      65    135
    9      66    139
    10     67    142
    11     68    146
    12     69    150
    13     70    154
    14     71    159
    15     72    164

    体重和身高具有线性关系,我们做一个散点图可以看出来:
    282357-20180812104651524-1024697287.png

    我们用最小二乘推导出来的公式计算w如下

    X <- cbind(rep(1, nrow(women)), women$height)
    X.T <- t(X)
    w <- solve(X.T %*% X) %*% X.T %*% y
    > w
              [,1]
    [1,] -87.51667
    [2,]   3.45000
    > lm.result <- lm(women$weight~women$height)
    > lm.result
    
    Call:
    lm(formula = women$weight ~ women$height)
    
    Coefficients:
     (Intercept)  women$height  
          -87.52          3.45

    上面的R代码w使我们利用公式计算出来的,下边是R语言集成的线性回归函数拟合出来的,可以看出我们的计算结果是正确的,lm的只是小数点取了两位而已,将回归出来的函数画到图中看下回归的效果。
    282357-20180812104705496-67150394.png
    画图对应的R代码如下,用R的感觉.....太飘逸了。

    > png(file="chart2.png")
    > plot(women$height, women$weight)
    > lines(women$height, X %*% w)
    > dev.off()

    梯度下降法

    除了用正规方程方式求解W,也可以用最常见的梯度下降法求得W,因为最小二乘是个凸函数,所以这里找到的极小点就是最小点。下面这段代码用R写还是非常容易的,但是刚开始step步长参数调的太大了,导致一直不收敛,我还
    以为是程序错误,后来怎么看也没写错,就把参数调了个很小值,结果就收敛了。step的这个取值其实应该是变化的,先大后下比较科学,我这个调的很小,需要接近500万次才能收敛。

    • 初始化W 为全0向量,也可以随机一个向量
    • 设置最大迭代次数,本例为了收敛设置了一个很大的数
    • 设置步长step,小了收敛很慢,大了不收敛.......
    • 求损失函数的梯度
    • W(k+1) 为 W(k) + 损失函数负梯度 * 步长step
    • 循环,直到梯度接近0

    282357-20180823101526678-255938302.jpg

    X <- cbind(rep(1, nrow(women)), women$height)
    Y <- women$weight
    maxIterNum <- 5000000;
    step <- 0.00003;
    W <- rep(0, ncol(X))
    for (i in 1:maxIterNum){
        grad <- t(X) %*% (X %*% W -  Y);
        if (sqrt(as.numeric(t(grad) %*% grad)) < 1e-3){
            print(sprintf('iter times=%d', i));
            break;
        }
        W <- W - grad * step;
    }
    print(W);

    输出

    [1] "iter times=4376771"

    print(W);
    [,1]
    [1,] -87.501509
    [2,] 3.449768

    归一化

    上面的批量梯度下降为什么收敛如此之慢呢?原因很简单,没有做归一化,做了归一化,收敛速度快了非常非常多!!!!
    正确代码如下:

    XScale = scale(women$height)
    Ux = attr(XScale, "scaled:center")
    Dx = attr(XScale, "scaled:scale")
    YScale = scale(women$weight)
    Uy = attr(YScale, "scaled:center")
    Dy = attr(YScale, "scaled:scale")
    X <- cbind(rep(1, nrow(women)), as.matrix(XScale))
    Y <- as.matrix(YScale)
    maxIterNum <- 5000;
    step <- 0.001;
    W <- rep(0, ncol(X))
    for (i in 1:maxIterNum){
        grad <- t(X) %*% (X %*% W -  Y);
        if (sqrt(as.numeric(t(grad) %*% grad)) < 1e-6){
            print(sprintf('iter times=%d', i));
            break;
        }
        W <- W - grad * step;
    }
    print(W);
    W0 = W[1]
    Wn = W[2:length(W)]
    Wn = Dy * Wn / Dx
    W0 = Uy + Dy * W0 - Dy * Ux / Dx
    W  = c(W0, Wn)
    print(W);
    

    输出

    [1] "iter times=1168"

    print(W);
    -88.53154 3.45000

    更多精彩文章 http://h2cloud.org/

    展开全文
  • 多元线性回归系数求解

    千次阅读 2009-09-13 09:46:00
    做地图自动标注,想调用Matlab的多元线性拟合函数Regress,用Matlab Builder For Java转成Java类,因为是Flex编写的程序,无法直接使用Java需要部署到Web,问题来了,本地可以运行,但是写成RemotingObject或者...
  • 1、胡克定律:F = Kx (x为伸长量或压缩量,K为倔强系数,只与弹簧的原长、粗细和材料有关)2、重力:G = mg (g随高度、纬度、地质结构而变化)3 、求的合力的公式: 合力的方向与F1成a角: 注意:(1)力的合成和分解都...
  • 本博文源于《商务统计》,旨在讲述如何观测多元回归下的可决(判定)系数.在一元线性回归中,因变量取值的变差中,能被估计的回归方程所解释的边变量的比例叫做可决系数。在多元线性回归中,这种也被叫做多重可决系数
  • 文章目录 十一、回归方程与回归系数的显著性检验 1.平方和分解 2.回归方程的假设检验 3.中心化的等价形式 4.回归系数的假设检验 5.回归方程的预报精度 回顾总结 十一、回归方程与回归系数的显著性检验 回归方程的...
  • 《第11讲_matlab多元回归分析》由会员分享,可在线阅读,更多相关《第11讲_matlab多元回归分析(53页珍藏版)》请在人人文库网上搜索。1、,数学建模与数学实验,回归分析,.,实验目的,实验内容,1回归分析的基本理论.,3...
  • 多元线性回归中的公式推导

    千次阅读 2018-04-03 11:34:38
    这次接着一元线性回归继续介绍多元线性回归,同样还是参靠周志华老师的《机器学习》,把其中我一开始学习时花了较大精力弄通的推导环节详细叙述一下。 本文用到的部分关于向量求导的知识可以参看博文标量、向量、...
  • [原]使用tensorflow和梯度下降来求多元回归方程的系数   在这里我自己设置了一个二元方程为y=-3.05x1+0.24x2-1.765来对改方法做一个验证。并随便弄了个数据如下: ...
  • 在前期内容中,我们介绍了如何对数据进行标准化处理,将...那么,提到不同变量的效应大小,大家一定会联想到在多因素回归模型中所得到的回归系数。例如,我们假设自变量分别为身高和体重,根据回归系数很容易就知...
  • 多元线性回归多元线性回归模型实际中有很多问题是一个因变量与多个自变量成线性相关,我们可以用一个多元线性回归方程来表示。为了方便计算,我们将上式写成矩阵形式:Y = XW假设自变量维度为NW为自变量的系数,下标0...
  • @Author:润森,Runsen,公众号:润森笔记什么是多元线性回归在回归分析中,如果有两个或两个以上的自变量,就称为多元回归。**事实上,一种现象常常是与多个因素相联系的,由多个自变量的最优组合共同来预测或估计...
  • 多元相关分析与多元回归分析

    万次阅读 多人点赞 2018-10-27 17:13:02
    多元回归分析模型建立 线性回归模型基本假设 多元回归分析用途 多元线性相关分析 矩阵相关分析 复相关分析 曲线回归模型 多项式曲线 二次函数 对数函数 指数函数 幂函数 双曲线函数 变量间的...
  • scikit-learn : 线性回归,多元回归,多项式回归

    万次阅读 多人点赞 2016-06-17 23:36:53
    使用scikit-learn学习线性回归,多元回归,多项式回归
  • 利用c#语言实现多元统计分析一元线性回归方程系数计算,可执行。
  • Python实现多元线性回归

    万次阅读 多人点赞 2018-04-12 21:39:25
    Python实现多元线性回归 线性回归介绍 线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为y = w'x+e,e为误差服从均值为0的...
  • 多元回归分析

    千次阅读 2019-11-02 10:00:00
    前言多元回归的形式如下:02.参数估计多元回归方程中各个参数也是需要估计的,关于为什么要估计,其实我们在一元线性回归里面也讲过。与一元线性回归不同的是,一元线性回归拟合的是一条线,而多元回归拟合的是一个...
  • 多元回归分析--学习笔记

    万次阅读 2016-11-08 10:37:02
    回归系数解释:回多元回归情形下,对每一个回归系数的解释如下,当所有其他自变量保持不变时,bi是因变量y对应于自变量xi改变一个单位时所做的改变的估计值。 多元判定系数(R-sq):计算方法同简单线性回归,...
  • model =LinearRegression() model.fit(X, Y)print('model.coef_', model.coef_) #回归系数 print('model.intercept_', model.intercept_) #截距 #以下是自己实现的变量线性回归模型 #对X和Y增加维度,方便矩阵计算 X...
  • 第一节是一元回归统计推断在多元回归中的推广,主要针对的是单个系数的假设检验和置信区间,除了在假设阶段有所不同(比如是在固定其他变量的情况下,被检验变量对因变量没有影响),基本步骤是一样的,理论基础也都...
  • 多元线性回归

    千次阅读 2019-12-29 21:45:18
    所谓的多元线性回归就是指在回归分析中,如果有两个或两个以上的自变量,就称为多元回归。 二、多元线性回归模型 1.建立模型 以二元线性回归模型为例 ,二元线性回归模型如下: 类似的使用最小二乘法进行参数估计 ...
  • 针对以军舰DTMB5415为基础船型提出的高速三体船,对于基本数据库中29条包括货船、油船、集装箱船及化学品船各相关数据进行多元线性回归,得到了单体船在不同Fr下阻力系数的经验估算公式。又辅以计算机计算流体动力学...
  • 机器学习之多元线性回归模型梯度下降公式与代码实现(篇二)
  • 线性回归系数求解及Python实现

    千次阅读 2019-08-01 14:03:04
    求解线性回归系数 已知nnn个观测值集合{(xi,yi),i=1,2,...,n}\{(x_i, y_i), i=1,2,...,n\}{(xi​,yi​),i=1,2,...,n}, 求回归系数aaa,使得预测值y^i=xia\hat{y}_i={x_ia}y^​i​=xi​a与真实值yiy_iyi​的偏差平方...
  • NCL回归系数及显著性检验打点

    千次阅读 2019-02-14 23:17:46
    实际上,(我做的是一元回归)应该在回归系数大的地方容易通过检验,回归系数小的地方通不过检验,且我认为通过检验的区域应该不会与回归系数等值线交叉。 经过排查,我发现regCoef给的tval(也就是t参数)并不准确...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,946
精华内容 2,378
关键字:

多元回归系数公式