R语言与机器学习学习笔记(分类算法

 2024-03-04 00:05:26  阅读 0

回归及其 MLE

当我们把解释变量看成分类变量时,比如一个公司会不会被并购,一个公司会不会上市,你能不能考上研究生

在处理这些问题时,考虑线性概率模型P(yi =1)= β0 + β1xi 显然是不合适的。 它至少有两个致命缺陷:1.概率估计

该值可能超过1,使模型失去意义; (解决这个问题并不麻烦,我们将超过1的部分记录为1,低于0的部分记录。

部分标记为0,可以求解。这个解是有一定测量历史的tobit模型) 2.假设边际效应为常数。 一般来说,

这不符合经济学常识。 考虑边际效应递减的模型(假设真实值为蓝线),您可以看到线性模型表现不佳。

但这个函数确实非常适合贴合蓝线。 所以我们可以考虑一个回归模型:

假设有N个观测样本Y1,Y2,...,YN,设P(Yi=1|Xi)=π(Xi)为给定条件Xi下得到结果Yi=1的条件概率; 同时

相同条件下得到结果Yi=0的条件概率为P(Yi=0|Xi)=1-π(Xi),因此得到观测值的概率P(Yi)=π(Xi)Yi[ 1-π(Xi)]

1-Yi 假设每个观察都是独立的。 对于回归模型,其对数似然函数为:

然后就可以求解模型的 MLE。

2.Logit 或?

虽然该函数很好地符合边际递减模型,但我们也必须知道,S 形函数不仅仅是一个函数,它绝对是一个函数。

大多数累积分布函数都是S形的。因此,考虑F-1(P)也是一个好主意(F是标准正态分布的累积分布函数)

不错的选择。像这样,对概率P做一点变换,使变换后的取值范围合理,变换后我们可以有办法

参数估计涉及广义线性模型理论中的连接函数。 在广义线性模型中,我们称之为 log(P/(1-P)) logit,

调用F-1(P)(F为标准正态分布的累积分布函数)。那么这就涉及到一个选择问题:连接函数

我应该选择logit还是? 回归认为二元变量服从伯努利分布,所以应该选择logit,从解释的角度来看,p/

(1-p)就是我们常说的优势比,也就是软件报告中出现的OR值。

但也有其合理的一面。 首先,中心极限定理告诉我们,当样本足够多时,伯努利分布近似正态; 其次,从不确定性的角度来看,我们认为我们的线性概率模型服从正态分布。 分配也比较合理。

我们看一下变换后自变量与P的关系是什么样的:

如果你真的想知道哪种方法更适合你的数据,那是没有办法的。 您可以检查您的残差是否符合

logit 函数仍然是一致函数。 当然,你无法用肉眼分辨出来,因为这两个功能非常接近。 你可以

通过拟合优度来检验传递函数的假设。 但通常情况下,我认为没有人会坚持这么认真地对待它,因为没有必要。但有一件事是

需要注意的是,logit 模型的尾部比模型更粗,这也是经济学论文中经常使用 logit 的原因。

我们以虹膜数据中的两类数据分类为例,看看这两种分类方法有什么区别。

47 3

3 47

对数。

47 3

3 47

从上图和对比表可以看出,两者并没有太大的区别。

3.多项式logit和阶logit

二项式分类模型的自然扩展是多项式分类模型。

我们借鉴了神经网络中提到的XOR模型,包括:

根据上述方法,给定一个输入向量x,获得最大hθ(x)的类就是x所属的类。

选择最大的 hθ(x) 很容易理解:在类别选择问题中,无论选择什么类别,每个类别对于做出选择的经济个体都有或多或少的效用(没有效用的类别当然不会被考虑),一个类别必须脱颖而出,因为它产生最高的效用。

我们将多项式 Logit 模型的数学表达式描述如下:

假设对于第 i 个观测值,因变量 Yi 有 M 个值:1, 2,...,M,自变量为 Xi,则多项 Logit 模型为:

与回归的似然估计类似,我们可以很容易地写出多项式logit的对数似然函数

虽然多项式Lo​​git模型很容易使用,但是从上面的描述可以看出,多项式Lo​​git模型的最大限制是每个类别必须是

因此,可供选择的类别中,不应出现主类和次类混杂的情况。例如,在研究旅游交通时

选择时,交通类型大致可分为航空、火车、公交、私家车四类。 但如果将航空类别再细分为三个航空公司类别,

如果将公司细分为三类,得到总共六类,则多项logit模型不适用,因为航空公司、火车、公交、自用车都

大类属于同一级别,而航空公司对小类有明显区分,不应混用。 在这个例子中,

区分主要类别和次要类别很容易,但在其他研究中,如果不同级别的类别不小心混合在一起,可能就不那么容易了。

,那么多项式Lo​​git模型得到的经验结果就会有误差。

对于分类模型,我们也会遇到被解释变量中存在分类变量的情况。 对于连续变量解释离散变量,并且解释的离散变量是序贯的(这是与多项logit最大的区别)的情况,我们需要考虑序logit模型。

其数学模型描述如下:

其中,F(.)表示累积分布函数。 当F表示正态分布的分布函数时,对应的阶数为; F代表

分发时,更改对应于顺序 logit。

逻辑回归值域_逻辑回归 or值_逻辑回归值的大小

与分布类似,我们可以轻松编写其对数似然函数:

4. 假人

在回归中,我们经常遇到解释变量是分类变量的情况,比如收入:高、中、低; 地区:北京、上海

、广州等。这就涉及到一个关于分类变量的问题:我们是否应该将分类变量设置为虚拟变量?

这个问题的答案在线性模型中是显而易见的,必须要做!!! 如果我们不设置虚拟变量,而只是赋值:

北京=1,上海=2,广州=3,即我们将自变量视为连续数值变量,但这只是一个代号,并不代表地区之间

存在大小顺序关系,并不意味着被解释变量(响应变量)会按此顺序线性增加或减少。 即使对于有序的多类别变量,

例如,如果将家庭收入分为高、中、低三类,则无法准确衡量各类别之间的差距。 基于编码值的分析实际上是一个强制性规则。

是等距的,显然会造成较大的误差。

但在回归中,由于logit(p)变化的特殊性,为了减少解释序数变量时的自由度(即解释变量的数量),我们常常对序数变量(如家庭收入)进行划分分为高、中、低)被视为一个连续数值变量,经济上的解释可以是XX每增加一级,相应的概率就会增加(delta(XX))(表达式还是很复杂的不会被输入)。 当然,减少变量的数量是以牺牲预测精度为代价的。 毕竟数据处理是一门艺术而不是一门技术,如何选择还要具体问题具体分析。 当然,非序数分类变量不得被视为数值变量。

