精华内容
下载资源
问答
  • 多元线性回归模型检验-续上篇

    千次阅读 2020-04-04 20:42:46
    其实上一篇讨论的多元线性回归还不是很全面,而且训练和测试集都没有分,在这里继续讨论多元线性回归模型检验的相关问题。 多元线性回归的输出变量是连续变量,输入变量中如果包含离散变量需要做哑变量或One-hot编码...

    https://editor.csdn.net/md/?articleId=105137945
    其实上一篇讨论的多元线性回归还不是很全面,而且训练和测试集都没有分,在这里继续讨论多元线性回归模型检验的相关问题。

    只要有P值的出现,样本量不超过5000,比如线性回归和逻辑回归;搞清楚算法背后的逻辑才是比较重要的。

    多元线性回归需要关注一些什么点?R2和模型稳定性,也就是那些β是不是稳定的,检验模型是不是稳定需要对模型进行诊断。

    多元线性回归的输出变量是连续变量,输入变量中如果包含离散变量需要做哑变量或One-hot编码,连续变量可以直接用来建模。

    多元线性回归假设解释

    多元线性回归需要满足的假设其实是比较强的,但是在机器学习或者是数据挖掘领域,后3条针对误差项(其实就是残差)的假设基本上被忽略了。
    第1条: 看因变量y和自变量x之间的关系,可以通过绘制散点图,确定是线性、二次函数还是指数函数关系,根据这个来建立x和y之间的关系。后面的神经网络和SVM等模型就是为了方便找到x和y之间的关系。
    第2条: 解释变量和随机扰动项不存在线性关系。我们想象一下,如果他们之间存在线性关系的话,是不是会导致回归系数估计的不准确啊,举个例子解释变量y是收入,x是受教育程度,并假设回归方程是 y = 0.5x + e,设想如果扰动项里面包含父母收入,实际上父母收入会影响孩子的收入y,那么回归系数估计值0.5是不是偏高了啊。那怎么解决这个问题呢,那就多纳入一些变量来参与建模吧,这也是多元线性回归存在的必要性,同时这也引出了一个变量筛选的问题。
    第3条:解释变量之间不存在线性关系(或强相关)。在建模时,我们不但需要估计回归系数的均值,还需要估计回归系数的标准差:S(β)= S(e)/ |x|,那么如果解释变量x之间存在线性关系的话,分母趋向于0了,回归系数标准差趋于无穷大,所以多重共线性问题是需要去避免的。

    多元线性回归诊断方法

    如果扰动项是右偏,那么残差图肯定是异方差分布,取对数即可,所以下图中假设5和假设4可以说是一致的。
    在这里插入图片描述

    多元线性回归模型的诊断

    (1)残差分析:实际上当残差不包含任何信息的时候是最好的,如果还包含一些信息,需要把这个信息提取出来。残差图的纵坐标是残差,横坐标可以是各个解释变量x,实际上在做单变量分析,解释变量x被解释变量y做相关性分析的时候就知道了;比如某个解释变量x和被解释变量y都是右偏,那么残差图肯定是异方差,同时取对数重新建模;如果某个解释变量x和被解释变量y存在抛物线关系,那么加入二次项重新进行建模;自相关一般在时间序列数据中比较常见。
    在这里插入图片描述
    在这里插入图片描述
    (2)强影响点分析
    为什么要做强影响点分析???因为有了强影响点的存在之后,会把本来没有关系的数据带出关系来,而且这个关系特别不稳定。比如下图,本来数据点之间没有什么关系,但是因为强影响点的存在之后,给数据带出来了这么一个线性关系出来,但这个关系是非常不稳定的,不具有大众性。
    在这里插入图片描述
    怎么解决强影响点分析问题???学生化残差(只做一次)。

    |SR| = (残差 - 残差均值) / 残差标准差。
    |SR| > 2,剔除掉满足条件的记录(几百个样本)
    |SR| > 3,剔除掉满足条件的记录(几千个样本)

    (3)共线性问题
    可以参考下面的链接:https://www.sohu.com/a/326904117_100103806
    共线性的判别指标:膨胀系数VIF、相关系数
    共线性的解决方法:根据VIF和相关系数手动剔除变量、逐步回归法、岭回归。

    展开全文
  • 在一般多元线性模型中就基于岭估计的预测量与最优线性无偏预测量的最优性判别问题进行了讨论,得到了基于岭估计的预测量在矩阵迹意义下优于最优线性无偏预测量的充要条件。
  • 一种多元线性回归模型在医学中的应用,徐云龙,李剑英,本文是关于通过化验人体内各种元素含量来判别肾炎病人与健康人的方法研究的问题。首先把肾炎患者和健康人各个元素含量的数据信息
  • 常用的三个线性模型的原理及python实现——线性回归(Linear Regression)、对数几率回归(Logostic Regression)、线性判别分析(Linear Discriminant)。 这可能会是对线性模型介绍最全面的博客一、线性模型 ...

    常用的三个线性模型的原理及python实现——线性回归(Linear Regression)、对数几率回归(Logostic Regression)、线性判别分析(Linear Discriminant)。 这可能会是对线性模型介绍最全面的博客

    一、线性模型 (Linear Model)

    对于一个具有d个属性的对象来说,我们可以用下面这一组向量描述

    这里写图片描述

    向量中的每个值都是对象一个属性的值,由上可以看出,线性模型是一个通过属性的线性组合来进行对象判定的函数,即

    这里写图片描述

    用向量的形式可以写成

    这里写图片描述

    其中

    这里写图片描述

    当求得wb后,线性模型就得以确定。线性模型是最简单也是最常用的模型之一,同时,很多更为强大的非线性模型也是由线性模型发展来的,所以,了解掌握线性模型十分必要

    二、线性回归 (Linear Regression)

    线性回归是指,模型试图学得

    这里写图片描述

    求解模型的关键在于,如何求得wb,解决问题的落点在于,如何衡量f(x)y 差距,通常我们使用均方误差来衡量这种差距的大小,即

    这里写图片描述

    均方差有非常良好的几何意义,它对应了常用的欧几里得距离即“欧式距离”。基于均方误差最小化的原理来求解模型的方法叫做“最小二乘法”(least square method),在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线上的欧式距离之和最小,现令

    这里写图片描述

    将其对wb分别求导,并令其导数为0,可得

    这里写图片描述

    对于更一般的情形,若样本由d个属性描述,此时我们应当求解

    这里写图片描述

    这就是我们通常所说的多元线性回归(multivariate linear regression)
    现在利用最小二乘法对w和b进行估计。将wb统一记为

    这里写图片描述

    同时也把数据集D表示为一个 *m x (d + 1)*的矩阵 X

    这里写图片描述

    将标记也写成向量形式

    这里写图片描述

    此时的求解方程可以写为

    这里写图片描述

    用上式对w进行求导,当X 的转置与其相乘为满秩矩阵或者正定矩阵时,令导数为0可得

    这里写图片描述

    最终得到的多元线性回归模型如下

    这里写图片描述

    基于上述理论,其python源码如下:

    
    '''
    1.using least square method figure out linear regression
    '''
    import numpy as np
    import matplotlib.pyplot as plt
    
    def linear_regression(x,y):     
        def preprocess(x):
            X = np.mat(x)
            b = np.mat([1]*len(x))
            X = np.hstack((X,b.T))
            return X
    
        def cal_w(x,y):
            X = preprocess(x)
            Y = np.mat(y).T
            return (X.T*X).I*X.T*Y     
        
        return preprocess(x)*cal_w(x,y),cal_w(x,y).tolist()
    

    其测试代码如下(注本文所有的代码原为一个文件,运行时,请完整复制全部代码)

    
    #visiable and output test
    x = [[0.697,0.460],[0.774,0.376],[0.634,0.264],[0.608,0.318],[0.556,0.215],[0.403,0.237],[0.481,0.149],
         [0.437,0.211],[0.666,0.091],[0.243,0.267],[0.245,0.057],[0.343,0.099],[0.639,0.161],[0.657,0.198],
         [0.360,0.370],[0.593,0.042],[0.719,0.103]]
    y = [1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0]
    yy,w = linear_regression(x,y)
    i,x1,x2 = 0,[],[]
    while i < len(x):
        x1.append(x[i][0])
        x2.append(x[i][1])
        i += 1
    
    i = 0
    plt.figure(1)
    plt.subplot(121)
    plt.title('linear regression')
    while i < len(x1):
        if y[i] == 0:
            plt.scatter(x1[i],x2[i],color = 'r')
        elif y[i] == 1:
            plt.scatter(x1[i],x2[i],color = 'g')
        i += 1
    a = -(w[2][0]/w[1][0])
    b = -(w[0][0]+w[2][0])/w[1][0]
    plt.plot([0,1],[a,b])
    

    三、对数几率回归(Logistic Regression)

    对数几率回归实质上使用Sigmoid函数对线性回归的结果进行了一次非线形的转换,Sigmoid函数如下

    这里写图片描述

    将线性模型带入可得

    这里写图片描述

    该式实际上是在用线性回归模型的预测结果去逼近真实标记的对数几率,因此,其对应的模型称为“对数几率回归”(logistic regression),将上式取常用对数,可转化为

    这里写图片描述

    现在我们开始对wb进行估计,将上式中的y视为类后验概率估计

    这里写图片描述

    则可以将模型转化为

    这里写图片描述

    显然有

    这里写图片描述
    这里写图片描述

    到这里,我们便可以使用“极大似然法”(maximum likelihood method)来估计wb,给定数据集如下

    这里写图片描述

    对率回归模型最大化“对数似然”,记为式 1

    这里写图片描述

    即令每个样本属于其真实标记的概率越大越好,现令

    这里写图片描述

    再令

    这里写图片描述

    此时,便可将之前式1里的似然项改写为

    这里写图片描述

    由此可知,式1等于

    这里写图片描述

    这是一个高阶可导连续凸函数,接下来给出牛顿法的推导公式,首先为
    这里写图片描述设置任意值
    设定允许误差,再代入下式循环求解求解

    这里写图片描述

    其中

    这里写图片描述
    这里写图片描述

    基于上述理论,其python源码如下:

    '''
    2.Newton method figure out logistic regression
    '''
    
    def logistic_regression(x,y,error,n):
        def preprocess(x,y):
            X = np.mat(x)
            b = np.mat([1]*len(x))
            X = np.hstack((X,b.T))
            w = [1]*(len(x[0])+1)
            W = np.mat(w).T
            Y = y
            return X,W,Y   
        
        def func_p(X,W):
            a = (X*W).tolist()
            b = float(a[0][0])
            temp = np.exp(b)/(1+np.exp(b))
            return temp
        
        def dfunc(X,Y,W):
            i,num,sum1 = 0,len(X),0
            while i < num:
                temp = Y[i] - func_p(X[i],W)
                sum1 += X[i]*temp
                i += 1
            return sum1*(-1)
        
        def d2func(X,Y,W):
            i,num,sum1 = 0,len(X),0
            while i < num:         
                temp = func_p(X[i],W)*(1 - func_p(X[i],W))
                sum1 += X[i]*(X[i].T)*temp
                i += 1
            sum1 = sum1.tolist()
            return float(sum1[0][0])
    
        def Newton(x,y,error,n):
            X,W,Y = preprocess(x,y)
            i = 1
            while i < n:
                d1 = dfunc(X,Y,W)
                a = (d1*d1.T).tolist()
                a = float(a[0][0])
                if a < error:
                    return W
                    break
                temp = dfunc(X,Y,W)
                W = W - temp.T*(d2func(X,Y,W)**(-1))
                i += 1
            if i == n:
                return 'error'
        
        w = Newton(x,y,error,n)
        X,W,Y = preprocess(x,y)
        yy = (X*w).tolist()
        w = w.tolist()
        return w,yy
    
    

    测试代码如下

    
    #visiable and output test           
    w,yy = logistic_regression(x,y,0.0001,1000)
    
    i,x1,x2,z = 0,[],[],[]
    while i < len(x):
        x1.append(x[i][0])
        x2.append(x[i][1])
        z.append(yy[i][0])
        i += 1
    
    i = 0
    
    plt.subplot(122)
    plt.title('logistic regression')
    while i < len(x1):
        if y[i] == 0:
            plt.scatter(x1[i],x2[i],color = 'r')
        elif y[i] == 1:
            plt.scatter(x1[i],x2[i],color = 'g')
        i += 1
    a = -(w[2][0]/w[1][0])
    b = -(w[0][0]+w[2][0])/w[1][0]
    plt.plot([0,1],[a,b])
    

    四、线性判别分析(Linear Discriminant Analysis)

    线性判别分析是一种经典的线形学习方法,最早由费舍尔(Fisher)在二分类问题上提出,所以也称为“Fisher判别分析”
    其思想非常朴素:给定训练样例集,设法将样例点投影到一条直线上,使得同类样例的投影点尽可能接近、异类样例的投影点尽可能远离;在对测试样例进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别。这里只讲述二分类问题的原理和求解,给定数据集

    这里写图片描述

    再分别令

    这里写图片描述

    表示i(等于0或1)类示例的集合、均值向量、协方差矩阵,将数据投影到直线w上,则两类样本的中心在直线上的投影分别为

    这里写图片描述

    若将所有样本点都投影到直线上,则两类样本的协方差分别为

    这里写图片描述

    想要使同类样例的投影点尽可能接近,可以让同类样例的协方差尽可能小,即

    这里写图片描述

    尽可能小;同时,也想要让异类样例的投影点尽可能远离,可以让类中心之间的距离尽可能大,即

    这里写图片描述

    尽可能的大,则可以定义最大化目标

    这里写图片描述

    定义类内散度矩阵(within class scatter matrix)

    这里写图片描述

    以及类间散度矩阵(between class)

    这里写图片描述

    可将最大化目标重写为

    这里写图片描述

    由拉格朗日乘法子可从上式求出

    这里写图片描述

    由此可解出二分类问题的LDA模型,基于上述理论,其python源码如下:

    '''
    3.Linear Discriminant Analysis for binary classification problem
    '''
    
    def LDA(x,y):
        def preprocess(x,y):
            i = 0
            X0,X1 = [],[]
            while i < len(y):
                if y[i] == 0:
                    X0.append(x[i])
                elif y[i] == 1:
                    X1.append(x[i])
                i += 1
            return X0,X1
        
        def average(X):
            X = np.mat(X)
            i = 1
            while i < len(X):
                X[0] = X[0] + X[i]
                i += 1
            res = X[0]/i
            return res
        
        def Sw(X0,X1,u0,u1):
            X_0 = np.mat(X0)
            X_1 = np.mat(X1)
            Sw0,i = 0,0
            temp0 = (X_0 - u0).T*((X_0 - u0))
    #        while i < len(temp0):
    #            Sw0 += float(temp0[i,i])
    #            i += 1
    #        Sw1,i = 0,0
            temp1 = (X_1 - u1).T*((X_1 - u1))
    #        while i < len(temp1):
    #            Sw1 += float(temp1[i,i])
    #            i += 1
    #        return Sw0+Sw1
            return temp0 + temp1
           
        X0,X1 = preprocess(x,y)
        u0,u1 = average(X0),average(X1)
    
        SW = Sw(X0,X1,u0,u1)
        return (SW**(-1)*numpy.mat(u0-u1).T).tolist()   
    
    #visiable and output test           
    W = LDA(x,y)
    
    i,x1,x2,z = 0,[],[],[]
    while i < len(x):
        x1.append(x[i][0])
        x2.append(x[i][1])
        i += 1
    i = 0
    plt.figure(2)
    plt.subplot(121)
    plt.title('LDA')
    while i < len(x1):
        if y[i] == 0:
            plt.scatter(x1[i],x2[i],color = 'r')
        elif y[i] == 1:
            plt.scatter(x1[i],x2[i],color = 'g')
        i += 1
    print(W)
    
    plt.plot([0,-W[0][0]],[0,-W[1][0]])
    

    五、三个模型结果对比图

    完整代码地址:https://github.com/LiangjunFeng/Machine-Learning/blob/master/1.linear_model.py

    这里写图片描述

    六、更多资源下载

    微信搜索“老和山算法指南”获取更多下载链接与技术交流群
    在这里插入图片描述
    有问题可以私信博主,点赞关注的一般都会回复,一起努力,谢谢支持。

    展开全文
  • 机器学习之LDA线性判别分析模型 # -*- coding: utf-8 -*- """ Created on Wed Nov 21 21:03:14 2018 @author: muli """ import matplotlib.pyplot as plt import numpy as np from...
    • 机器学习之LDA线性判别分析模型
    # -*- coding: utf-8 -*-
    """
    Created on Wed Nov 21 21:03:14 2018
    
    @author: muli
    """
    
    import matplotlib.pyplot as plt
    import numpy as np
    from sklearn import datasets, discriminant_analysis,cross_validation
    
    
    def load_data():
        '''
        加载用于分类问题的数据集
    
        :return: 一个元组,用于分类问题。元组元素依次为:训练样本集、测试样本集、训练样本集对应的标记、测试样本集对应的标记
        '''
        # 使用 scikit-learn 自带的 iris 数据集
        iris=datasets.load_iris() 
        X_train=iris.data
        y_train=iris.target
        # 分层采样拆分成训练集和测试集,测试集大小为原始数据集大小的 1/4
        return cross_validation.train_test_split(X_train, y_train,test_size=0.25,
    		random_state=0,stratify=y_train)
    
    
    def test_LinearDiscriminantAnalysis(*data):
        '''
        测试 LinearDiscriminantAnalysis 的用法
    
        param data: 可变参数。它是一个元组,这里要求其元素依次为:训练样本集、测试样本集、训练样本的标记、测试样本的标记
        return:  None
        '''
        X_train,X_test,y_train,y_test=data
        # 加载LDA线性判别分析模型
        lda = discriminant_analysis.LinearDiscriminantAnalysis()
        # 训练模型
        lda.fit(X_train, y_train)
        # 返回 W值 和 b值
        print('Coefficients:%s, intercept %s'%(lda.coef_,lda.intercept_))
        # 返回预测的准确率
        print('Score: %.2f' % lda.score(X_test, y_test))
    
    
    def plot_LDA(converted_X,y):
        '''
        绘制经过 LDA 转换后的数据
    
        :param converted_X: 经过 LDA转换后的样本集
        :param y: 样本集的标记
        :return:  None
        '''
        from mpl_toolkits.mplot3d import Axes3D
        fig=plt.figure()
        ax=Axes3D(fig)
        colors='rgb'
        markers='o*s'
        for target,color,marker in zip([0,1,2],colors,markers):
            pos=(y==target).ravel()
            X=converted_X[pos,:]
            ax.scatter(X[:,0], X[:,1], X[:,2],color=color,marker=marker,
    			label="Label %d"%target)
        ax.legend(loc="best")
        fig.suptitle("Iris After LDA")
        plt.show()
    
    
    def run_plot_LDA():
        '''
        执行 plot_LDA 。
        其中数据集来自于 load_data() 函数
    
        :return: None
        '''
        X_train,X_test,y_train,y_test=load_data()
        X=np.vstack((X_train,X_test))
        Y=np.vstack((y_train.reshape(y_train.size,1),y_test.reshape(y_test.size,1)))
        lda = discriminant_analysis.LinearDiscriminantAnalysis()
        lda.fit(X, Y)
        converted_X=np.dot(X,np.transpose(lda.coef_))+lda.intercept_
        plot_LDA(converted_X,Y)
    
    
    def test_LinearDiscriminantAnalysis_solver(*data):
        '''
        测试 LinearDiscriminantAnalysis 的预测性能随 solver 参数的影响
    
        :param data: 可变参数。它是一个元组,这里要求其元素依次为:训练样本集、测试样本集、训练样本的标记、测试样本的标记
        :return:  None
        '''
        X_train,X_test,y_train,y_test=data
        solvers=['svd','lsqr','eigen']
        for solver in solvers:
            if(solver=='svd'):
                lda = discriminant_analysis.LinearDiscriminantAnalysis(solver=solver)
            else:
                lda = discriminant_analysis.LinearDiscriminantAnalysis(solver=solver,
    			shrinkage=None)
            lda.fit(X_train, y_train)
            print('Score at solver=%s: %.2f' %(solver, lda.score(X_test, y_test)))
    
    
    def test_LinearDiscriminantAnalysis_shrinkage(*data):
        '''
        测试  LinearDiscriminantAnalysis 的预测性能随 shrinkage 参数的影响
    
        :param data: 可变参数。它是一个元组,这里要求其元素依次为:训练样本集、测试样本集、训练样本的标记、测试样本的标记
        :return:  None
        '''
        X_train,X_test,y_train,y_test=data
        shrinkages=np.linspace(0.0,1.0,num=20)
        scores=[]
        for shrinkage in shrinkages:
            lda = discriminant_analysis.LinearDiscriminantAnalysis(solver='lsqr',
    			shrinkage=shrinkage)
            lda.fit(X_train, y_train)
            scores.append(lda.score(X_test, y_test))
        ## 绘图
        fig=plt.figure()
        ax=fig.add_subplot(1,1,1)
        ax.plot(shrinkages,scores)
        ax.set_xlabel(r"shrinkage")
        ax.set_ylabel(r"score")
        ax.set_ylim(0,1.05)
        ax.set_title("LinearDiscriminantAnalysis")
        plt.show()
    
    
    if __name__=='__main__':
        X_train,X_test,y_train,y_test=load_data() # 产生用于分类的数据集
        # 调用 test_LinearDiscriminantAnalysis
    #    test_LinearDiscriminantAnalysis(X_train,X_test,y_train,y_test)
        # 调用 run_plot_LDA
    #    run_plot_LDA() 
        # 调用 test_LinearDiscriminantAnalysis_solver
    #    test_LinearDiscriminantAnalysis_solver(X_train,X_test,y_train,y_test) 
        # 调用 test_LinearDiscriminantAnalysis_shrinkage
        test_LinearDiscriminantAnalysis_shrinkage(X_train,X_test,y_train,y_test) 
    
    展开全文
  • 线性判别分析(Linear Discriminant Analysis,LDA) 笔记部分 二分类LDA模型 原理 给定训练样法将样例投影到一条直线上,使得: 同类样例的投影点尽可能接近; 异类样例投影点尽可能能远离。 在对新样本进行分类时...

    线性判别分析(Linear Discriminant Analysis,LDA)

    笔记部分
    在这里插入图片描述


    二分类LDA模型

    原理
    给定训练样法将样例投影到一条直线上,使得:

    • 同类样例的投影点尽可能接近;
    • 异类样例投影点尽可能能远离。
    • 在对新样本进行分类时,将其投影到该直线上,再根据投点的位置来确定样本的类别。

    如下图所示:
    在这里插入图片描述

    对应到机器学习三要素中分别为:

    • 模型: f ( x ) = w T x f(\mathbf x)=\mathbf w^T\mathbf x f(x)=wTx

    • 策略:经投影的类内方差尽可能小;经投影的异类样本中心尽可能远。

    • 算法:拉格朗日乘子法求解 w \mathbf w w的最优闭式解。

    策略——构建loss function

    经投影的类内方差尽可能小

    假设属于两类的试验样本数量分别是 m 0 m_0 m0 m 1 m_1 m1,经投影的类内方差 V a r C 0 Var_{C_0} VarC0可表示为:

    Σ 0 = 1 m 0 ∑ x ∈ X 0 ( x − μ 0 ) ( x − μ 0 ) T \mathbf \Sigma_0=\frac{1}{m_0}\sum\limits_{\mathbf x \in X_0}(\mathbf x-\mathbf μ_0)(\mathbf x-\mathbf μ_0)^T Σ0=m01xX0(xμ0)(xμ0)T表示标记为类别0的原始数据的协方差, μ 0 \mathbf μ_0 μ0为标记为类别0的原始数据的均值向量。

    同理:则此”经投影的类内方差尽可能小“策略需要:
    w T Σ 0 w + w T Σ 1 w w T Σ 0 w + w T Σ 1 w wTΣ0w+wTΣ1wwTΣ0w+wTΣ1w wTΣ0w+wTΣ1wwTΣ0w+wTΣ1w尽可能小。

    经投影的异类样本中心尽可能远

    用两类的均值表示经投影的异类样本中心,其距离平方为:
    ∣ ∣ w T μ 0 − w T μ 1 ∣ ∣ 2 ∣ ∣ w T μ 0 − w T μ 1 ∣ ∣ 2 ||wTμ0−wTμ1||2||wTμ0−wTμ1||2 wTμ0wTμ12wTμ0wTμ12
    则此”经投影的异类样本中心尽可能远“策略需要:
    可以让类中心之间的距离尽可能大,即 ∣ ∣ w T μ 0 − w T μ 1 ∣ ∣ 2 ∣ ∣ w T μ 0 − w T μ 1 ∣ ∣ 2 ||wTμ0−wTμ1||2||wTμ0−wTμ1||2 wTμ0wTμ12wTμ0wTμ12尽可能大。

    二分类线性判别的loss function

    综合上述两点,由于协方差是一个矩阵,于是用将这两个值相除来得到损失函数 J J J,并最大化这个值:

    其中 S b \mathbf S_b Sb为类间散度矩阵(between-class scatter matrix), S w \mathbf S_w Sw为类间散度矩阵(within-class scatter matrix)。 J J J S b \mathbf S_b Sb S w \mathbf S_w Sw的广义瑞利商。

    由于 J J J的分子分母都是关于 w w w的二次项,因此其解与 w w w的长度无关(即使扩展或缩减了 w w w的长度也可以被约分),只与方向有关。又因为给定训练集后, S w S_w Sw为常量,因此可以将 w w w进行缩放,令分母整体固定为一个常量,即: w T S w w = 1 \mathbf w^T\mathbf S_w\mathbf w=1 wTSww=1

    则可以进一步将loss function化为:

    算法——求解参数
    拉格朗日乘子法(Lagrange multipliers)是一种寻找多元函数在一组约束下的极值的方法。通过引入拉格朗日乘子,可将有个 d d d变量与 k k k个约束条件的最优化问题转化为具有 d + k d+k d+k个变量的无约束优化问题求解。
    在这里插入图片描述
    在这里插入图片描述


    w w w S b S_b Sb相对于 S w S_w Sw的属于广义特征值 λ λ λ的特征向量。

    此时用拉格朗日乘子法求出来的极值点 w w w一定是最小值点吗?
    在这里插入图片描述

    多分类LDA

    全局散度矩阵
    m为整个数据集的样本个数, S t S_t St表示各个样本点到全部样本中心的距离和:

    优化目标
    在这里插入图片描述

    其中 W = [ w 1 ; w 2 ; … ; w N − 1 ] \mathbf W=[\mathbf w_1;\mathbf w_2;…;\mathbf w_{N-1}] W=[w1;w2;;wN1],于是可拆分成:

    即可得到 N − 1 N-1 N1 λ λ λ λ 1 ≤ λ 2 ≤ … ≤ λ N − 1 λ_1≤λ_2≤…≤λ_{N-1} λ1λ2λN1分别对应上面 N − 1 N-1 N1个等式。

    为什么W是N-1维?
    新样本必须分到一个类中,那么如果都不属于其他类就只剩下最后一个类。

    应用:分类监督降维
    若将 W \mathbf W W视为一个投影矩阵,则多分类LDA将样本投影到 N − 1 N-1 N1维空间, N − 1 N-1 N1通常远小子数据原有的属性数。可通过这个投影来减小样本点的维数,且投影过程中使用了类别信息,因此LDA也常被视为一种经典的监督降维技术。

    附录

    广义特征值

    • A , B A,B A,B n n n阶方阵,若存在数 λ λ λ,使得方程 A x = λ B x Ax=λBx Ax=λBx存在非零解,则称 λ λ λ A A A相对于 B B B的广义特征值, x x x A A A相对于 B B B的属于广义特征值 λ λ λ的特征向量。特别地,当 B = I B=I B=I(单位矩阵)时,广义特征值问题退化为标准特征值问题。

    广义瑞丽商

    在这里插入图片描述

    展开全文
  • scikit-learn机器学习(一)–多元线性回归模型 scikit-learn机器学习(二)–岭回归,Lasso回归和ElasticNet回归 scikit-learn机器学习(三)–逻辑回归和线性判别分析LDA 假设我们给定一个样本(x,y),x有n个...
  • 参考:西瓜书,葫芦书 线性回归 线性模型 逻辑回归 线性判别分析
  • 很多非线性模型是在线性模型的基础上通过引入层级结构或高维映射得到的。 权重矩阵直观表达了各个属性的重要性,因此具有良好解释性。 线性回归 1、线性回归介绍与离散属性转换为实数值 线性回归(linear ...
  • 基于matlab的各种多元统计分析模型源代码-多元线性回归MultiLineReg.rar 本人为了获得更多资源共享的权限,只好吐血奉献自己一年来收集和改写的matlab源程序,部分为原创;里面包含有主成分分析、岭回归分析、因子...
  • 线性模型 广义线性模型:Y不是... 广义线性模型:在广义线性模型中,均假定观察值y具有指数族 Logistic模型: 对数线性模型: poisson分布 一般线性模型 单因素随机区组试...
  • 目录一、线性回归算法实现:正规方程法、梯度下降法sklearn实现二、对数几率回归(逻辑回归)算法实现sklearn实现二、线性判别分析LDA算法实现 & sklearn实现 一、线性回归 算法实现:正规方程法、梯度下降法 ...
  • 本文主要是对周志华的西瓜书机器学习第三章内容线性模型的学习记录。首先给出线性模型的一般形式,然后从回归问题到二分类问题,再到多分类问题,最后是分类问题中出现的类别不平衡问题进行了阐述。回归问题分为一元...
  • 线性回归模型属于经典的统计学模型,该模型的应用场景是根据已知的变量(自变量)来预测某个连续的数值变量(因变量)。...在开始多元线性模型前介绍下一元线性模型。数学公式可以表示为:一个因变量,一个自变量。...
  • 多元统计分析之多元线性回归的R语言实现多元统计分析--multivariate statistical analysis研究客观事物中多个变量之间相互依赖的统计规律性。或从数学上说, 如果个体的观测数据能表为 P维欧几里得空间的点,那么...
  • LDA线性判别原理解析数学推导>

    千次阅读 2017-03-09 17:50:55
    一、LDA线性判别的思想 二、LDA求参过程的数学原理 三、LDA实例应用(贝叶斯角度)LDA分类思想(1)对于多维空间中的数据处理分类问题较为复杂,LDA算法将多维空间中的数据投影到一条直线上,将 d维 数据转化为 1...
  • Spark 分布式实现线性判别分析(二分类问题) 线性判别分析(LDA) 线性判别分析(linear discriminant analysis)是一种经典的线性学习方法,在二分类问题上最早由Fisher在1936年提出,亦称Fisher线性判别。其中心...
  • 线性判别分析LDA为了最优分类,我们要计算后验概率P(G|X)P(G|X)。设fk(x)设f_k(x)是类G=kG=k中XX的类条件密度,而πk\pi_k是类kk的先验概率,贝叶斯定理给出 P(G=k|X=x)=fk(x)πk∑Kl=1fl(x)πlP(G=k|X=x)={f_k(x)...
  • 模型一、线性模型(linear model)(一)线性回归1.一元线性回归1.1公式表示:f(x)=wxi+b向量形式1.2线性回归模型的好处:简单、可理解1.3线性回归模型因变量是离散变量的处理方法:如果属性是离散的,有序的,则...
  • 线性分类模型

    2018-07-07 22:04:00
    目录 线性分类模型 ... 3 概率判别模型 4 拉普拉斯逼近 5 贝叶斯逻辑斯蒂回归 线性分类模型 线性分类问题有三种解法,第一种是直接使用判别函数将特征向量关联到某个类别,第二种和第三种分...
  • 线性回归模型属于经典的统计学模型,该模型的应用场景是根据已知的变量(自变量)来预测某个连续的数值变量(因变量)。...在开始多元线性模型前介绍下一元线性模型。数学公式可以表示为:一个因变量,一个自变量。...
  • 线性判别分析(LDA)特别受欢迎,因为它既是分类器又是降维技术。二次判别分析(QDA)是LDA的变体,允许数据的非线性分离。最后,正则化判别分析(RDA)是LDA和QDA之间的折衷。 本文主要关注LDA,并探讨其在理论和...
  •  Fisher判别分析的原理可见《机器学习——数据降维——Fisher线性判别分析(LDA)》 如果现在我有一个新的观测点,那么基于这个判别准则(投影),它到底是属于第一类还是第二类? 我们知道在方向上的投影为:,...
  • 机器学习笔记 线性判别分析(中) 之前简要地介绍了一下线性判别函数的的基本性质,接下来我们进行更加详细的讨论。 文中大部分公式和图表来自 MLPP 和 PRML 我们将样本的分布用多元正态分布来近似,为了...
  • 判别模型、生成模型与贝叶斯方法

    千次阅读 2018-03-25 17:53:41
    或p(y) - 生成模型:无穷样本==》概率密度模型 = 产生模型==》提取特征,预测(求条件概率) - 判别模型:有限样本==》判别函数 = 预测模型==》提取特征,求概率大小(求联合概率)常见的判别模型线性回...
  • 线性判别分析(LDA)特别受欢迎,因为它既是分类器又是降维技术。二次判别分析(QDA)是LDA的变体,允许数据的非线性分离。最后,正则化判别分析(RDA)是LDA和QDA之间的折衷。 本文主要关注LDA,并探讨其在理论和...
  • scikit-learn机器学习(一)–多元线性回归模型 scikit-learn机器学习(二)–岭回归,Lasso回归和ElasticNet回归 scikit-learn机器学习(三)–逻辑回归和线性判别分析LDA 前面的线性回归模型是解决预测问题的,...
  • 多元线性介绍

    2019-09-08 21:55:33
    多元共线性介绍定义多元共线性的后果多元线性判别方法解决方法参考文献 定义 一些算法模型的前提假设要求自变量矩阵是满秩矩阵,每一列构成的向量组线性无关。不满足这个条件时即存在多元共线性。 多元共线性的...
  • 线性判别分析(LDA)前言单变量的LDA多变量的LDA二次判别分析(QDA) 前言 线性判别分析(linear discriminant analysis,简称LDA)是一种解决分类问题的方法。上一篇文章中讲到的逻辑斯蒂回归是处理分类问题的一个...

空空如也

空空如也

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

多元线性判别模型