的特征组合层次比较高,极大提高LR模型拟合能力

print(“模型预测:”,model.predict(x).round())

# 正确标签:[0 1 1 0] 模型预测:[0 1 1 0]

业界常说“数据和特征决定了机器学习的上限,模型和算法只接近这个上限”。由于LR是一个简单的模型,它的特征质量基本上决定了它的最终效果(也就是一个简单的模型需要更多的折腾特征工程)。

在 LR 中生成(提取)共同特征的主要方法有以下三种:

例如,POLY2、 引入到潜在向量中的因子分解机(FM)可以看作是 LR 的基础,将所有特征成对交叉,生成非线性特征组合。

但是FM等方法只能做二阶特征交叉。使用GBDT自动筛选特征并生成特征组合更有效。即提取GBDT子树的特征划分和组合路径作为新特征,然后将特征向量作为LR模型的输入0-1背包问题的算法设计策略,是推荐系统的经典GBDT+LR方法。(需要注意的是GBDT子树的深度太深,特征组合层次比较高,大大提高了LR模型的拟合能力,但也容易引入一些噪声,导致模型过拟合)

以下GBDT+LR的代码实现(基于癌细胞数据集)提取GBDT特征并与原始特征拼接:

训练和评估模型有更好的分类效果:

从 sklearn.preprocessing 导入 OneHotEncoder

从 sklearn.ensemble 导入 GradientBoostingClassifier

gbdt = GradientBoostingClassifier(n_estimators=50, random_state=10, subsample=0.8, max_depth=6,

min_samples_split=20)

gbdt.fit(x_train, y_train) # GBDT训练集训练

train_new_feature = gbdt.apply(x) # 返回训练好的模型中每棵树中数据所在叶子节点的位置

打印(train_new_feature.shape)

train_new_feature = train_new_feature.reshape(-1, 50)

显示(train_new_feature)

打印(train_new_feature.shape)

编码 = OneHotEncoder()

enc.fit(train_new_feature)

train_new_feature2 = np.array(enc.transform(train_new_feature).toarray()) # onehot 表示

打印(train_new_feature2.形状)

train_new_feature2

二、特征离散化和编码表示

