• 推荐系统中的特征处理


    转自csdn,加上一些自己的理解。

    基于特征化工程进行用户特征化,结合相关的机器学习算法对业务进行挖掘建模,在广告的精准投放、预测、风控等领域中应用的非常广泛。无论是有监督的学习分类算法,还是无监督的聚类也罢,都需要建立特征向量,对特征进行预处理;其中对于有监督的训练时,还需要进行样本的筛选。本章节讲解一下样本选择和特征处理方面的一些方法技巧。

    在做样本训练前需要挑选样本,需要注意样本不平衡的问题,比如在定向广告预估点击率二元模型中,点击的(正样本)和不点击(负样本)的数据量相差很大,对于最终的预测结果会严重倾向于多数的负样本类,导致对正的分类错误率很高。但从评价指标准确率来看,因正负样本量的差异比较大,准确率不重视正类对分类效果评测的影响,往往分类的准确率从整体看还是比较高的。

    解决正负样本不平衡问题的手段,主要有两种,(实际上有3种)

    1、样本采样:

    对正样本采取上采样up sampling,对负样本进行下采样downsamping

    上采样可以利用对稀有类样本的分布进行模拟生成和当前稀有样本临近的一些样本。

    一般更多的方式是利用下采样去除噪音,去除冗余样本,对负样本进行聚类,在每个聚类层上按照比例抽取部分样本,以达到在负样本上抽样的尽量不影响原始分布。

    对正样本up sampling的最简单的方法就是重复选取正样本,这个叫做over sampling,但是它并没有产生真正新的正类样本,只是有些正类样本是重复的,这种方法可以把分界面再拉回来,有时候也很有效。

    还有一种方法更有效,就是利用差值的方法产生新的样本,比如经典的SMOTE及其变种,以前我读研的时候就用了这种方法,效果很好。

    2、算法层面的优化:

    划分样本训练集,每个训练集上进行模型训练,再进行分类器融合集成方式。

    代价敏感学习方式Cost-sensitivelearning,赋予各个类别不同的错分代价,比如对错分正类样本做更大的惩罚。

    SVM,给样本数量少的正类更大的惩罚因子,表示我们重视这部分样本

     

    其中i=1…p都是正样本,j=p+1…p+q都是负样本。

    Adaboost,初始化时对每一个训练例赋相等的权重1/n,然后用该学算法对训练集训练t轮,每次训练后,对训练失败的训练例赋以较大的权重,也就是让学习算法在后续的学习中集中对比较难的训练集进行学习。在不均衡样本中,由于正类错分代价比负类要高很多,所以权重设置不一样,可以对Adaboost进行改进,对正类样本设置比较高的权重。

    第三种就是集成学习。

    集成学习常见的就是Adaboost或者bagging,实验表名Adaboost效果一版会更好,在不平衡数据中常用Adacost来调整集成学习中误分的惩罚。我们在推荐系统的重排序中就使用了GBDT,也算是集成学习的一种,所以对不平衡的样本其实是有一定的处理能力的。

     

    当然在样本选择时,需要进行先进行去噪,去噪的技术有很多,比如离群点分析,分箱检测等等,当然最直观的是相同的特征,标签不一致,这个以后单独的章节介绍。

    利用机器学习进行建模,另外一个成败的关键因素是特征的选择和特征的预处理。

    特征选择使得准确性和模型的泛化能力效果更好,在保证经验风险最小化的基础上,尽量降低模型的复杂度,特征过多,模型过于复杂,过拟合,模型的泛化能力差。奥卡姆剃刀原理说的就是,若无必要,勿增加实体。除了去掉不相关的特征和避免特征之间的相互依赖外(这句话很精辟啊),特征过多还可能导致特征分析训练的时间过长,模型过于复杂,泛化能力下降等问题。

    先说一下特征刷选的一些方法:

    首先要基于业务进行理解,和业务进行讨论,尽可能的评估对因变量有影响的所有的自变量。

    初步选出自变量后,需要进行特征选择,特征选择有以下几种方式:(Filter—考虑自变量和目标变量之间的关联,Wrapper-离线和在线评估是否增加一个特征,Embedded-利用学习器自身的筛选功能)

    Filter方式,主要考虑的是自变量和目标变量之间的关联。

    对于连续型的变量之间的相关性,可以采用相关系数来评估,比如皮尔逊相关系数。

    对于类别型的可以采用假设检验的方式,比如卡方检验

    对于连续型的自变量和二元的离散因变量,利用WOE,IV,通过WOE的变化来调整出最佳的分箱阀值,通过IV值,筛选出有较高预测价值的自变量。

    R平方,一个变量的变化有百分之多少可以有另外一个变量来解释。

    当然还有互信息、信息增益等等

    还有就是需要避免自变量之间的共线性问题,所谓共线性,就是指自变量之间存在较强线性的关系。

     

    Wrapper方式,主要考虑的是离线和在线评估是否增加一个特征,通过选定模型评估的指标(AUC、MAE、MSE)来评价对特征增加和去除后模型的好坏,通常有前向和后向两种特征选择方式。

    Embedded方式,通过分类学习器本身对特征自动的进行刷选,比如逻辑回归中的L1 L2惩罚系数,决策树中的基于最大熵的信息增益选择特征。

    特征的预处理主要有以下方式:

    1、异常值和缺失值检测处理

    2、归一化,不同自变量之间的数据范围不一致,导致比较复杂,两个维度范围相差的越大,梯度下降的越慢,还可能永远无法收敛,利用归一化加快收敛的速度。

    归一化的方式

      x-min/max-min

       z-score=x–μ/σ

    3、改变数据的分布

    对于连续型的变量的原始分布严重不对称,会干扰模型的拟合。通过数据的转换使得成正态分布,提高模型的拟合能力,比如取 LOG,平方根,指数等。

    4、离散化、交叉、衍生变量

            离散化的意义主要有:

     一方面可以减弱极端和异常值的影响;

     另外一方面有利于对非线性的关系进行分析描述,使得自变量和因变量的关系变得清晰化,特征离散化引入非线性,加大拟合,给线性模型(如逻辑回归)增加非线性的能力

           离散化的做法主要有:

             分段,方式有很多,等频率、等间隔、、、

              优化离散:把自变量和因变量联系综合考虑。切分点是导致目标变量出现明显变化的折点。常用的检验指标有卡方、信息增益、基尼系数、WOE(二元的目标变量)

          衍生变量通过对原始数据进行加工,生成更加有商业意义的新的变量,更加适合后续的数据建模。

    5、正则化、降维

    为了增强模型的泛化能力,解决过拟合的问题,正则化(惩罚)和降维(减少样本的维度)是两种常用的方法。结构风险最小化,就是除了要最小化经验风险,降低训练的误差,还要降低模型复杂度,正则化一般是在损失函数后增加一个正则化项,对特征进行惩罚,来降低模型复杂度。逻辑回归在损失函数后增加L1、L2 ,增强模型的泛化能力,L1俗称lasso 回归,L2俗称岭回归,在极大似然估计后加上对权重的L1或者L2等罚项后会让信号弱的特征权重很小甚至为0。降维的方式有很多,比如互信息、卡方检验、信息增益、主题等等,在文本的关键词筛选中,还可以基于样本数据集,选择出现频次最多的关键词作为最终的特征集合。

  • 相关阅读:
    Android SwitchButton(滑动开关)
    创建您自己的Maven模板
    Bag标签成一条线的代码来实现中国字
    rabbitmq的java简单的实现
    【七】注入框架RoboGuice使用:(Your First Custom Binding)
    Sqlmap渗透测试是常用语句
    Android NOtification 使用(震动 闪屏 铃声)
    Android loader 详解
    Android实现获取本机中所有图片
    Android保存图片到系统图库
  • 原文地址:https://www.cnblogs.com/chybot/p/4655580.html
Copyright © 2020-2023  润新知