2.Logistic回归建模步骤
Logistic回归模型的建模步骤如图5-4所示。
图5-4 Logistic回归模型的建模步骤
1)根据分析目的设置指标变量(因变量和自变量),然后收集数据,根据收集到的数据,对特征再次进行筛选;
2)y取1的概率是p=P(y=1|X),取0概率是1-p。用ln[p/(1-p)]和自变量列出线性回归方程,估计出模型中的回归系数;
3)进行模型检验。模型有效性的检验指标有很多,最基本的有正确率,其次有混淆矩阵、ROC曲线、KS值等。
4)模型应用:输入自变量的取值,就可以得到预测变量的值,或者根据预测变量的值去控制自变量的取值。
下面对某银行在降低贷款拖欠率的数据进行逻辑回归建模,该数据示例如表5-3所示。
表5-3 银行贷款拖欠率数据
数据详见:示例程序/data/bankloan.xls
利用Scikit-Learn对这个数据进行逻辑回归分析。首先进行特征筛选,特征筛选的方法有很多,主要包含在Scikit_Learn的feature_selection库中,比较简单的有通过F检验(f_regression)来给出各个特征的F值和p值,从而可以筛选变量(选择F值大的或者p值小的特征)。其次有递归特征消除(Recursive Feature Elimination,RFE)和稳定性选择(Stability Selection)等比较新的方法。这里使用了稳定性选择方法中的随机逻辑回归进行特征筛选,然后利用筛选后的特征建立逻辑回归模型,输出平均正确率,其代码如代码清单5-1所示。
代码清单5-1 逻辑回归代码
#-*- coding: utf-8 -*- #逻辑回归 自动建模 import pandas as pd #参数初始化 filename = '../data/bankloan.xls' data = pd.read_excel(filename) x = data.iloc[:,:8].as_matrix() y = data.iloc[:,8].as_matrix() from sklearn.linear_model import LogisticRegression as LR from sklearn.linear_model import RandomizedLogisticRegression as RLR rlr = RLR() #建立随机逻辑回归模型,筛选变量 rlr.fit(x, y) #训练模型 rlr.get_support() #获取特征筛选结果,也可以通过.scores_方法获取各个特征的分数 print(u'通过随机逻辑回归模型筛选特征结束。') print(u'有效特征为:%s' % ','.join(data.columns[rlr.get_support()])) x = data[data.columns[rlr.get_support()]].as_matrix() #筛选好特征 lr = LR() #建立逻辑货柜模型 lr.fit(x, y) #用筛选后的特征数据来训练模型 print(u'逻辑回归模型训练结束。') print(u'模型的平均正确率为:%s' % lr.score(x, y)) #给出模型的平均正确率,本例为81.4%
代码详见:示例程序/code/logistic_regression.py
运行代码清单5-1,可以得到部分输出结果如下。
通过随机逻辑回归模型筛选特征结束。有效特征为:工龄,地址,负债率,信用卡负债逻辑回归模型训练结束。模型的平均正确率为:0.814285714286
递归特征消除的主要思想是反复的构建模型(如SVM或者回归模型)然后选出最好的(或者最差的)的特征(可以根据系数来选),把选出来的特征放到一边,然后在剩余的特征上重复这个过程,直到遍历所有特征。这个过程中特征被消除的次序就是特征的排序。因此,这是一种寻找最优特征子集的贪心算法。Scikit-Learn提供了RFE包,可以用于特征消除,还提供了RFECV,可以通过交叉验证来对特征进行排序。
稳定性选择是一种基于二次抽样和选择算法相结合较新的方法,选择算法可以是回归、SVM或其他类似的方法。它的主要思想是在不同的数据子集和特征子集上运行特征选择算法,不断重复,最终汇总特征选择结果。比如,可以统计某个特征被认为是重要特征的频率(被选为重要特征的次数除以它所在的子集被测试的次数)。在理想情况下,重要特征的得分会接近100%。稍微弱一点的特征得分会是非0的数,而最无用的特征得分将会接近于0。Scikit-Learn在随机Lasso和随机逻辑回归中有对稳定性选择的实现。
从上面的结果可以看出,采用随机逻辑回归剔除变量,分别剔除了x2、x8、x1、x5,最终构建的模型包含的变量为常量x3、x4、x6、x7。在建立随机逻辑回归模型时,使用了默认的阈值0.25,读者可以用RLR(selection_threshold=0.5)手动设置阈值。此外,在本例中,使用随机Lasso、甚至仅仅简单地采用F回归(f_rgression)也能够得到类似的结果。
逻辑回归本质上还是一种线性模型,因此这里的模型有效性检验本质上还是在做线性相关检验,因此,所筛选出来的变量,说明与结果具有比较强的线性相关性,然而被筛掉的变量并不一定就跟结果没有关系,因为它们之间有可能是非线性关系。因此,读者还需要根据问题的实际背景对筛选结果进行分析。对于非线性关系的变量筛选方法有决策树、神经网络等。
5.1.4 决策树
决策树方法在分类、预测、规则提取等领域有着广泛应用。20世纪70年代后期和80年代初期,机器学习研究者J.Ross Quinlan提出了ID3[8]算法以后,决策树在机器学习、数据挖掘领域得到极大的发展。Quinlan后来又提出了C4.5,成为新的监督学习算法。1984年,几位统计学家提出了CART分类算法。ID3和CART算法几乎同时被提出,但都是采用类似的方法从训练样本中学习决策树。
决策树是一树状结构,它的每一个叶节点对应着一个分类,非叶节点对应着在某个属性上的划分,根据样本在该属性上的不同取值将其划分成若干个子集。对于非纯的叶节点,多数类的标号给出到达这个节点的样本所属的类。构造决策树的核心问题是在每一步如何选择适当的属性对样本做拆分。对一个分类问题,从已知类标记的训练样本中学习并构造出决策树是一个自上而下,分而治之的过程。
常用的决策树算法见表5-4。
表5-4 决策树算法分类
本节将详细介绍ID3算法,也是最经典的决策树分类算法。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论