5.广义线性模型的R实现

R语言提供了广义线性模型的拟合函数glm(),其调用格式如下:

glm(, = , 数据,, ,

不,开始= NULL,,,,,

=列表(...),模型= TRUE,=“glm.fit”,

x = 假,y = 真,= 空,...)

参数说明:

:回归形式,与lm()函数的参数用法一致

:设置广义线性模型连接函数的正则分布族。 glm() 提供正态、指数、伽玛、逆高斯和二项式

布。 我们的回归使用二项式分布族。 家族默认的连接函数是logit,可以设置为。

数据:数据集

用于 iris 示例的 R 代码:

逻辑拟合

=(链接='logit'),

数据 = 虹膜[51:150,])

对数。 0、''、'')

表(虹膜[51:150,5],logit。)

。合身

=(链接=''),

数据 = 虹膜[51:150,])

。 0、''、'')

表(虹膜[51:150,5],.)

该包提供多项 Logit 的模型拟合函数:

(, 数据, , ,na., 开始 = NULL,

替代。 = 空,= 空,

嵌套 = NULL,un.nest.el = FALSE,= FALSE,

= FALSE,rpar = NULL,= FALSE,

R = 40,= 假,= 空,

.nb = NULL,面板 = FALSE,= TRUE,

种子 = 10, ...)