对于连续数值特征的输入,LR通常需要对max-min(x =x-min/(max-min)下的特征进行归一化,将输出转换为0-1之间的数字,可以加快模型计算速度但实际上在业界很少直接将连续值作为逻辑回归模型的特征输入,而是先将连续特征离散化(常用的有等宽、等频、卡方分箱、决策树分箱等,分箱的不同也直接影响模型效果),然后做(Onehot,WOE)编码,然后进入模型。

这样做的原因是我们回到模型的原理。逻辑回归是一种广义线性模型。该模型无非是对特征线性度的加权求和,通过 sigmoid 将其归一化为概率。这样的特征表达是非常有限的。以年龄为例,判断是否存款。在lr中,age作为特征对应一个权重w控件,输出值=sigmoid(…+age * w+..),可见在模型的作用下,age值只能线性表示参数 w。

但对于年龄这一特征,不同的年龄值与预测是否存款的模型应该不存在线性关系。例如,0-18岁可能与存款呈负相关0-1背包问题的算法设计策略,19-55岁可能与存款呈正相关。这意味着不同的特征值需要不同的模型参数才能更好地表示。即通过对特征进行离散化,例如年龄可以离散化,伪码(onehot)可以转化为4个特征(if_age)。

在风控领域,特征离散化后更常用的特征表示(编码)不是onehot,而是WOE编码。Woe编码就是通过计算当前bin中正负样本的比值Pyi与所有样本中正负样本的比值Pni之差来计算每个bin的woe值(如上式所示),如bin 的数值表示。

分箱和 woe 编码后的特征与决策树的决策过程非常相似。以年龄特征为例:如果age >18 and age44 then return 1.66;…; (对应树的特征划分,叶子节点值)输入到LR,与决策树和LR的模型融合非常相似,提高了模型的非线性表达。

总结离散编码的优点:

三、特征选择

特征选择用于过滤掉显着特征并丢弃非显着特征。可以减少计算开销,减少干扰噪声,降低过拟合风险,提高模型效果。对于逻辑回归,常用以下三种选择方法:

过滤方法:利用缺失率、单值率、方差、皮尔逊相关系数、VIF、IV值、PSI、P值等指标过滤特征;

Embedding方法:使用带有L1正则项的逻辑回归,具有特征选择(稀疏解)的效果;

Wrapper 方法:使用逐步逻辑回归、双向搜索选择特征。

其中,滤波方法中提到的VIF是共线性指标。原理是尽量把每个特征作为标签,用其他特征学习拟合,得到线性回归模型拟合效果的R^2值,计算每个特征的VIF。. 特征的VIF为1,即当前特征不能与其他特征拟合,特征之间不存在共线性(工程中常用VIF)。

四、模型级优化4.1 截距项

通过设置截距项(偏差项)b,可以提高逻辑回归的拟合能力。截距项可以简单理解为模型中多了一个参数b(也可以认为是增加了一个参数w0)对应于常数项的特征,这样的模型比较复杂,有更好的拟合效果。

如果没有截距项 b 怎么办?我们知道逻辑回归的决策边界是线性的(即决策边界是W * X + b)。如果没有截距项(即W * X),则决策边界被限制为必须通过坐标圈,这样的限制很可能导致模型收敛慢,精度差,并且数据拟合不佳,即容易欠拟合。

4.2 正则化策略

通过设置正则项可以降低模型过拟合的风险。常用的正则化策略包括 L1 和 L2 正则化:

从上式可以看出,加入权重衰减会导致学习规则的修改,即在每一步进行梯度更新之前,权重都被缩小(乘以1-εα),起到了作用的重量衰减。

用L1目标函数更新模型参数的权重(其中sgn(x)为符号函数,取参数的符号):可以看出在-αsgn(w)项的作用下,权重w的每个元素在每一步更新后的向量都会平滑地向0移动,而w的某些元素很容易为0,导致稀疏。

总结L1、L2正则项:

L1 和 L2 都是限制解空间和降低模型容量以减少过拟合的方法。L2 范数约束具有产生平滑解而没有稀疏解的能力的效果,即参数没有很多零。假设我们的决策结果与两个特征相关,L2正则倾向于综合两者的影响,对影响较大的特征赋予较高的权重;而 L1 正则倾向于选择影响较大的参数,并尽可能丢弃影响较大的参数。较小的一个(具有稀疏解效果)。在实际应用中,L2正则化的性能往往优于L1正则化,但L1正则化会压缩模型,减少计算量。

4.3 多分类任务

将逻辑回归应用于二元分类任务时有两个主要思想,

下面的softmax函数和对应的多类目标函数:

在softmax回归中,一般假设多个类别是互斥的。在softmax中的概率公式中计算样本后,得到样本属于每个类别的值。每个类别的概率之和必须为 1,使用逻辑回归 OVR。进行多分类时,得到的值是样本相对于其余类别属于该类别的概率,一个样本在多个分类器上计算后得到的结果不一定是1。因此,当目标分类的类别是互斥的(比如区分猫、猪、狗的图片),softmax回归常用于预测,而当分类的目标类别不是很互斥时(比如区分流行音乐、摇滚、中文),可以使用softmax回归。逻辑回归构建多个二元分类器(也可以考虑多标签分类)。

4.4 学习目标

逻辑回归使用最小化交叉熵损失作为目标函数,

为什么我不能使用 MSE 均方误差?

简而言之,有以下几点:

4.5 优化算法

最大似然下的逻辑回归没有解析解,我们经常使用梯度下降等算法进行迭代优化,以获得局部最优的参数解。

如果使用 Keras 等神经网络库进行建模,梯度下降算法类包括 SGD、Momentum、Adam 等优化算法。对于大多数任务,通常可以直接尝试 Adam,然后可以继续验证不同优化算法对特定任务的效果。

如果使用scikitl-learn库进行建模,优化算法主要有liblinear(坐标下降法)、newton-cg(准牛顿法)、lbfgs(准牛顿法)和sag(随机平均梯度下降法)。liblinear 支持 L1 和 L2,只支持 OvR 进行多分类;“lbfgs”、“sag”、“newton-cg”只支持L2,支持OvR和MvM进行多分类;当数据量特别大时,首选sag!

4.6 模型评估

优化模型阈值(cutoff point):当评价指标为分类Precision、Recall等指标时,可以通过优化模型阈值来提升分类效果(默认0.5)。一般情况下presion下不同的阈值可以用召回曲线(PR曲线)来划分,权衡取舍,选择合适的模型阈值。

4.7 可解释性

逻辑回归模型的最大优点是它的可解释性。上一节提到离散化编码(如Onehot)可以提高拟合效果和可解释性。以下特征在离散化后采用 Onehot 编码:

决策过程是特征分箱Xn及其模型权重Wn的加权求和,然后将sigmoid转化为概率,通过模型权重的大小可以知道每个特征对决策的实际影响值,如学习到的权重值W对应的特征“年龄在[18,30]”为-0.8,即呈现负相关。

三连看,月入百万

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论