精华内容
下载资源
问答
  • 多元线性回归模型

    万次阅读 多人点赞 2019-07-02 19:22:12
    多元线性回归模型通常用来研究一个应变量依赖多个自变量的变化关系,如果二者的以来关系可以用线性形式来刻画,则可以建立多元线性模型来进行分析。 1.模型简介 1.1模型的结构 多元线性回归模型通常用来描述变脸y和x...

    多元线性回归模型通常用来研究一个应变量依赖多个自变量的变化关系,如果二者的以来关系可以用线性形式来刻画,则可以建立多元线性模型来进行分析。
    1.模型简介
    1.1模型的结构
    多元线性回归模型通常用来描述变量y和x之间的随机线性关系,即:
    在这里插入图片描述
    如果对y和x进行了x次观测,得到n组观察值yi,x1i,…,xki(i=1,2,…,n),他们满足一下关系式:
    在这里插入图片描述
    在这里插入图片描述
    1.2模型参数的检验
    在正态假定下,如果X是列满秩的,则普通线性回归模型的参数最小二乘估计为:
    在这里插入图片描述
    于是y的估计值为:
    在这里插入图片描述
    (1)回归方程的显著性检验
    在这里插入图片描述
    (2)回归系数的显著性检验
    在这里插入图片描述
    2.建模步骤
    (1)根据数据建立回归模型
    (2)对模型进行显著性检验
    (3) 对模型进行回归诊断
    3.建模

    library(car)
    a=read.table("C:/Users/MrDavid/data_TS/reg.csv",sep=",",header=T)
    a
    lm.salary=lm(锘縴~x1+x2+x3+x4,data=a)
    summary(lm.salary)
    #注:锘縴是y乱码之后的结果
    

    在这里插入图片描述
    发现x2,x3,x4系数不显著。
    (2)对变量进行选择

    lm.step=step(lm.salary,direction="both")
    

    在这里插入图片描述
    如果去掉变量x2,AIC的值为648.49,如果去掉变量x3,AIC的值为650.85,如果去掉变量x1,AIC的值为715.19,所以在这里去掉x2.
    进行下一轮的计算:

    lm.salary=lm(锘縴~x1+x3+x4,data=a)
    lm.step=step(lm.salary,direction="both")
    

    在这里插入图片描述
    发现去掉x3,AIC 的值为647.64,所以去掉x3.
    单独对x1和x4,进行拟合。

    lm.salary=lm(锘縴~x1+x4,data=a)
    summary(lm.salary)
    

    在这里插入图片描述
    可以看出F检验P值小于0.05显著,各个参数系数也是显著的。
    (3)对上述回归模型进行回归残差诊断

    算出模型的标准化残差

    library(TSA)
    y.rst=rstandard(lm.step)
    y.rst
    

    在这里插入图片描述
    画出其残差散点图:
    在这里插入图片描述
    很明显发现4和35号点异常,将这两个点去除。

    lm.salary=lm(log(锘縴)~x1+x2+x3+x4,data=a[-c(4,35),])
    lm.step=step(lm.salary,direction="both")
    y.rst=rstandard(lm.step)
    y.fit=predict(lm.step)
    plot(y.rst~y.fit)
    

    去除两点后的结果:
    在这里插入图片描述
    在这里插入图片描述
    绘制模型诊断图:

    par(mfrow=c(2,2))
    plot(lm.step)
    influence.measures(lm.step)
    

    在这里插入图片描述
    残差拟合图基本上呈现随机分布模式,正态Q-Q图基本落在直线上,表明残差服从正态分布;大小-位置图和残差-杠杆图以小组的形式存在并且离中心不远。这说明3,4,35号观测值可能是异常点和强影响点。

    展开全文
  • 数学建模常用模型05 :多元回归模型

    万次阅读 多人点赞 2018-08-03 13:43:37
    所以在遇到有些无法用机理分析建立数学模型的时候,通常采取搜集大量数据的办法,基于对数据的统计分析去建立模型,其中用途最为广泛的一类随即模型就是统计回归模型。 回归模型确定的变量之间是相关关系,在大量的...

    给大家安利一款朋友开发的自研国产数据分析基础工具,一键式自动分析,自动生成分析模板,5分钟掌握主流61个统计类数学模型(几乎涵盖SPSS绝大部分功能),以及23个有监督机器学习(包括随机森林,SVM,XGBoost等)

    PS:巨方便简单上手,貌似现在是免费

    官网:www.mpaidata.com   mpai数据科学平台

     

    1 基本知识介绍

    1.1回归模型的引入

    由于客观事物内部规律的复杂性及人们认识程度的限制,无法分析实际对象内在的因果关系,建立合乎机理规律的数学模型。所以在遇到有些无法用机理分析建立数学模型的时候,通常采取搜集大量数据的办法,基于对数据的统计分析去建立模型,其中用途最为广泛的一类随即模型就是统计回归模型。

    回归模型确定的变量之间是相关关系,在大量的观察下,会表现出一定的规律性,可以借助函数关系式来表达,这种函数就称为回归函数或回归方程。

     

    1.2回归模型的分类

     

    2 用回归模型解题的步骤

    回归模型解题步骤主要包括两部分,一:确定回归模型属于那种基本类型,然后通过计算得到回归方程的表达式;二:是对回归模型进行显著性检验。

    一:①根据试验数据画出散点图;

        ②确定经验公式的函数类型;

    ③通过最小二乘法得到正规方程组;

    ④求解方程组,得到回归方程的表达式。

    二:①相关系数检验,检验线性相关程度的大小;

    ②F检验法(这两种检验方法可以任意选);

    ③残差分析;

    ④对于多元回归分析还要进行因素的主次排序;

        如果检验结果表示此模型的显著性很差,那么应当另选回归模型了。

    3模型的转化

    非线性的回归模型可以通过线性变换转变为线性的方程来进行求解:例如

    函数关系式:可以通过线性变换:转化为一元线性方程组来求解,对于多元的也可以进行类似的转换。

     

    4举例

    例1(多元线性回归模型):已知某湖八年来湖水中COD浓度实测值(y)与影响因素湖区工业产值(x1)、总人口数(x2)、捕鱼量(x3)、降水量(x4)资料,建立污染物y的水质分析模型。

        (1)输入数据

        x1=[1.376, 1.375, 1.387, 1.401, 1.412, 1.428, 1.445, 1.477]

        x2=[0.450, 0.475, 0.485, 0.500, 0.535, 0.545, 0.550, 0.575]

        x3=[2.170 ,2.554, 2.676, 2.713, 2.823, 3.088, 3.122, 3.262]

        x4=[0.8922, 1.1610 ,0.5346, 0.9589, 1.0239, 1.0499, 1.1065, 1.1387]

        y=[5.19, 5.30, 5.60,5.82,6.00, 6.06,6.45, 6.95]

        (2)保存数据(以数据文件.mat形式保存,便于以后调用)

        save  data x1 x2 x3 x4 y

        load data  (取出数据)

        (3)执行回归命令

        

    [b,bint,r,rint,stats] = regress(y,x)

    得结果:

        b = (-16.5283,15.7206,2.0327,-0.2106,-0.1991)’

        stats = (0.9908,80.9530,0.0022)

    即:\hat y= -16.5283 + 15.7206xl + 2.0327x2 – 0.2106x3 + 0.1991x4

            {R^2} = 0.9908,F = 80.9530,P = 0.0022

        通过查表可知,{R^2}代表决定系数(R代表相关系数),它的值很接近与1,说明此方程是高度线性相关的;

    F检验值为80.9530远大于{F_{0.05}}(4,3) = 9.12,可见,检验结果是显著的。

    例2(非线性回归模型)非线性回归模型可由命令nlinfit来实现,调用格式为

        [beta,r,j] = nlinfit(x,y,'model’,beta0)

        其中,输人数据x,y分别为n×m矩阵和n维列向量,对一元非线性回归,x为n维列向量model是事先用 m-文件定义的非线性函数,beta0是回归系数的初值, beta是估计出的回归系数,r是残差,j是Jacobian矩阵,它们是估计预测误差需要的数据。

      预测和预测误差估计用命令

      [y,delta] = nlpredci(’model’,x,beta,r,j)

      如:对实例1中COD浓度实测值(y),建立时序预测模型,这里选用logistic模型。即

        y = \frac{a}{{1 + b{e^{ - ct}}}}

      (1)对所要拟合的非线性模型建立的m-文件mode1.m如下:

      function yhat=model(beta,t)

      yhat=beta(1)./(1+beta(2)*exp(-beta(3)*t))

      (2)输人数据

      t=1:8

      load data y(在data.mat中取出数据y)

      beta0=[50,10,1]’

      (3)求回归系数

      [beta,r,j]=nlinfit(t’,y’,’model’,beta0)

      得结果:

      beta=(56.1157,10.4006,0.0445)’

      即

      \hat y = \frac{{56.1157}}{{1 + 10.4006{e^{ - 0.0445t}}}}

      (4)预测及作图

        [yy,delta] = nlprodei(’model’,t’,beta,r,j);

        plot(t,y,’k+’,t,yy,’r’)

        3.逐步回归

        逐步回归的命令是stepwise,它提供了一个交互式画面,通过此工具可以自由地选择变量,进行统计分析。调用格式为:

        stepwise(x,y,inmodel,alpha)

        其中x是自变量数据,y是因变量数据,分别为n×m和n×l矩阵,inmodel是矩阵的列数指标(缺省时为全部自变量),alpha,为显著性水平(缺省时为0.5)

        结果产生三个图形窗口,在stepwise plot窗口,虚线表示该变量的拟合系数与0无显著差异,实线表示有显著差异,红色线表示从模型中移去的变量;绿色线表明存在模型中的变量,点击一条会改变其状态。在stepwise Table窗口中列出一个统计表,包括回归系数及其置信区间,以及模型的统计量剩余标准差(RMSE),相关系数 (R-square),F值和P值。

      例3、主成份分析

      主成份分析主要求解特征值和特征向量,使用命令 eig(),调用格式为

        [V,D] = eig(R)   

        其中R为X的相关系数矩阵,D为R的特征值矩阵,V为特征向量矩阵

        实例3:对实例1中变量进行主成份成析

        (1)调用数据

        load data

        x =

        (2)计算相关系数矩阵

        R = corrcoef(x)

        (3)求特征根、特征向量

        [V,D] = eig(R)

    得结果:

     

      按特征根由大到小写出各主成份

      第一主成份

      f1 = 0.5438xl+0.5505x2+0.5387x3+0.3332x4

      方差贡献率为3.1863/4 = 79.66%

      第二主成份

      f2 = -0.1693xl-0.1588x2 –0.2484x3 +0.9404x4

      方差贡献率为0.7606/4 = 19.12%

      第三主成份

      f3 = -0.7597x1 + 0.0930x2 + 0.6418x3 + 0.0485x4

    方差贡献率为0.0601/4=1.5%

    展开全文
  • 我眼中的多元回归模型

    千次阅读 2019-06-21 10:05:07
    多元回归与一元回归不同 与一元回归相比,多元回归有两点不同: ... Y的平均值能够准确的被由X组成的线性函数模型呈现出来; 解释变量和随机扰动项不存在线性关系; 解释变量之间不存...

                                                                            多元回归与一元回归不同

           与一元回归相比,多元回归有两点不同:

    1、新增了一个假定,多元回归的假定为:

    • Y的平均值能够准确的被由X组成的线性函数模型呈现出来;

    • 解释变量和随机扰动项不存在线性关系;

    • 解释变量之间不存在线性关系或强相关

    • 假设随机误差项e是一个均值为0的正态分布;

    • 假设随机误差项e的方差恒定;

    • 误差独立。

    2、多元线性回归会面临变量选择的问题

           模型自变量增加后,即便使用聚类等手段进行变量压缩,也不能将自变量的相关性完全剔除,这便会导致具有相关性的自变量溜进模型。由于自变量间关系不同,建模所选择的策略也会不同,模型的结果相对也会有较大差异,SAS中一般会使用selection参数进行变量控制,这个参数即为变量选择提供准则与方法。

                                                                                多元线性回归的多重共线性

           多元线性回归的自变量间不能具有多重共线性,但实际构建模型时经常会遇到自变量间高度重叠的情况,即自自变量间高度相关,一般SAS中使用VIF参数进行自变量相关性的检验。

           如下为多元线性回归的SAS实现代码及VIF检验参数解读:

           VIF参数解读:

           这里模型整体非常显著模型的自变量却只有一个是显著的,大部分自变量都没有显著,这种情况明显是模型的自变量间出现了多重共线性。或者换一个角度,我会通过查看方差膨胀值来观察共线性,膨胀值为10以下表示暂无共线性、膨胀值为10以上表示出现了多重共线性、如果方差膨胀值达到100甚至以上则表示严重共线性。这里出现了两个10以上的方差膨胀值,即当地人均收入与年收入这两个变量出现了共线性。

                                                                                     遇到多重共线性怎么办

           遇到多重共线性一般会有两种处理办法:

    • 最简单粗暴的方法,是将出现多重共线性的两个变量都从模型中去掉。如果想去掉其中的一个变量,这就会涉及到去掉哪个变量的问题,一般我会回过头去看变量间的相关系数矩阵图,反复查看确认这两个共线性的变量间到底是哪个变量和其他变量间相关性更强些,然后再删掉与其他变量相关性更强些的这个变量。一般,统计软件只能提示这两个变量出现了多重共线性,但是至于两个变量都去掉、去掉其中一个变量、去掉其中哪一个变量 这个过程统计软件是没法提供帮助的。
    • 不去掉这些变量的情况下将模型构建起来,便涉及到了设置变量选择准则,也就是向前法、向后法等等。

           还有一种情况,例如某个变量引起了多重共线性,理应删除,但是业务上这个变量又不能缺失,实际中这种情况是可以使用一些算法进行处理的,例如岭回归、LASSO、最小角度回归LAR、主成分回归、偏最小二乘回归等等。

                                                                                 变量选择及项目流程

           建模选择变量时首先考虑的不应该是技术,而是业务。实际上,如果项目周期是三个月,那么跑模型的时间应该是不超过10天的,剩下的大量精力应该放在理解业务上。

           例如预测酱油的需求量,基本的思路应该是:

    • 了解业务

           每一个业务领域都会有自己的体系,建模前需深入了解对应领域、体系下业务相关的全部资料,总结出哪些因素可能会影响酱油销量。

           假如查阅了大量资料后了解到 影响酱油销量的因素有商品价格、代用品价格、当地收入水平、消费者偏好这四个方面,那么接下来需要判断这些因素是否都可以进行数据量化,将不能量化描述的变量排除掉。

           一般偏好较难进行量化描述,偏好比较适合作为因变量进行入模(例如买与不买),但不适合作为自变量,所以不会选择将偏好选为自变量进行入模,排除掉;酱油本身价格较低,生活中使用其替代品的情况较少,所以替代品价格这个自变量也排除掉。         故最终可以确定模型的因变量为酱油需求量,模型的自变量为酱油价格与收入水平

    • 反复沟通

           模型服务于业务,与业务人员反复沟通必不可少,沟通过程中需要非常非常高的情商,很可能在这个阶段耗费掉2个月的时间;

    • 变量落地

           找出入模变量的替换变量,需求量Y可用上一期的销量所代替;收入难于获取,一般很难拿到一个人的真实收入,所以一般用人均消费水平去代替收入变量;价格变量需要考虑可比性的问题,即空间可比性(同城市的价格不同)与时间可比性(十年前和今天价格是不同的)。

           故最终确定的模型落地变量为:Y为酱油销量,X为平均销售价格、不变价格的消费水平

    • 数据清洗与建模

           一般,剩余20天左右的时间进行数据清洗、剩余10天左右的时间去跑模型。 

                                                                            回归模型中多少个变量合适

           SAS构建回归模型时,依据不同功能可以将模型划分为不同类别,一般模型可以分为三类:

    • 机理模型

           机理模型追求将变量关系描述的越清楚越好,这类模型涉及到的变量比较多。物理定律一般都是机理模型,比较典型的如F=ma;

    • 经验模型

           实际中变量间关系较为复杂,用机理模型无法描述。例如用模型去描述人口增长,这种情况只能提取历史数据去建立经验模型,而无法建立机理模型。因自变量自身存在误差,变量越多误差越大,从而导致预测越不准,所以经验模型为了追求预测准确度 模型的变量较少

    • 模拟模型

           模拟模型是所有建模人的终极愿望,这个模型需要将事物发生、发展的全过程都用数学语言再现出来。例如银行的压力测试即为模拟模型。

                                                                                  我选择变量的方式

           变量选择在回归里是一个很麻烦的事情,我会依据实际情况,如果变量较少,我会使用全子集回归,然后从结果中去选择自己认为比较好的变量组合;如果变量数目较多,我更喜欢去使用逐步回归

           如下为全子集回归模型的SAS实现代码:

    我的公众号:Data Analyst

    个人网站:https://www.datanalyst.net/

     

     

     

     

     

     

     

    展开全文
  • 机器学习算法:多元高斯模型

    千次阅读 2019-02-11 21:38:57
    本文结构如下: ...多元正态分布也叫多元高斯分布,这个分布的两个参数分别是平均向量 和一个协方差矩阵  其中: ,且是对称、半正定的。 若 ,则其概率密度是: 下面用python进行可视化多元正...

    本文结构如下:

    • 1:多元正态分布及可视化
    • 2:双高斯独立分布可视化
    • 3:从零开始推导多元高斯分布
    • 4:多元正态分布性质
    • 5:高斯判别分析模型
    • 6:高斯判别分析模型Demo

    1: 多元正态分布及可视化

    多元正态分布也叫多元高斯分布,这个分布的两个参数分别是平均向量 \mu \in \mathbb{R}^{n} 和一个协方差矩阵 \Sigma\in\mathbb{R}^{n*n}

    其中: \Sigma=E\{(X-E(X))(X-E(X)^{T})\}=\begin{pmatrix} Var(X_{1}) &cov(X_{1},X_{2}) &\cdots & cov(X_{1},X_{n}) \\ cov(X_{2},X_{1}) &Var(X_{2}) &\cdots & cov(X_{2},X_{n}) \\ \vdots & \vdots &\ddots &\vdots \\ cov(X_{n},X_{1}) &cov(X_{n},X_{2}) & \cdots &Var(X_{n}) \end{pmatrix},且是对称、半正定的。p(x,\mu, \Sigma)=

    若 X\sim N(\mu, \Sigma ),则其概率密度是:

    p(x,\mu, \Sigma)=\frac{1}{(2\pi)^{n/2}\left | \Sigma \right |^{1/2}}exp\left (-\frac{1}{2}(x-\mu)^{T}\Sigma^{-1}(x-\mu)\right )

    下面用python进行可视化多元正态分布:

    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    from matplotlib import cm
    import matplotlib as mpl
    
    num = 200
    l = np.linspace(-5,5,num)
    X, Y = np.meshgrid(l, l) #meshgrid的作用适用于生成网格型数据,可以接受两个一维数组生成两个二维矩阵
    #np.expand_dims增加一个维度(下面是增加第三维)
    pos = np.concatenate((np.expand_dims(X,axis=2),np.expand_dims(Y,axis=2)),axis=2)
    
    def plot_multi_normal(u,sigma):
        fig = plt.figure(figsize=(12,7))
        ax = Axes3D(fig)
    
        a = (pos-u).dot(np.linalg.inv(sigma))   #np.linalg.inv()矩阵求逆
        b = np.expand_dims(pos-u,axis=3)
        Z = np.zeros((num,num), dtype=np.float32)
        for i in range(num):
            Z[i] = [np.dot(a[i,j],b[i,j]) for j in range(num)]
        Z = np.exp(Z*(-0.5))/(2*np.pi*(np.linalg.det(sigma))**(0.5))   #np.linalg.det()矩阵求行列式
        ax.plot_surface(X, Y, Z, rstride=5, cstride=5, alpha=0.4, cmap=mpl.cm.bwr)
        cset = ax.contour(X,Y,Z, zdir='z',offset=0,cmap=cm.coolwarm,alpha=0.8)  #contour画等高线
        cset = ax.contour(X, Y, Z, zdir='x', offset=-5,cmap=mpl.cm.winter,alpha=0.8)
        cset = ax.contour(X, Y, Z, zdir='y', offset= 5,cmap= mpl.cm.winter,alpha=0.8)
        ax.set_zlim([0,0.3])   
        ax.set_xlabel('X')
        ax.set_ylabel('Y')
        ax.set_zlabel('Z')
        plt.show()
    

     

    u = np.array([0, 0])
    sigma = np.array([[1, 0],[0, 1]])
    plot_multi_normal(u,sigma)
    

     

    u = np.array([0, 0])
    sigma = np.array([[0.8, 0],[0, 0.8]])
    plot_multi_normal(u,sigma)
    

    u = np.array([0, 0])
    sigma = np.array([[1.5, 0],[0, 1.5]])
    plot_multi_normal(u,sigma)
    

    第一幅图像展现的二维高斯分布的均值是零向量(2x1的零向量),协方差矩阵\Sigma=I(2\times2),像这样以零向量为均值以单位阵为协方差的多维高斯分布称为标准正态分布,第二幅图像以零向量为均值, \Sigma=0.8I ;第三幅图像中 \Sigma=1.5I ,观察发现当 \Sigma 越大时,高斯分布越“铺开”,当 \Sigma 越小时,高斯分布越“收缩”。

    让我们继续更换 \Sigma 的值看看图像如何变换:

     

    u = np.array([0, 0])
    sigma = np.array([[1, 0],[0, 1]])
    plot_multi_normal(u,sigma)
    

     

    u = np.array([0, 0])
    sigma = np.array([[1, 0.4],[0.4, 1]])
    plot_multi_normal(u,sigma)
    

    u = np.array([0, 0])
    sigma = np.array([[1, 0.8],[0.8, 1]])
    plot_multi_normal(u,sigma)
    

     

    上图中展示的三个高斯分布对应的均值均为零向量,协方差矩阵分别对应与下面三个 \Sigma =\begin{bmatrix}1 &0 \\ 0& 1\end{bmatrix} ; \Sigma =\begin{bmatrix}1 &0.4 \\ 0.4 & 1\end{bmatrix} ; \Sigma =\begin{bmatrix}1 &0.8 \\ 0.8 & 1\end{bmatrix}

    最第一幅图像是标准二维正态分布,当我们增加 \Sigma的非主对角元素时,概率密度图像沿着45°线 (x1=x2) “收缩”,从对应的等高线轮廓图可以跟清楚的看到这一点:

     

    最后我们再改变下不同的 \Sigma 看看:

    u = np.array([0, 0])
    sigma = np.array([[1, -0.5],[-0.5, 1]])
    plot_multi_normal(u,sigma)
    

     

    u = np.array([0, 0])
    sigma = np.array([[1, -0.8],[-0.8, 1]])
    plot_multi_normal(u,sigma)
    

     

     

    u = np.array([0, 0])
    sigma = np.array([[3, -0.8],[-0.8, 1]])
    plot_multi_normal(u,sigma)
    

     

    上图中展示的三个高斯分布对应的均值均为零向量,协方差矩阵分别对应与下面三个 \Sigma =\begin{bmatrix}1 &-0.5 \\ -0.5& 1\end{bmatrix}\Sigma =\begin{bmatrix}1 &0.-0.8 \\ -0.8 & 1\end{bmatrix} ; \Sigma =\begin{bmatrix}3 &0.8 \\ 0.8 & 1\end{bmatrix}

    通过对比发现,通过改变非主对角元素的符号时,概率密度收缩方向会改变;对比第二和第三幅发现,通过减少主对角元素可以让概率密度图像变得“收缩”。

     

    最后,我们固定 \Sigma=I ,变动 \mu ,从而可以移动概率密度图像的均值。

    u = np.array([1, 0])
    sigma = np.array([[1, 0],[0, 1]])
    plot_multi_normal(u,sigma)
    

     

    u = np.array([-0.5, 0])
    sigma = np.array([[1, 0],[0, 1]])
    plot_multi_normal(u,sigma)
    

     

    u = np.array([-1, -1.5])
    sigma = np.array([[1, 0],[0, 1]])
    plot_multi_normal(u,sigma)
    

    1.2 双高斯独立分布可视化

     

    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    from matplotlib import cm
    import matplotlib as mpl
    
    num = 200
    l = np.linspace(-5,5,num)
    X, Y =np.meshgrid(l, l)
    pos = np.concatenate((np.expand_dims(X,axis=2),np.expand_dims(Y,axis=2)),axis=2)
    
    
    def plot_two_gaussian(u1,sigma1,u2,sigma2):
        fig = plt.figure(figsize=(12,7))
        ax = Axes3D(fig)
    
        a1 = (pos-u1).dot(np.linalg.inv(sigma1))
        b1 = np.expand_dims(pos-u1,axis=3)
        Z1 = np.zeros((num,num), dtype=np.float32)
    
        a2 = (pos-u2).dot(np.linalg.inv(sigma2))
        b2 = np.expand_dims(pos-u2,axis=3)
        Z2 = np.zeros((num,num), dtype=np.float32)
    
        for i in range(num):
            Z1[i] = [np.dot(a1[i,j],b1[i,j]) for j in range(num)]
            Z2[i] = [np.dot(a2[i,j],b2[i,j]) for j in range(num)]
        Z1 = np.exp(Z1*(-0.5))/(2*np.pi*(np.linalg.det(sigma1))**0.5)
        Z2 = np.exp(Z2*(-0.5))/(2*np.pi*(np.linalg.det(sigma2))**0.5)
    
        Z = Z1 + Z2
    
        ax.plot_surface(X, Y, Z, rstride=5, cstride=5, alpha=0.4, cmap=mpl.cm.bwr)
        cset = ax.contour(X,Y,Z, zdir='z',offset=0,cmap=cm.coolwarm,alpha=0.8)  #contour画等高线
        cset = ax.contour(X, Y, Z, zdir='x', offset=-5,cmap=mpl.cm.winter,alpha=0.8)
        cset = ax.contour(X, Y, Z, zdir='y', offset= 5,cmap= mpl.cm.winter,alpha=0.8)
        ax.set_zlim([0,0.3])   
        ax.set_xlabel('X')
        ax.set_ylabel('Y')
        ax.set_zlabel('Z')
        plt.show()
    

     

    u1 = np.array([1.3, 1.3])
    sigma1 = np.array([[1, 0],[0, 1]])
    u2 = np.array([-1.3, -1.3])
    sigma2 = np.array([[1, 0],[0, 1]])
    
    plot_two_gaussian(u1,sigma1,u2,sigma2)
    

     

    1.3 从零开始推导多元高斯分布

    这部分推导搬运的这篇文章:从零开始推导多元高斯分布 因原文在符号上有些错误,因此做了些修正。

    我们已经非常熟悉一元正态分布,我们先假设均值为0,方差为1,其密度函数如下: f(x)=\frac{1}{\sqrt{2\pi}}exp(-\frac{x^{2}}{2}) 。

    当均值为 \mu ,方差为 \sigma^{2}时,我们先标准化一下: z=\frac{x-\mu}{\sigma} ,标准化之后方差变为1。标准化的意义在于将数据点$x$到均值$\mu$的距离转化为数据点$x$到均值的距离等于多少个总体的标准差 \sigma ,这样,就消除了数据分布差异和量纲对概率计算的影响,此时的概率密度函数为: f(x)=\frac{1}{\sigma\sqrt{2\pi}}exp(-\frac{x^{2}}{2})=\frac{1}{\sigma\sqrt{2\pi}}exp(-\frac{(x-\mu)^{2}}{2\sigma^{2}})

    可见,高斯分布的概率密度计算核心在于计算数据点到中心的距离,并且除以标准差将这个绝对距离转化为相对距离,然后通过距离平方的指数衰减计算概率密度。

    回到多元正态分布,先从独立的多元正态分布入手,数据点通过 n 维的列向量描述 \overrightarrow{x}=\left[x_{1},x_{2},...,x_{n}\right]^{T} ,各个维度的均值方差分别为 \overrightarrow{\mu}=\left[\mu_{1},\mu_{2},\cdots,u_{n}\right]^{T},\overrightarrow{\sigma}=\left[\sigma_{1},\sigma_{2},\cdots,\sigma_{n}\right]^{T} 来描述,高斯概率密度函数可以表示为:

    f(x)=\frac{1}{\sigma_{1}\sqrt{2\pi}}exp(-\frac{(x_{1}-\mu_{1})^{2}}{2\sigma^{2}_{1}})\frac{1}{\sigma_{2}\sqrt{2\pi}}exp(-\frac{(x_{2}-\mu_{2})^{2}}{2\sigma^{2}_{2}})\cdots\frac{1}{\sigma_{n}\sqrt{2\pi}}exp(-\frac{(x_{n}-\mu_{n})^{2}}{2\sigma^{2}_{n}})

    =\frac{1}{(2\pi)^{n/2}\prod_{i=1}^{n}\sigma_{i}}exp(-\frac{1}{2}\left[\sum_{j=1}^{n}(\frac{x_{j}-\mu_{j}}{\sigma_{j}})^{2}\right])

    下面用矩阵表示:

    d^{2}(\overrightarrow{x},\overrightarrow{\mu})=\sum_{j=1}^{n}(\frac{x_{j}-\mu_{j}}{\sigma_{j}})^{2} =\left[x_{1}-\mu_{1},x_{2}-\mu_{2},\cdots,x_{n}-\mu_{n}\right]\begin{bmatrix}\frac{1}{\sigma_{1}^{2}} & 0 &\cdots &0 \\ 0 & \frac{1}{\sigma_{2}^{2}} & \cdots &0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \frac{1}{\sigma_{n}^{2}} \end{bmatrix}\begin{bmatrix} x_{1}-\mu_{1}\\ x_{2}-\mu_{2}\\ \vdots \\ x_{n}-\mu_{n}\end{bmatrix} =(\overrightarrow{x}-\overrightarrow{\mu})^{T}\Sigma^{-1}(\overrightarrow{x}-\overrightarrow{\mu})

     

    \prod_{i=1}^{n}\sigma_{i}=\left |\Sigma \right |^{1/2} ,由于假设了各个维度之间不相关,因此协方差矩阵只有在对角线的位置有值,代表不同变量的方差大小。

    则: f(x)=\frac{1}{(2\pi)^{n/2}\left |\Sigma \right |^{1/2}}exp\left[-\frac{1}{2}(\overrightarrow{x}-\overrightarrow{\mu})^{T}\Sigma^{-1}(\overrightarrow{x}-\overrightarrow{\mu})\right]

    那么假如维度之间互相关的多元高斯分布中,如何计算相对距离呢?在吴恩达机器学习视频里有这样一个例子:这是一个二维正态分布,memory use和CPU load之间存在明显的正相关关系,如果按照之前维度不相关的计算方法,图中的绿色异常点就会被视作是正常的(真实分布是倾斜的椭圆)。

    一个直观上的思想是用化归的思想,将相关变成不相关。在这个例子中,直觉的做法是找到倾斜的椭圆分布的长轴方向 \overrightarrow{u_{1}} 和短轴方向 \overrightarrow{u_{2}} ,计算数据点在这两个轴上的坐标(变换到这两个方向之后,新的维度之间显然是不相关的),以长轴为$x$轴,短轴为$y$轴建立新的坐标系;经过这样的变换后相当于将倾斜的椭圆放平,此时数据的各个维度之间不相关(其实就是PCA),就可以用前面各维度不相关的高斯分布解了。如下图所示:

    如果变换的方向 \overrightarrow{u_{1}} 和 \overrightarrow{u_{2}} 用列向量 \overrightarrow{u_{1}}=\begin{bmatrix}u_{1}^{1}\\ u_{2}^{1}\end{bmatrix}$,$\overrightarrow{u_{2}}=\begin{bmatrix}u_{1}^{2}\\ u_{2}^{2}\end{bmatrix} ,那么数据的投影长度可以用点积来计算为: \overrightarrow{u_{1}}^{T}\cdot \overrightarrow{x}=\begin{bmatrix}u_{1}^{1} & u_{1}^{2} \end{bmatrix}\begin{bmatrix}x_{1}\\ x_{2}\end{bmatrix} 。投影长度代表了数据点在 \overrightarrow{u_{1}} 方向上的坐标。

    这个过程可以用矩阵变换表示为: Y=\begin{bmatrix}Y_{1}\\Y_{2}\end{bmatrix}=\begin{bmatrix}\overrightarrow{u_{1}}^{T}\cdot \overrightarrow{x}\\\overrightarrow{u_{2}}^{T}\cdot \overrightarrow{x}\end{bmatrix}=\begin{bmatrix}\overrightarrow{u_{1}}^{T}\\\overrightarrow{u_{2}}^{T}\end{bmatrix}\overrightarrow{x}=U^{T}\overrightarrow{x}

    需要注意的是 \overrightarrow{u_{1}} , \overrightarrow{u_{2}} 都是单位向量,而且相互垂直,所以 U 是一个正交矩阵 U^{T}=U^{-1}

    现在数据的各个维度已经去相关,那么我们可以用前面的各维度独立的多元正态分布来计算了。在计算之前还需要将数据标准化一下,消除一下量纲的影响:

    Z=\begin{bmatrix}\frac{Y_{1}-\mu_{Y_{1}}}{\sigma_{Y_{1}}}\\ \frac{Y_{2}-\mu_{Y_{2}}}{\sigma_{Y_{2}}}\end{bmatrix}=\begin{bmatrix}1/\sigma_{Y_{1}} &0 \\ 0 & 1/\sigma_{Y_{2}}\end{bmatrix}\begin{bmatrix}Y_{1}-\mu_{Y_{1}}\\ Y_{2}-\mu_{Y_{2}}\end{bmatrix}=D(Y-\mu_{Y})

    =D(U^{T}\overrightarrow{x}-U^{T}\overrightarrow{\mu_{x}})=DU^{T}(\overrightarrow{x}-\overrightarrow{\mu_{x}})

    这里 D=\begin{bmatrix}1/\sigma_{Y_{1}} &0 \\ 0 & 1/\sigma_{Y_{2}}\end{bmatrix}

    上面公式可以简单如下图表示:

     

    后面的推导核心在于构建变换前后协方差矩阵的关系,发现将变换前协方差矩阵对角化之后就得到了变换后的协方差矩阵。

    d^{2}(z,\mu)=z_{1}^{2}+z_{1}^{2}=\left[z_{1},z_{2}\right]\begin{bmatrix}z_{1}\\ z_{2}\end{bmatrix}=Z^{T}Z $d^{2}

    将 Z 带入:

    d^{2}(x,\mu)=(DU^{T}(\overrightarrow{x}-\overrightarrow{\mu_{x}}))^{T}DU^{T}(\overrightarrow{x}-\overrightarrow{\mu_{x}})=(\overrightarrow{x}-\overrightarrow{\mu_{x}})^{T}UD^{T}DU^{T}(\overrightarrow{x}-\overrightarrow{\mu_{x}})

    将 D 带入:

    \Sigma_{Y}^{-1}=D^{T}D=\begin{bmatrix}1/\sigma_{Y_{1}}^{2} &0 \\ 0 & 1/\sigma_{Y_{2}}^{2}\end{bmatrix}

    \Sigma_{Y} 是去相关性后数据的协方差矩阵,因为是对角,所以逆等于对角元素的倒数。

    对于这个方程我们需找出变换的方向,再算出变换后的方差,很麻烦。但是有个定义可以让我们更简单的得到:变换后数据各维度不相关,也就是说变换后的协方差矩阵是对角阵,即: \Sigma_{Y}=\begin{bmatrix}\sigma_{Y_{1}}^{2} &0 \\ 0 & \sigma_{Y_{2}}^{2}\end{bmatrix} 。

    从定义出发:

    \Sigma_{Y}=E\left[(Y-\mu_{Y})(Y-\mu_{Y})^{T}\right]=E\left[U^{T}(\overrightarrow{x}-\mu_{x})(\overrightarrow{x}-\mu_{x})^{T}U\right]

    =U^{T}E\left[(\overrightarrow{x}-\mu_{x})(\overrightarrow{x}-\mu_{x})^{T}\right]U=U^{T}\Sigma_{x}U\Rightarrow \Sigma_{x}=U\Sigma_{Y}U^{T}

    由上面推导知:

    UD^{T}DU^{T}=U\Sigma_{Y}^{-1}U^{T};(U\Sigma_{Y}^{-1}U^{T})(U\Sigma_{Y}U^{T})=I

    \Rightarrow (U\Sigma_{Y}^{-1}U^{T})\Sigma_{x}=I\Rightarrow \Sigma_{x}^{-1}=UD^{T}DU^{T}

    代入得:

    d^{2}(x,\mu)=(\overrightarrow{x}-\overrightarrow{\mu_{x}})^{T}\Sigma_{x}(\overrightarrow{x}-\overrightarrow{\mu_{x}})

    注意:我们在计算的过程中,得到的最终零均值,方差为1的 Z ,相当于对原坐标 x 做了一次变换: Z=DU^{T}(\overrightarrow{x}-\overrightarrow{\mu_{x}})

    使 Z 成为去相关的零均值,方差为1的正态分布,因此概率密度函数在源空间做全空间积分的时候需要做换元变换,整体减小了 |DU^{T}| (雅可比),因为 \Sigma_{x}^{-1}=UD^{T}DU^{T} ,所以 |DU^{T}|=\sqrt{|\Sigma_{x}^{-1}|}=|\Sigma_{x}|^{-1/2}

    所以为了保证概率密度函数全空间积分为1,需要乘上 |\Sigma_{x}|^{-1/2} ,还需要除以 (\sqrt{2\pi})^{d}

    这一项是在计算 e^{x^{2}} 的积分时引入的,每个维度都会有,所以是 d 次方

    因此整体的概率密度函数:

    f(x)=\frac{1}{2\pi}exp(-z^{2}/2)=\frac{1}{(2\pi)^{n/2}\left | \Sigma \right |^{1/2}}exp\left (-\frac{1}{2}(x-\mu)^{T}\Sigma^{-1}(x-\mu)\right )

    补充一点,上面的推导过程中,是基于二元正态分布推导的,但这个推导过程对于任意的 d 维向量都是适用的,所以在最后的表达式里面,写成了 d 维了。

    总结:这里主要思想是通过线性变换,将数据的各维度去相关,再将去相关后的数据标准化,但是在推导概率分布过程中,可以消去这个变换,只需要求源空间的协方差矩阵就可以了。其实,这个过程跟主成分分析的过程很相似的,不过主成分分析的过程是在对数据去相关之后,取前面K个方差最大(保留信息)的方向。这样来说,实现主成分分析也是很简单的,根据 \Sigma_{Y}=U^{T}\Sigma_{X}U,你只需要用大一的线代知识将 \Sigma_{X} 对角化就可以了(特征值分解)!得到的 U 就是变化的方向!变换后的新坐标: Y=U^{T}X 就是数学建模同学老是挂在嘴边的主成分得分。

     

    1.3 多元正态分布性质

    当 X 进行分块: X=\begin{pmatrix}X^{(1)}\\ X^{(2)}\end{pmatrix} ,第一部分大小为 q\times 1 ,第二部分大小为 (n-q)\times 1 ,对应的期望: \mu=\begin{pmatrix}\mu^{(1)}\\ \mu^{(2)}\end{pmatrix} ;也对 \Sigma 做同样的分解: \Sigma=\begin{pmatrix}\Sigma_{11} &\Sigma_{12} \\ \Sigma_{21} & \Sigma_{22}\end{pmatrix} .

    则我们定义 X_{2\cdot1},\Sigma_{22\cdot 1} (Schur补)有: X_{2\cdot1}=X^{(2)}-\Sigma_{21}\Sigma_{11}^{-1}X^{(1)} ; \mu_{2\cdot1}=\mu^{(2)}-\Sigma_{21}\Sigma_{11}^{-1}\mu^{(1)} ; \Sigma_{22\cdot 1}=\Sigma_{22}-\Sigma_{21}\Sigma_{11}^{-1}\Sigma_{12}

    定理: 假如 X\sim N_{n}(\mu,\Sigma) ,则

    (1) X^{(1)}\sim N_{q}(\mu^{(1)},\Sigma_{11}) ; X^{(2)}\sim N_{n-q}(\mu^{(2)},\Sigma_{22}) ; X_{2\cdot 1}\sim N_{n-q}(\mu_{2\cdot 1},\Sigma_{22\cdot 1}) 
    (2) X^{(1)} 与 X_{2\cdot 1}独立
    (3) 条件分布 X_{2}|X_{1}\sim N_{n-q}\left(\mu^{(2)}+\Sigma_{21}\Sigma_{11}^{-1}(X^{(1)}-\mu^{(1)}),\Sigma_{22\cdot 1}\right)

    证明:

    \left\{\begin{matrix}X_{2\cdot1}=X^{(2)}-\Sigma_{21}\Sigma_{11}^{-1}X^{(1)}=\begin{pmatrix}-\Sigma_{21}\Sigma_{11}^{-1} &I \end{pmatrix}\begin{pmatrix}X^{(1)}\\ X^{(2)}\end{pmatrix}\\ X^{(1)}=X^{(1)}\end{matrix}\right.

    上式等价于做如下变换:

    (X^{(1)},X^{(2)})\rightarrow (X^{(1)},X_{2\cdot 1})

    用矩阵表示:

    Z=\begin{pmatrix}X^{(1)}\\ X_{2\cdot 1}\end{pmatrix}=\begin{pmatrix}I & 0\\ -\Sigma_{21}\Sigma_{11}^{-1} &I \end{pmatrix}\begin{pmatrix}X^{(1)}\\ X^{(2)}\end{pmatrix} ,可得雅可比值 J=1

    记 B=\begin{pmatrix}I & 0\\ -\Sigma_{21}\Sigma_{11}^{-1} &I \end{pmatrix} ,得 X=B^{-1}Z ,将此带入概率密度函数(简单化假设期望为零):

    f(Z)=\frac{1}{(2\pi)^{n/2}\left | \Sigma \right |^{1/2}}exp\left(-\frac{1}{2}Z^{T}(B^{-1})^{T}\Sigma^{-1}B^{-1}Z\right)

    =\frac{1}{(2\pi)^{n/2}\left | \Sigma \right |^{1/2}}exp\left(-\frac{1}{2}Z^{T}(B\Sigma B^{T})^{-1}Z\right)

    其中 :

    B\Sigma B^{T}=\begin{pmatrix}I & 0\\ -\Sigma_{21}\Sigma_{11}^{-1} &I \end{pmatrix}\begin{pmatrix}\Sigma_{11} &\Sigma_{12} \\ \Sigma_{21} & \Sigma_{22}\end{pmatrix}\begin{pmatrix}I & -\Sigma_{11}^{-1}\Sigma_{12}\\ 0 &I \end{pmatrix}=\begin{pmatrix}\Sigma_{11} & 0\\ 0 &\Sigma_{22\cdot1} \end{pmatrix}

    对于行列式: |B\Sigma B^{T}|=|\Sigma|=|\Sigma_{11}||\Sigma_{22\cdot1}|

    代入密度函就得:

    f(Z)=\frac{1}{(2\pi)^{n/2}\left ( |\Sigma_{11}||\Sigma_{22\cdot1}| \right )^{1/2}}exp\left(-\frac{1}{2}X^{(1)^{T}}\Sigma_{11}^{-1}X^{(1)}-\frac{1}{2}X^{T}_{2\cdot1}\Sigma_{22\cdot1}^{-1}X^{2\cdot1}\right)=f(X^{(1)})\times f(X_{22\cdot1})

     

    第一条和第二条即证毕。

     

    对于上述证明,需记住:

    (1) |\Sigma|=|\Sigma_{11}||\Sigma_{22\cdot1}| ,其中 \Sigma_{22\cdot1} 是 \Sigma_{11} 的Schur补;
    (2)当 \Sigma 正定,只有当 \Sigma_{11} 和 \Sigma_{22\cdot1} 分别正定;

     

    此外我们定义: C=\begin{pmatrix}C_{11} &C_{12} \\ C_{21} & C_{22}\end{pmatrix}=\begin{pmatrix}\Sigma_{11} &\Sigma_{12} \\ \Sigma_{21} & \Sigma_{22}\end{pmatrix}^{-1}

    可以得: C_{11}^{-1}=\Sigma_{11\cdot2} ; C_{11}^{-1}C_{12}=-\Sigma_{12}\Sigma_{22}^{-1}

     

    现在我们假设: X_{i}\overset{ind}{\sim}N(\mu_{i},\Sigma) , \{X_{1},...,X_{n}\}\subset \mathbb{R}^{p}

    我们可以组合成矩阵: X_{n\times p}=(X_{1},...,X_{n})^{T} ,下面求 X_{n\times p} 的分布

    P(X)=\prod_{i=1}^{n}P(X_{i})=\prod_{i=1}^{n}\frac{1}{(2\pi)^{p/2}\left | \Sigma \right |^{1/2}}exp(-\frac{1}{2}(X_{i}-\mu_{i})^{T}\Sigma^{-1}(X_{i}-\mu_{i}))

    =\frac{1}{(2\pi)^{np/2}\left | \Sigma \right |^{n/2}}exp\left[-\frac{1}{2}tr(\Sigma^{-1}\sum_{i=1}^{n}(X_{i}-\mu_{i})(X_{i}-\mu_{i})^{T})\right]

    =\frac{1}{(2\pi)^{np/2}\left | \Sigma \right |^{n/2}}exp\left[-\frac{1}{2}tr(\Sigma^{-1}(X-\mu)^{T}I_{n}(X-\mu))\right]

    此为矩阵元正态分布(Matrix-Variable Normal Distribution)

     

    1.4 高斯判别分析模型

    高斯判别算法是一个典型的生成学习算法,在这个算法中,我们假设 p(x|y) 服从多元正态分布。

    当我们处理输入特征是连续随机变量 x 时的分类问题时,我们可以使用高斯判别分析模型(GDA),用多元正态分布模型来描述 p(x|y) ,模型的具体数学表达式是这样的:

    y\sim Bernoulli(\phi) 
    x|y=0\sim N(\mu_{0},\Sigma)$;$x|y=1\sim N(\mu_{1},\Sigma)

    写出他们的概率分布为:

    p(y)=\phi ^{y}(1-\phi)^{1-y}
    p(x|y=0)=\frac{1}{(2\pi)^{n/2}\left | \Sigma \right |^{1/2}}exp\left (-\frac{1}{2}(x-\mu_{0})^{T}\Sigma^{-1}(x-\mu_{0})\right ) p(x|y=1)=\frac{1}{(2\pi)^{n/2}\left | \Sigma \right |^{1/2}}exp\left (-\frac{1}{2}(x-\mu_{1})^{T}\Sigma^{-1}(x-\mu_{1})\right )

    现在我们模型有4个参数: \phi,\Sigma,\mu_{0},\mu_{1} ,这里我们假设对不同的 y ,期望不同,协方差一样。下面极大似然函数来估计四个参数:

    l(\phi,\mu_{0},\mu_{1},\Sigma)=log\prod_{i=1}^{m}p(x^{(i)},y^{(i)};\phi,\Sigma,\mu_{0},\mu_{1})=log\prod_{i=1}^{m}p(x^{(i)}|y^{(i)};\Sigma,\mu_{0},\mu_{1})p(y^{(i)};\phi)

    通过最大化似然函数l可以得到上面四个参数的估计值:

    \phi=\frac{1}{m}\sum_{i=1}^{m}\mathbf{1}\{y^{(i)}=1\} 
    \mu_{0}=\frac{\sum_{i=1}^{m}\mathbf{1}\{y^{(i)}=0\}x^{i}}{\sum_{i=1}^{m}\mathbf{1}\{y^{(i)}=0\}} 
    \mu_{0}=\frac{\sum_{i=1}^{m}\mathbf{1}\{y^{(i)}=1\}x^{i}}{\sum_{i=1}^{m}\mathbf{1}\{y^{(i)}=1\}} 
    \Sigma=\frac{1}{m}\sum_{i=1}^{m}\left(x^{(i)}-\mu_{y^{(i)}}\right)\left(x^{(i)}-\mu_{y^{(i)}}\right)^{T}

     

    1.6 高斯判别分析模型Demo

    这部分参考:高斯判别分析模型

    import matplotlib.pyplot as plt
    import numpy as np
    
    #随机从高斯分布中生成两个数据集
    mean0=[2,3]
    cov=np.mat([[1,0],[0,2]])
    x0=np.random.multivariate_normal(mean0,cov,500).T   
    y0=np.zeros(x0.shape[1])     #第一类,标签为0
    
    mean1=[7,8]
    cov=np.mat([[1,0],[0,2]])
    x1=np.random.multivariate_normal(mean1,cov,300).T
    y1=np.ones(x1.shape[1])     #第二类类,标签为1
    
    x=np.concatenate((x0,x1),axis=1)
    y=np.concatenate((y0,y1),axis=0)
    m=x.shape[1]
    
    #根据公式计算参数:\phi,\u0,\u1,\Sigma
    phi=(1.0/m)*len(y1)
    u0=np.mean(x0,axis=1)  
    u1=np.mean(x1,axis=1)
    
    #将原先数据保存,进行画图
    xplot0=x0
    xplot1=x1
    
    x0=x0.T
    x1=x1.T
    x=x.T
    
    x0_sub_u0=x0-u0
    x1_sub_u1=x1-u1
    
    x_sub_u=np.concatenate([x0_sub_u0,x1_sub_u1])
    x_sub_u=np.mat(x_sub_u)
    
    sigma=(1.0/m)*(x_sub_u.T*x_sub_u)
    
    #使用u0_u1中点画决策边界
    midPoint=[(u0[0]+u1[0])/2.0,(u0[1]+u1[1])/2.0]
    
    k=(u1[1]-u0[1])/(u1[0]-u0[0])
    
    x=range(-2,11)
    y=[(-1.0/k)*(i-midPoint[0])+midPoint[1] for i in x]
    
    #画高斯判别的contour
    def gaussian_2d(x, y, x0, y0, sigmaMatrix):
        return np.exp(-0.5*((x-x0)**2+0.5*(y-y0)**2))
    delta = 0.025
    xgrid0=np.arange(-2, 6, delta)
    ygrid0=np.arange(-2, 6, delta)
    xgrid1=np.arange(3,11,delta)
    ygrid1=np.arange(3,11,delta)
    X0,Y0=np.meshgrid(xgrid0, ygrid0)   #generate the grid
    X1,Y1=np.meshgrid(xgrid1,ygrid1)
    Z0=gaussian_2d(X0,Y0,2,3,cov)
    Z1=gaussian_2d(X1,Y1,7,8,cov)
    
    plt.figure(figsize=(12,9))
    plt.clf()
    plt.plot(xplot0[0],xplot0[1],'ko')
    plt.plot(xplot1[0],xplot1[1],'gs')
    plt.plot(u0[0],u0[1],'rx',markersize=20)
    plt.plot(u1[0],u1[1],'y*',markersize=20)
    plt.plot(x,y)
    CS0=plt.contour(X0, Y0, Z0)
    plt.clabel(CS0, inline=1, fontsize=10)
    CS1=plt.contour(X1,Y1,Z1)
    plt.clabel(CS1, inline=1, fontsize=10)
    plt.title("Gaussian discriminat analysis")
    plt.xlabel('Feature Dimension (0)')
    plt.ylabel('Feature Dimension (1)')
    plt.show()
    

     

    展开全文
  • 多元线性回归模型检验方法

    千次阅读 2019-08-10 22:07:21
    终于找到一篇全面而又简洁的讲多元线性回归模型检验方法的文章 PDF下载地址 链接:https://pan.baidu.com/s/1UbyZcMC1VRTmlCEaX4Vybg 提取码:g481 具体内容 一、经济意义检验 经济意义检验主要检验模型参数估计量在...
  • 多元线性回归:这是一种线性回归的形式,当有两个或多个预测因子时使用。 我们将看到多个输入变量如何共同影响输出变量,同时还将了解计算与简单LR模型的不同之处。我们还将使用Python构建一个回归模型。 最后,我们...
  • 离散选择模型

    千次阅读 2019-12-12 16:22:42
    离散选择模型random utility modelrepresentative agent modelsemi-parametric choice model其他模型模型之间得关系 random utility model representative agent model semi-parametric choice model 其他模型 各...
  • 多元线性回归的模型解释、假设检验、特征选择 https://www.toutiao.com/i6830412629266137603/?tt_from=weixin&utm_campaign=client_share&wxshare_count=2&from=singlemessage&timestamp=...
  • 多元分类问题模型实现

    千次阅读 2018-06-06 10:15:29
    多元分类问题可以用多元逻辑回归和One-vs.-all(从二元到多元)两种方法解决,以scikit-learn为例:import os import numpy as np import matplotlib.pyplot as plt import pandas as pd from sklearn.linear_model...
  • 选择少量、合适的特征既可以避免过拟合,也可以增加模型解释度。这里介绍3种方法来选择特征:最优子集选择、向前或向后逐步选择、交叉验证法。 最优子集选择 这种方法的思想很简单,就是把所有的特征组合都尝试建模...
  • Stata:多元 Logit 模型详解 (mlogit)

    万次阅读 多人点赞 2020-01-06 11:13:03
    多元 Logit 模型可视为对被解释变量中各类选择行为两两配对后构成的多个二元 Logit 模型实施联合估计 ( simultaneously estimation )。模型设定具体如下: l n ( π i j π i b ) = l n ( P ( y i = j   ∣   x ...
  • 在很多书籍中谈到了共线性问题,作为多元统计中基本假设之一,却经常被违背,影响模型稳定性和统计power。在不少的论文中谈到了,国内的很多书籍往往一笔带过。因为,属于统计计算领域内容,非专业人士,也鲜有能...
  • 如何衡量多元线性回归模型优劣

    万次阅读 2014-11-13 17:11:57
    最近再做一些多元回归分析方面的分析,但对于得出的回归模型的好坏不知道如何才判断,于是查找了一下相关的教材书籍,找到了张文彤老师写的《SPSS统计分析高级教程》这本书,里面对于回归模型的优劣评价给出来了几点...
  • 实验目的:了解R语言多元线性回归模型中变量的选择和诊断分析 实验要求:对给出的数据用逐步回归的方法选择变量,并对实验结果进行诊断分析。 实验数据:1. 对给出数据进行变量选择,并进行回归诊断。 实验代码: a1...
  • 多元线性回归模型检验-续上篇

    千次阅读 2020-04-04 20:42:46
    其实上一篇讨论的多元线性回归还不是很全面,而且训练和测试集都没有分,在这里继续讨论多元线性回归模型检验的相关问题。 多元线性回归的输出变量是连续变量,输入变量中如果包含离散变量需要做哑变量或One-hot编码...
  • 多元回归模型 Y=Xβ+μY=X\beta+\muY=Xβ+μ 被解释变量的估计值与观测值的残差 e=Y−Xβ^=Xβ^+μ−X(X′X)−1X′(Xβ^+μ)=μ−X(X′X)−1μ=[I−X(X′X)−1X′]μ=Mμe=Y-X\hat\beta \\=X\hat\beta+\mu-X(X'X)^{-...
  • TensorFlow实践(5)——多元线性回归模型(一)前 言(二)数据展示(三)模型的TensorFlow实现(1)模型参数设置(2)输入数据(3)构建模型(4)定义损失函数(5)选择优化器及定义训练操作(6)创建会话进行训练...
  • 多元线性回归模型评估You’ve got a sample dataset and just finished working on a machine learning algorithm using the linear regression model. But now, you are wondering whether or not your analysis ...
  • 多元模型的交互作用与共线性

    千次阅读 2018-03-12 20:03:53
    实际上,共线性的存在是可以看作是无限接近于违背多元模型中自变量线性可加这个假设,也就是说,违背了自变量之间独立性。建立多元线性模型,就给定了自变量,X=x1+x2+x3+....xnX=x1+x2+x3+....xnX=x_{1}+x_{2}+x_{3}...
  • 文档生成模型多元贝努利vs多项式

    千次阅读 2015-05-05 15:20:55
    对比文档生成模型中的多元贝努利模型和多项式模型
  • 朴素贝叶斯模型(Naïve Bayes Models): 适用于离散分布的朴素贝叶斯模型是个概率模型、生成式模型、广泛用于...朴素贝叶斯模型有两种事件模型,分别:多元伯努利事件模型+多项式事件模型,Multi-Variate Bernou...
  • 和宏观经济数据不同,金融市场上多为高频数据,比如股票收益率序列直观的来说 ,后者要比前者“抖动”多了有漂移且随机波动的序列,在一元或多元的情况下,构建Copula函数模型和GARCH模型是最好的选择多元GARCH...
  • 多元线性回归模型的几何意义

    千次阅读 2017-06-19 09:01:45
    传统的多元线性回归模型可以用矩阵来描述。 按照OLS估计方法得出的多元线性回归的参数结果为 对于该式而言Y的估计值 其实正是n维向量Y 在n*k维矩阵(不存在向量自相关)所张成的k维空间上的正交投影。  ...
  • 基于spss的多元回归分析模型

    千次阅读 2020-06-13 15:45:20
    还是数学建模中的一个小问题,具体概念分析在百度上已经有了足够详细的描述,在此不再赘述。 我主要根据实例讲解如何通过spss进行建模,并进行模型参数的分析和验证。 链接: 多元回归分析. ...
  • 通过拟合每周汇率的双变量时间序列数据,多变量SV模型,包括波动率中的格兰杰因果关系,时变相关性,重尾误差分布,加性因子结构和乘法因子结构的说明来说明想法。 单变量随机波动率(SV)模型为AR...
  • 多元线性回归模型的F检验

    万次阅读 2017-02-13 14:03:08
    F检验 对于多元线性回归模型,在对每个回归系数进行显著性检验之前,应该对回归模型的整体做显著性检验。这就是F检验。当检验被解释变量yt与一组解释变量x1, x2 , ... , xk -1是否存在回归关系时,给出的零假设...
  • 多元线性回归模型及stata实现:总论

    千次阅读 多人点赞 2020-06-30 20:49:53
    多元线性回归方程及stata实现 一、模型 Y=β0+β1X1+β2X2+⋯+βnXn+e Y: Dependent variable(因变量、应变量、反应变量、响应变量、被解释变量等) X1、X2⋯Xn:Independent variable(自变量、解释变量、控制...
  • 线性模型(1) —— 多元线性回归

    千次阅读 2016-04-12 20:44:52
    线性模型的基本形式多元线性回归的损失函数最小二乘法求多元线性回归的参数最小二乘法和随机梯度下降的区别疑问学习和参考资料   1.线性模型的基本形式 线性模型是一种形式简单,易于建模,且可解释性很强...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,072
精华内容 18,828
关键字:

多元选择模型