广义线性模型1

article/2025/8/19 18:07:49

1.1 Generalized Linear Models[广义线性模型]

  • 线性模型[linear model],也称经典线性模型[classical linear model]或一般线型模型[general linear model,GLM]。
  • 广义线性模型[generalized linear model,GENMOD]由Nelder & Wedderburn[1972]首先提出,是一般线性模型的直接推广,它使因变量的总体均值通过一个非线性连接函数[link function]而依赖于线性预测值,同时还允许响应概率分布为指数分布族中的任何一员。许多广泛应用的统计模型均属于广义线性模型,如logistic回归模型、Probit回归模型、Poisson回归模型、负二项回归模型等。
  • 一个广义线性模型包括三个组成部分:线性成分[linear component];随机成分[random component];连接函数[link function],连接函数为一单调可微[连续且充分光滑]的函数。

解析:

[1]logistic回归[logistic regression]为概率型非线性回归模型,是研究分类观察结果与一些影响因素之间关系的一种多变量分析方法。

[2]非线性回归[non-linear regression]是在掌握大量观察数据的基础上,利用数理统计方法建立因变量与自变量之间的回归关系函数表达式[称回归方程式]。

[3]线性回归[linear regression]是利用数理统计中的回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。分析按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。

[4]回归分析中,当研究的因果关系只涉及因变量和一个自变量时,叫做一元回归分析;当研究的因果关系涉及因变量和两个或两个以上自变量时,叫做多元回归分析。

[5]回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。

[6]回归分析中,只包括一个自变量和一个因变量,且二者的关系不可用一条直线近似表示,这种回归分析称为一元非线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是非线性关系,则称为多元非线性回归分析。

总结:线性回归;非线性回归;一元回归;多元回归;一元线性回归;多元线性回归;一元非线性回归;多元非线性回归。

 

1.1.1 Ordinary Least Squares[普通最小二乘法]

解析:

[1]残差平方和[residual sum of squares]:为明确解释变量和随机误差各产生的效应是多少,统计学上把数据点与它在回归直线上相应位置的差异称为残差,把每个残差平方之后加起来 称为残差平方和,它表示随机误差效应。

[2]普通最小二乘法是最小二乘法的一个特例,最小二乘法是加权最小二乘法的一个特例。

[3]GLS[广义最小二乘法]是一种常见的消除异方差的方法,它的主要思想是为解释变量加上一个权重,从而使得加上权重后的回归方程方差是相同的。因此,在GLS方法下我们可以得到估计量的无偏和一致估计,并可以对其进行OLS[普通最小二乘法]下的t检验和F检验。

总结:最小二乘法;普通最小二乘法;加权最小二乘法;广义最小二乘法。

线性回归实现代码,如下所示:

In [1]: from sklearn import linear_modelIn [2]: clf = linear_model.LinearRegression()In [3]: clf.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
Out[3]: LinearRegression(copy_X=True, fit_intercept=True, normalize=False)In [4]: clf.coef_
Out[4]: array([ 0.5,  0.5])In [5]: clf.intercept_
Out[5]: 2.2204460492503131e-16

解析:

[1]sklearn.linear_model.LinearRegression类构造函数

class sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True)

[2]sklearn.linear_model.LinearRegression类实例的属性和方法

Examples: Linear Regression Example

print(__doc__)# Code source: Jaques Grobler
# License: BSD 3 clause# pylab提供了比较强大的画图功能
import pylab as pl
# numpy是python的科学计算库
import numpy as np
from sklearn import datasets, linear_model# Load the diabetes(糖尿病) dataset
diabetes = datasets.load_diabetes()# Use only one feature
diabetes_X = diabetes.data[:, np.newaxis]
diabetes_X_temp = diabetes_X[:, :, 2]# Split the data into training/testing sets
diabetes_X_train = diabetes_X_temp[:-20]
diabetes_X_test = diabetes_X_temp[-20:]# Split the targets into training/testing sets
diabetes_y_train = diabetes.target[:-20]
diabetes_y_test = diabetes.target[-20:]# Create linear regression object
regr = linear_model.LinearRegression()# Train the model using the training sets
regr.fit(diabetes_X_train, diabetes_y_train)# The coefficients
print('Coefficients: \n', regr.coef_)
# The mean square error(均方误差)
print("Residual sum of squares: %.2f"% np.mean((regr.predict(diabetes_X_test) - diabetes_y_test) ** 2))
# Explained variance score: 1 is perfect prediction
print('Variance score: %.2f' % regr.score(diabetes_X_test, diabetes_y_test))# Plot outputs
pl.scatter(diabetes_X_test, diabetes_y_test,  color='black')
pl.plot(diabetes_X_test, regr.predict(diabetes_X_test), color='blue',linewidth=3)pl.xticks(())
pl.yticks(())pl.show() 