.data(数据, , shape = c("宽","长"), = NULL,

sep =“。”,alt.var = NULL,chid.var = NULL,alt。 = NULL,id.var = NULL, = NULL, drop.index = FALSE,

= 假,...)

参数说明:

:提供条件logit、多项logit、混合logit多种模型。 多项 Logit 的估计模型应写为:因变量 ~ 0 | 自变量,如:mode ~ 0 |

data:使用.data函数使数据结构满足功能要求。

:确定分类变量是什么

形状:如果每一行都是一个观察值,我们选择宽。 如果每一行代表一个选择,那么我们应该选择 long。

alt.var:对于形状较长的数据,需要指示所有选择名称。

宽选的数据示例:

选择长的数据示例:

以数据为例来说明如何使用。

逻辑回归 or值_逻辑回归值域_逻辑回归值的大小

()

数据(“”,=“”)

((模式 ~ 0 | ,数据 = 鱼))

这个输出的结果与nnet包中的()函数一致。 由于该包可以做更多的logit模型,因此这里不包括nnet。

该包的介绍可以参考《R中基于书中的回归方法总结》一文。

MASS 包提供了用于 logit 或回归的 polr() 函数。 用法如下:

polr(, 数据, , 开始, ..., , na.,

= NULL,Hess = FALSE,模型 = TRUE,

= c("","","",""))

参数说明:

:回归形式,与lm()函数的参数用法一致

数据:数据集

:默认为order logit,选择后变为order model。

以data为例说明函数用法:

房子.plr

房子.plr

(房子.plr,= 3)

这些结果非常直观且易于解释,因此我们在这里省略所有输出结果。

我们来看一下手写数字的情况:

最后,我们回到手写数字的原始情况,并尝试使用多项式 Logit 重做此情况。 (本案例的描述和数据请参考“kNN算法”章节)

特征的选择可以在“神经网络”一章中找到。

由于手写数字的特征选择很容易导致回归系数矩阵的秩降低,因此我们使用nnet包的()函数代替()。

运行以下代码:

setwd("D:/R/数据//")

名字

数据

for(i in 1:(名称))

(数据[i],as.(read.fwf(名称[i],=rep(1,32))))

标签

for(i in 1:(名称)){

[一世,1]

[一世,2]

[一世,3]

[一世,4]

[一世,5]

[一世,6]

[一世,7]

[一世,8]

[一世,9]

[一世,10]

[一世,11]

[一世,12]

[一世,13]

[一世,14]

[一世,15]

[一世,16]

[一世,17]

[一世,18]

[我,19]

[一世,20]

[一世,21]

[一世,22]

[一世,23]

[一世,24]

[一世,25]

数据1

#降级时不可用

#

#m1

(网络)

米1

预测

表(预测值,标签)

sum(diag(表(pred,标签)))/(名称)

setwd("D:/R/数据//")

姓名

数据1

for(i in 1:(姓名))

(data1[i],as.(read.fwf(name[i],=rep(1,32))))

for(i in 1:(name)){

[一世,1]

[一世,2]

[一世,3]

[一世,4]

[一世,5]

[一世,6]

[一世,7]

[一世,8]

[一世,9]

[一世,10]

[一世,11]

[一世,12]

[一世,13]

[一世,14]

[一世,15]

[一世,16]

[一世,17]

[一世,18]

[我,19]

[一世,20]

[一世,21]

[一世,22]

[一世,23]

[一世,24]

[一世,25]

数据2

预测1

表(pred1,)

sum(diag(表(pred1,)))/(名称)

排序后输出结果如下:(左边是训练集,右边是测试集)

Tips:=p/1-p 相对风险指数 在模型中,P是事件A发生的概率,1-p是事件A不发生的概率,所以p/1-p是发生的相对风险和不发生。 OR值等于1表示该因素对事件A的发生没有影响; OR 值大于 1 表示事件 A 发生的可能性大于不发生的可能性; OR 值小于 1 意味着事件 A 不发生的可能性大于发生的可能性。 可能性。

R 中的 Logit 的 Yves:

标签: 模型 变量 函数

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码