逻辑回归的敏感性分析及在特征选择中的应用
2022-09-07王凌妍张鑫雨许胜楠王禹力甄志龙通信作者
王凌妍,张鑫雨,许胜楠,王禹力,甄志龙(通信作者)
(通化师范学院 吉林 通化 134002)
0 引言
逻辑回归因其可解释性、模型简单等特点,在商业、工业等实际任务中有广泛的应用。虽然带有“回归”字样,但是逻辑回归是一种带有参数的二分类模型。比如,判断邮件是不是垃圾邮件[1-2],判断交易是否具有欺诈行为[3-4],预测肿瘤是否为恶性肿瘤[5-6],预测学生的学习情况[7-8]等。数据集合中的每个样本包含若干个特征,在实际应用过程中,有些特征与分类相关,有些特征与分类无关。特征选择技术是通过评估函数找到相关的特征子集,合适的特征选择方法可以提高学习系统的性能,降低计算复杂度和增强系统的可解释性。研究者可以查阅特征选择的文献综述[9-12]。特征选择方法常分为包裹法、过滤法和嵌入法。包裹法需要特定的分类器,根据指定分类器的准确性作为特征子集评价准则。过滤法则独立于任何的学习算法,根据合适的评估函数评估特征的优劣。嵌入法将特征选择与学习算法结合起来,将特征选择嵌入到学习算法的构造过程中。虽然包裹法的性能较高,但因为组合问题计算开销很大,而且很容易产生过拟合。嵌入法计算复杂度介于包裹法和过滤法之间,准确率也比较高,但只有一些模型有,如决策树模型。常用的特征选择方法有方差选择法、相关系数法、卡方检验法、岭回归方法、Lasso回归方法及决策树方法等等。本文采用过滤法进行特征选择,如何构造一个合适的评估函数是过滤法特征选择的关键技术。本文基于敏感性的方式构造评估函数,敏感性分析是构造评估函数常用的一种方法,是针对不确定性的一种分析技术。敏感性[13]分析研究每个特征的微小变化对输出的影响。本文主要对逻辑回归模型进行了研究,提出了一种反映敏感性的方法,即对回归函数的每一个特征变量分别求偏导,通过偏导数值的大小判断敏感性,以此筛选出重要的特征值。通过研究特征的变化对输出的影响程度,进而从多个特征中逐一找出对输出影响较大的敏感性特征。通过特征敏感性判断输入特征的优劣,去掉敏感性小的特征,筛选敏感性相对较大的特征作为模型输入,完成特征选择的任务,为分类模型提供有用的信息。
1 逻辑回归
逻辑回归是一种利用概率思想来解决分类问题的机器学习方法。逻辑回归的输入是线性函数,可以看作是逻辑回归的线性边界,逻辑回归的输出是通过sigmoid函数(图1)返回属于某一个类的0-1区间的概率值。逻辑回归的表达式为:
其中w为参数向量,x为特征向量,w0为偏置。
利用交叉熵定义逻辑回归的损失函数为:
梯度下降法,得到梯度为:
参数w的更新公式为:
2 敏感性计算
逻辑回归的判别函数为:
于是对x1求偏导得:
将m代入后得:
同理可得:
最终得到每个特征的敏感性的计算公式为:
这里i表示第i个特征,j表示第j个样本。
3 实验
3.1 实验步骤
步骤1:选用拥有4个特征值的iris鸢尾花数据集进行训练和预测。
步骤2:将iris鸢尾花数据集划分:训练集占60%,测试集占40%,random_state=0。
步骤3:用Lasso回归和求偏导数两种方法筛选出敏感性最好的两个特征值,观察结论是否一致,若结论一致列出所有组合情况,并将其分别进行训练和预测,观察准确率最高的组合方式是否与上述结论一致,若一致说明偏导法判断敏感性是可行的。
步骤4:最后画出所有组合方式的二维特征的数据散点图,更加直观地展示结果。
3.2 实验过程
首先系统导入iris鸢尾花数据集,为了消除奇异样本数据导致的不良影响,引入了标准化StandardScaler进行预处理,标准化后的数据更加可靠,Lasso回归函数通过将绝对值较小的系数收缩为0,达到了特征值选择的目的,而上述提出的偏导数方法是通过特征偏导数的大小,判断出对函数输出结果影响较大的特征,从而判断出敏感性大小,即选出了最敏感的特征。我们发现Lasso回归和偏导数方法结论一致,都为后两个特征对分类表现好,为了进一步验证,我们决定将4个特征值的6种组合一一进行训练和预测,计算出准确率,以此来验证最好的特征值组合是否与上述结论一致。
3.3 实验代码
from sklearn.linear_model import Lasso
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
d=DecisionTreeClassifier()
iris=load_iris()
x=iris.data
y=iris.target
scaler=StandardScaler()
x_standard=scaler.fit_transform(x)
x=iris.data[ : ,[0:1]]
将此处改成[0,2]、[0,3]、[1,2]、[1,3]、[2,3]分别记录6种特征组合情况。
y=iris.target
from sklearn.model_selection import train_test_split
xtrain,xtest,ytrain,ytest=train_test_split(x,y,test_size=0.4,random_state=0)
将每两列特征组合出的数据集进行测试集和训练集的划分后,在模型选择上,我们首先考虑了线性回归不适用于本次分类实验中的精度评估,而逻辑回归模型则主要用于解决二分类问题,在用ovr改造后也可进行,但出现了训练集和测试集的精度相等的情况,而朴素贝叶斯的三种模型中高斯模型的精度最高,以后两个特征值为例,精度分别为0.93和0.98,但是决策树在经过网格搜索确定参数值后,它的精度高达0.95和0.99,为所有模型中最高精度,故最终确定模型为决策树模型。
决策树模型算法DecisionTreeClassifier()通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类的过程。这一过程对应着对特征空间的划分,也对应着决策树的构建。
在确定了用决策树模型进行精度评估后,通过GridSearchCV网格搜索完成DecisionTreeClassifier函数的3个参数的最优解的选择。gini系数最大为1,最小为0,当基尼系数越趋于0表明越趋于稳定。通过调用best_params_函数找出测试结果得出使用gini基尼系数,最大深度为3,最小叶子结点树为1值时为最优解。
然后调用train_test_split函数进行数据集的划分,使训练集占60%,测试集占40%,random_state=0操作,并调用accuracy_score函数对训练集与测试集数据进行评分操作。
from sklearn.model_selection import GridSearchCV
parameters={"criterion":['gini','entro py'],"max_depth":[1,3,5,7,9],"min_samples_leaf":[1,3,5,7,9]}
GS=GridSearchCV(d,parameters,cv=10)
GS.fit(xtrain,ytrain)
GS.best_params_
# {‘criterion’: ‘gini’, ‘max_depth’: 3, ‘min_samples_leaf’: 1}
d=DecisionTreeClassifier(criterion=’gini’,m ax_depth=3,min_samples_leaf=1)
d.fit(xtrain,ytrain)
from sklearn.metrics import accuracy_score
accuracy_score(ytest,d.predict(xtest))
结果依次为 #0.68,0.87,0.93,0.87,0.93,0.95
accuracy_score(ytrain,d.predict(xtrain))
结果依次为 #0.84,0.98,0.99,0.98,0.98,0.99
pd_iris=pd.DataFrame(x,columns=['petallength(cm)','petal width(cm)'])
plt.figure(dpi=100)
plt.scatter(pd_iris['petal length(cm)'],pd_iris['petal width(cm)'],c=y)
3.4 实验结果
将 Sepal.Length、Sepal.Width、Petal.Length、Petal.Width 4个特征分别设为X1、X2、X3、X4,实验结果见表1。
画出6种不同特征组合对应的散点图(1)~(6),见图2。
由图可以看出,最后一张图(6)即后两个特征X3、X4的组合效果最好,也更加有力地验证了我们给出的偏导数敏感性判断方法是可行的。
4 结语
本文提出了一种逻辑回归的敏感性计算方法,该方法给出了逻辑回归输出对输入的敏感性定义,即输出对每个输入特征的偏导数,根据敏感性定义很容易计算出敏感性的值。我们将敏感性的方法应用到特征选择中,利用敏感性作为评价特征的函数,得到每个特征评价的分值,并选择相对敏感性值大的特征组成特征子集,作为下一步分类任务的输入。采用机器学习中常用的iris作为数据集验证该方法的效果,实验结果表明逻辑回归的输出对输入特征敏感性分析方法能够有效地选取分类特征,该敏感性分析方法简单且可行。下一步工作我们将敏感性分析方法扩展到参数扰动中,利用敏感性研究参数的正则化方法是进一步要研究的内容。