输出图像,如下所示:

解析:
[1]sklearn.datasets.load_diabetes()方法

diabetes数据集,如下所示:

In [11]: diabetes
Out[11]: 
{'data': array([[ 0.03807591,  0.05068012,  0.06169621, ..., -0.00259226,0.01990842, -0.01764613],[-0.00188202, -0.04464164, -0.05147406, ..., -0.03949338,-0.06832974, -0.09220405],[ 0.08529891,  0.05068012,  0.04445121, ..., -0.00259226,0.00286377, -0.02593034],..., [ 0.04170844,  0.05068012, -0.01590626, ..., -0.01107952,-0.04687948,  0.01549073],[-0.04547248, -0.04464164,  0.03906215, ...,  0.02655962,0.04452837, -0.02593034],[-0.04547248, -0.04464164, -0.0730303 , ..., -0.03949338,-0.00421986,  0.00306441]]),'target': array([ 151.,   75.,  141.,  206.,  135.,   97.,  138.,   63.,  110.,310.,  101.,   69.,  179.,  185.,  118.,  171.,  166.,  144.,97.,  168.,   68.,   49.,   68.,  245.,  184.,  202.,  137.,85.,  131.,  283.,  129.,   59.,  341.,   87.,   65.,  102.,265.,  276.,  252.,   90.,  100.,   55.,   61.,   92.,  259.,53.,  190.,  142.,   75.,  142.,  155.,  225.,   59.,  104.,182.,  128.,   52.,   37.,  170.,  170.,   61.,  144.,   52.,...,91.,  111.,  152.,  120.,   67.,  310.,   94.,  183.,   66.,173.,   72.,   49.,   64.,   48.,  178.,  104.,  132.,  220.,   57.])}

diabetes.data和diabetes.target的shape属性,如下所示:

In [16]: diabetes.data.shape
Out[16]: (442, 10)In [17]: diabetes.target.shape
Out[17]: (442,)

[2]np.newaxis

假设y.shape是(5, 7),插入维度y[:, np.newaxis, :].shape变成了(5, 1, 7)。新增的维度里面没有元素,但运算时行为遵

照新的array的适用原则。合并array时很有用,假设x是(1, 5)的array,则x[:, np.newaxis] + x[np.newaxis, :]返回的是

一个(5, 5)的array。

[3]diabetes_X数据集及shape属性,如下所示:

In [29]: diabetes_X
Out[29]: 
array([[[ 0.03807591,  0.05068012,  0.06169621, ..., -0.00259226,0.01990842, -0.01764613]],[[-0.00188202, -0.04464164, -0.05147406, ..., -0.03949338,-0.06832974, -0.09220405]],[[ 0.08529891,  0.05068012,  0.04445121, ..., -0.00259226,0.00286377, -0.02593034]],..., [[ 0.04170844,  0.05068012, -0.01590626, ..., -0.01107952,-0.04687948,  0.01549073]],[[-0.04547248, -0.04464164,  0.03906215, ...,  0.02655962,0.04452837, -0.02593034]],[[-0.04547248, -0.04464164, -0.0730303 , ..., -0.03949338,-0.00421986,  0.00306441]]])In [30]: diabetes_X.shape
Out[30]: (442, 1, 10)

[4]diabetes_X_temp数据集及shape属性,如下所示:

In [32]: diabetes_X_temp
Out[32]: 
array([[ 0.06169621],[-0.05147406],[ 0.04445121],[-0.01159501],[-0.03638469],...,[ 0.01966154],[-0.01590626],[-0.01590626],[ 0.03906215],[-0.0730303 ]])In [33]: diabetes_X_temp.shape
Out[33]: (442, 1)

