用logistic的预测概率,logistic预测模型实现
原文链接:http://tecdat.cn/p=23449原文来源:拓端数据部落微信官方账号
本文回答逻辑回归。线性回归和用R拟合评估这些模型的方法有什么区别?
逻辑回归是机器学习统计领域的一项技术。这是一种强大的统计方法,使用一个或多个解释变量来模拟二项式结果。它通过使用逻辑函数估计概率来度量分类因变量和一个或多个自变量之间的关系。这是逻辑分布。
本教程介绍了逻辑回归的简单执行。
首先,探索逻辑回归背后的理论。了解有关线性回归和逻辑回归模型之间的差异的更多信息。还要知道多指标和序数的logistic回归。其次,解决R的logistic回归问题,不仅要搜索数据集,还要利用R的强glm))函数来拟合logistic回归模型,评估结果,解决拟合问题。提示:如果你有兴趣将你的线性回归技能提高到一个新的水平,你也可以考虑参加我们的R语言课程。
回归分析:引入logistic回归是一种回归分析技术。回归分析是一组用于估计变量之间关系的统计过程。更具体地说,该技术用于模拟和分析因变量和一个或多个自变量之间的关系。回归分析有助于理解当一个变量被调整而其他变量固定时,一个变量的典型值是如何变化的。
正如我已经读到的,有各种各样的回归技术。可以通过观察自变量的个数、因变量的类型、回归线的形状来区分。
线性回归线性回归是最著名的建模技术之一。简单来说,你可以用一个线性关系来预测y的(平均)值,对x的某个值用一条直线,这条线叫“回归线”。
所以线性回归模型是y=ax b .模型假设变量y是定量的。然而,在大多数情况下,变量是定性的,或者说,是分类的。比如性别是定性的,值是男是女。
观察值可以称为分类,因为预测观察值的定性响应与观察值的类别或级别分配有关。另一方面,常见的分类方法是先预测每一类定性变量的概率,作为分类的依据。
线性回归不能预测概率。例如,如果使用线性回归对二元因子建模,生成的模型可能不会将预期的Y值限制为0和1。这就是逻辑回归发挥作用的地方,你可以得到反映事件发生概率的概率得分。
逻辑回归
逻辑回归是分类技术的一个例子,它可以预测定性反应。更具体地说,逻辑回归是对性别属于特定类别的概率进行建模。
也就是说,如果你想要对性别进行分类,其中反应性性别属于两个类别中的一个,男性或女性,你可以使用逻辑回归模型来估计该性别属于特定类别的概率。
例如,给定性别的长发的概率可以写成:
Pr (gender=femalep(其中longhair()为p) longhair))省略。)介于0和1之间。此外,可以预测任何长发值的性别。
既然x是解释变量,y是因变量,那么如何建模p(x )=pr) y=1x)和x的关系呢?线性回归模型显示这些概率是。
这种方法的问题是固定的。编码为0或1的二维系数变量可以随时进行线性拟合,原则上总是可以预测出x值的p(x) 0和其他值的p(x) 1。
为了避免这个问题,可以使用逻辑函数来建立p(x)的模型。对于x的所有值,其输出在0和1之间。
因为对数函数总是生成一条S形曲线,所以不管x的值是多少,都可以合理地预测。
上述等式也可以重建如下。
量
它被称为概率比,可以取0到之间的任何值。接近0和0的概率值分别表示p(x)的概率非常低和非常高。
根据上面的公式,取两边为对数得到。
这叫左手逻辑。在逻辑回归模型中,如果增加单位x,对数将变为0。但是,不管x的值如何,如果1为正,增加x会导致p(x)增加,如果1为负,增加x会导致p(x)减少。
系数0和1是未知的,必须根据现有的训练数据进行估计。逻辑回归可以使用最大似然和强大的统计技术。让我们看一个你的性别分类的例子。
您找到0和1的估计值,将这些估计值插入到p(x)的模型中,并为所有女性样本生成接近1的数字,为所有非女性样本生成接近0的数字。
它可以通过一个叫做似然函数的数学方程来形式化。
选择0和1的估计值来最大化似然函数。系数估算出来之后,不管是什么长发,都可以很容易的算出是女的概率。总的来说,最大似然法是一种非常好的拟合非线性模型的方法。
到目前为止,多项式逻辑回归只关注二项式逻辑回归,因为本教程将实例分类为男性或女性。多项式逻辑回归模型是二项式逻辑回归模型的简单扩展,当探索性变量有两个以上的名义(无序)类别时,可以使用多项式逻辑回归模型。
多项式逻辑回归
,探索性变量被虚拟编码成多个1/0变量。除了一个类别,所有类别都有一个变量,所以如果有M个类别,就会有M-1M-1个哑变量。每个类别的虚拟变量在其类别中的值为1,在所有其他类别中的值为0。有一个类别,参考类别,不需要自己的哑变量,因为它被所有其他为0的变量唯一标识。
然后,多元逻辑回归为每个虚拟变量估计一个单独的二元逻辑回归模型。结果是M-1M-1二元logistic回归模型。每个模型传达预测因素对该类别成功概率的影响,并与参考类别进行比较。
有序逻辑回归除了多分支逻辑回归,还有有序逻辑回归,它是二元逻辑回归的另一种扩展。有序回归用于预测具有“有序”多个类别的因变量和自变量。你已经在这种逻辑回归的名称中看到了这一点,因为“有序”意味着“类别的顺序”。
换句话说,它用于分析因变量(具有多个有序层次)与一个或多个自变量之间的关系。
例如,您正在进行客户访谈,以评估他们对我们新发布的产品的满意度。你的任务是问受访者一个问题,他们的回答从满意-满意或不满意-非常不满意不等。为了很好的总结回答,你在回答中加了一些等级,比如很不满意,不满意,中立,满意,很满意。这有助于您观察类别中的自然顺序。
用glm实现R语言中的逻辑回归。在本节中,您将学习二元逻辑回归的一个示例。你会用ISLR包解决这个问题,它会给你提供数据集。glm()函数通常用于拟合广义线性模型,也将用于拟合逻辑回归模型。
加载数据时要做的第一件事是安装并加载ISLR软件包,其中包含了您想要使用的所有数据集。
在本教程中,您将使用股票市场数据集。这个数据集显示了标准普尔500股票指数从2001年到2005年的每日收益。
探索数据。我们来探索一下。Names()对于查看数据框上的内容很有用,head()是对前几行的粗略介绍,summary()也很有用。
summary()函数为您提供了数据框中每个变量的简单摘要。可以看到成交量,收盘价,涨跌方向。你将使用“上下方向”作为因变量,因为它显示了市场自前一天以来是上涨还是下跌。
数据可视化可能是总结和理解数据的最快和最有用的方法。你将从独自探索数字变量开始。
直方图提供了一个数字变量的直方图,它被分成几个部分,它的高度显示了属于每个部分的实例的数量。它们对于获取属性的分布特征非常有用。
for(i in 1:8)hist(Smarket[,i]
这是极难看到的,但大多数变量显示的是bzdbq或double bzdbq的分布。
你可以用盒图和盒须图以不同的方式观察数据的分布。方框包括中间50%的数据,线表示中位数,图中的须线表示数据的合理范围。晶须线以外的任何点都是异常值。
对于(1:8的I)箱线图(Smarket[,i]
如您所见,Lags和Today的范围相似。此外,没有异常值的迹象。
缺失数据对建模影响很大。因此,您可以使用缺失图来快速了解数据集中缺失数据的数量。x轴显示属性,y轴显示实例。水平线表示实例的缺失数据,垂直块表示属性的缺失数据。
mis( col=c(蓝色,红色)
这个数据集中没有缺失数据!
让我们开始计算每对数值变量之间的相关性。这些成对的相关性可以画在相关矩阵图中,以了解哪些变量一起变化。
corrplot(相关性,方法=circle )
使用点符号,蓝色代表正相关,红色代表负相关。点越大,相关性越大。你可以看到矩阵是对称的,对角线是完美的正相关,因为它显示了每个变量与自身的相关性。然而,没有一个变量是相互关联的。
我们来做一个资料图。有一个pair()函数可以将Smarket中的变量绘制成散点图矩阵。在这种情况下,“上下方向”,你的二元因变量,是颜色指标。
这里好像没有联系。这种变量来自于变量今天的收益,所以涨跌是分的。
让我们来看看按方向值分解的每个变量的密度分布。和上面的散点图矩阵一样,按方向画的密度图可以帮助你看到上升和下降的方向。它也有助于了解变量方向的重叠。
绘图(x=x,y=y,绘图=“密度”,刻度=刻度)
正如你所看到的,所有这些变量的方向值都是重叠的,这意味着很难只用一两个变量来预测上涨或下跌。
建立Logistic回归模型。现在调用glm.fit()函数。传递给这个函数的第一个参数是一个R公式。在这种情况下,公式表明方向是因变量,而滞后和体积变量是预测变量。正如你在简介中看到的,glm通常用于拟合广义线性模型。
但是,在这种情况下,你需要明确你想要拟合一个逻辑回归模型。通过将族参数设置为二项式,可以解决这个问题。这样,您告诉glm()去拟合一个逻辑回归模型,而不是许多其他可以拟合glm的模型中的一个。
接下来,您可以制作一个summary(),它会告诉您一些关于配件的信息。
可以看到,summary()返回了每个系数的估计值、标准差、z值和p值。似乎这些系数都不重要。它还给出无效偏差(仅均值偏差)和残差偏差(包含所有预测因子的模型的偏差)。两者差别很小,有6个自由度。
你把glm.fit()的预测结果赋给glm.probs,类型等于因变量。这会预测你用来拟合模型的训练数据,给我一个拟合概率的向量。
如果你看看前五种概率,它们非常接近50%。
问题[1:5]
现在我就根据滞后期和其他预测因素来做一个关于大盘是涨还是跌的预测。特别是我会通过0.5这个门槛把概率变成分类。为此,我使用ifelse()命令。
If else (probs0.5, up , down) glm.pred是一个真假向量。如果glm.probs大于0.5,glm.pred调用‘up’;否则,调用“False”。
这里你附上数据框Smarket,做一个glm.pred的表,就是前面方向的涨跌。也可以取它们的平均值。
从表中可以看出,对角线上的例子是正确的分类,而对角线外的例子是错误的分类。看来你犯了很多错误。平均给定比率为0.52。
创建训练样本和测试样本。你如何能做得更好?将数据分为训练集和测试集是一个很好的策略。
#生成训练和测试集train=year2005predict (glm.fit,newdata=smarket [!Train,],type=response )我们来详细看看这个代码块。
火车等于不到2005年的年份。对于小于2005年的所有年份,您将得到一个true;否则,我会得到一个假的。然后你用glm.fit()重新拟合模型,只是子集等于‘train’,也就是说只拟合小于2005年的数据。然后,再次对glm.probs使用predict()函数来预测大于或等于2005年的剩余数据。对于新数据,你给它Smarket,use!“Train”作为索引(如果年份大于或等于2005,则train为真)。将您的类型设置为“因变量”以预测概率。最后,再次对glm.pred使用ifelse()函数来生成up和down变量。现在你创建一个新的变量来存储一个新的测试数据子集,并将其命名为Direction。你做一个表格,计算这个新测试集的平均值。
Direction.2005=方向[!火车]
比以前更糟了。这是怎么发生的?
解决过度拟合的问题。你可能过度拟合了数据。为了解决这个问题,你必须拟合一个更小的模型,使用Lag1、Lag2和Lag3作为预测器,从而抛开所有其他变量。代码的其余部分是相同的。
#拟合较小的模型GLM(家族=二项式,子集=训练)
嗯,你得到了59%的分类率,还不算太差。使用较小的型号似乎性能更好。
最后你对glm.fit做个总结(),看看有没有明显的变化。
没什么变得重要了,至少P值变好了,说明对业绩的预测有所提高。
所以结论,这个R教程关于使用glm()函数,设置族来建立二项的logistic回归模型就结束了。Glm()不假设因变量和自变量之间存在线性关系。但是,它假设连接函数和logit模型中的自变量之间存在线性关系。希望你能学到有价值的东西。
最流行的观点
1.多元逻辑回归在r语言中的应用实例
2.PSTR分析案例的实现。
3.3.matlab中的偏qrdxm乘法回归(PLSR)和主成分回归(PCR)
4.一个泊松回归模型的R语言分析案例
5.
R语言混合效应逻辑回归Logistic模型分析肺癌
LASSO回归、岭脊回归和弹性网模型在6.r语言中的实现
7.
R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
8.python使用线性回归预测股票价格
9.