[5]diabetes_X_train和diabetes_X_test数据集及shape属性,如下所示:

In [34]: diabetes_X_train = diabetes_X_temp[:-20]In [35]: diabetes_X_train
Out[35]: 
array([[ 0.06169621],[-0.05147406],[ 0.04445121],...,[-0.02452876],[-0.0547075 ],[-0.03638469],[ 0.0164281 ]])In [36]: diabetes_X_train.shape
Out[36]: (422, 1)In [37]: diabetes_X_test = diabetes.target[-20:]In [38]: diabetes_X_test
Out[38]: 
array([ 233.,   91.,  111.,  152.,  120.,   67.,  310.,   94.,  183.,66.,  173.,   72.,   49.,   64.,   48.,  178.,  104.,  132.,220.,   57.])In [39]: diabetes_X_test.shape
Out[39]: (20,)

说明:diabetes_y_train = diabetes.target[:-20]和diabetes_y_test = diabetes.target[-20:]同理。

[6]fit()拟合函数,如下所示:

 

[7]predict(X)函数,如下所示:

说明:

  • regr.predict(diabetes_X_test),通过diabetes_X_test,根据训练好的线性模型得到预测值。
  • np.mean((regr.predict(diabetes_X_test) - diabetes_y_test) ** 2)),根据残差平方和公式,得到残差平方和的值。

[8]score(X, y)函数,如下所示:

说明:

  • the regression sum of square: 回归平方和
  • the residual sum of squares: 残差平方和

注意:regr.score(diabetes_X_test, diabetes_y_test)这个公式的物理意义不是很理解

[9]散点图

matplotlib.pyplot.scatter(x, y, s=20, c='b', marker='o', cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, hold=None, **kwargs)

说明:Make a scatter plot of x vs y, where x and y are sequence like objectsof the same lengths.

[10]直线图

matplotlib.pyplot.plot(*args, **kwargs)

说明:Plot lines and/or markers to the Axes. args is a variable length argument, allowing for multiple x, y pairs with an optional format string.

 

参考文献:
[1] 广义线性模型:http://baike.baidu.com/link?url=XYiRYdk0kOXJLFZXSPCXfdQ7fWaQ9eShtKPKJvfYlxEui4k0-sdKeyAV68t6lgRObrRVE-RsIz9ljHSX-9wzTK
[2] 线性回归:http://baike.baidu.com/link?url=V16S0aIQVBs3jjInzzjfObNUYCtVK0mv6M9qdVp2-bPMiTtXLwKkTk0t_MlROqWn

[3] matplotlib:http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.plot

[4] Python Scientific Lecture Notes: http://www.tp.umu.se/~nylen/pylect/index.html


http://chatgpt.dhexx.cn/article/Ki7LOLa5.shtml

相关文章

R之广义线性模型

R之广义线性模型 一、广义线性模型和glm()函数 结果变量是类别型的。二值变量(比如:是/否、有效/无效、活着/死亡)和多分类变量(比如差/良好/优秀)都显然不是正态分布;结果变量是计数型的。(比…

第5章 广义与一般线性模型

第1章 多元统计分析概述 第2章 多元数据的数学表达 第3章 多元数据的直观表示 第4章 多元相关与回归分析 第5章 广义与一般线性模型 5.1 模型的选择5.2 广义线性模型5.3 一般线性模型 第6章 判别分析及R使用 第7章 聚类分析及R使用 第8章 主成分分析及R使用 第9章 因子分析及…

广义线性模型

今天我来介绍一种在机器学习中应用的比较多的模型,叫做广义线性模型(GLM)。这种模型是把自变量的线性预测 函数当作因变量的估计值。在机器学习中,有很多模型都是基于广义线性模型的,比如传统的线性回归模型&#xff…

广义线性模型(Generalized Linear Model)

转载于:广义线性模型(Generalized Linear Model) - 肉鹅阿笨 - 博客园 (cnblogs.com) 1.指数分布族 我们在建模的时候,关心的目标变量Y可能服从很多种分布。像线性回归,我们会假设目标变量Y服从正态分布,而…

R|广义线性模型知识点归纳

本文分为两个部分: (1)广义线性模型的分类及其运用场景; (2) 相关R代码。需要说明的是,参考资料是上课课件,根据本人理解整理,如果有不对的地方,欢迎探讨! 目录 引言 1. 广义线性模型 (1)二…

IOS CoreData 多表查询(上)

在网上搜索了下,发现只有部分讲解CoreData关系的,但对多表之间的查询并没有相应的介绍。 因此操作自己写了个。 先创建几个表。 1、部门表:department dp_id Integer primary key dp_deptname varchar(20) //使用coredata实体创建时用…

iOS CoreData详解(五)多线程

原创blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK详解专栏,这里有很多基础的文章 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 前言:很多小的App只需要一个ManagedContext在主线程就可以了&…

CoreData在Xcode 8 中的使用

如需转载,请注明出处 在Xode8之前,CoreData的使用是非常方便的,先创建一个DataModel , ,然后创建NSManagedObject SubClass,都是一个界面上操作,非常方便,但是更新过Xcode 8后,CoreData的创建需要进行一…

CoreData

Core Data数据持久化是对SQLite的一个升级,它是ios集成的,在说Core Data之前,我们先说说在CoreData中使用的几个类。(1)NSManagedObjectModel(被管理的对象模型) 相当于实体,不过它包含 了实体间的关系(2)N…

Core Data详解

转载于:程序媛与程序猿 7.1. 什么是Core Data Core Data是一个Cocoa框架,用于为管理对象图提供基础实现,以及为多种文件格式的持久化提供支持。管理对象图包含的工作如撤销(undo)和重做(redo&#xff…

Coredata的版本升级

在开发的后期,可能因为完善和修复功能,需要对Coredata数据库表进行修改,这样就需要对CoreData进行版本升级。 比如你修改了DB字段以后,用户在旧版本上升级为新版本时会crash. 因为升级只升级了应用app,没有升级目录下的数据据db文…

在建好的项目中加入CoreData

这几天在做一个ios的小项目,项目中需要对数据进行基本的增删改查操作。于是就想用一把CoreData。但在创建项目初期,没有包含进CoreData。于是就在已建好的项目中加入CoreData。由于第一次用CoreData,各方面还不是很熟悉,在网上爬文…

CoreData的简单使用

简介 Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,我们不需要编写任何…

数据持久化(五)之CoreData

简单的说,Core Data就是可以存储到磁盘的对象图,[...]Core Data可以帮我们做很多任务作.它可以作为软件的整个模型层。它不仅仅在磁盘上存储数据,也把我们需要的数据对象读取到内存中。 ——Marcus Zarra, Core Data Core Data是Mac OS X中Cocoa API的一部分&#…

coredata 详解

原文:Core Data Overview,感谢CocoaChina翻译组帮忙校对。 Core Data可能是OS X和iOS里面最容易被误解的框架之一了,为了帮助大家理解,我们将快速的研究Core Data,让大家对它有一个初步的了解,对于想要正确…

Core Data 详解

Core Data是一个Cocoa框架,用于为管理对象图提供基础实现,以及为多种文件格式的持久化提供支持。管理对象图包含的工作如撤销(undo)和重做(redo)、有效性检查、以及保证对象关系的完整性等。对象的持久化意…

Core Data概述

昨晚熬夜看发布会(本以为屌丝终于能买得起苹果了,谁知道。。。),因为看不了视频直播,所以就正好有空就把www.objc.io最新的一篇文章翻译了一下,同时感谢CocoaChina翻译组提供校对,以下为正文: Core Data可能…

CoreData 的使用

CoreData其实就是Apple为开发者提供的便捷数据存储方式,本质是对sqlite数据库的操作,操作的数据量为中到大量。 操作数据库,还有FMDB第三方库,相比于FMDB,CoreData要更简单,更方便。 集成CoreData: 1,创…

Core Data的使用

初步看了一下Core Data这个东西,本想早一点写这篇东西的,不过各种俗事缠身,又觉得自己对于Core Data机制了解的还不够深,动笔就慢了几天。不过今天盘点一下,觉得可以说一点东西出来就先说一点吧。 Core Data到底是个什…

CoreData简单使用

苹果的CoreData框架(不限于)提供了一种数据持久化解决方案,它基于如下结构(图片来源苹果官网): 其中涉及了几个概念: NSManagedObject: 数据库中一条记录在内存的实例。 NSManagedObjectConte…