机器学习算法经验

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lanyuelvyun/article/details/82118618

1、特征值归一化

  • 背景:好多算法都是基于参数的,并且涉及到了梯度下降优化方法
  • 目的:为了让所有的特征的值,具有相同的量纲
  • 原因:拿LR举例,属于基于参数的算法,用到了梯度下降算法。在计算梯度的时候,如果特征值不进行归一化处理,那么在同一个学习率的情况下,拥有较小特征值的特征就学习的不好(因为此时的学习率对于该特征值来说大了,不合适),为了避免这种情况,学习率就要设置的非常小,学习率小,这就会导致算法学习的非常慢。
  • ps:基于树的方法不需要进行特征值的归一化,例如随机森林,bagging 和 boosting等。

2、二分类问题,如果其中一类样本很少的情况下(假如负样本很少),正负样本比例设置成多少,算法才能充分学习较少类样本的信息(也就是充分学习负样本的信息?)

  • 要观察算法的badcases。
  • 如果有一批样本,样本有特征和标签,分成train集和test集,两个集合正负样本比例一致,并且都是负样本较少。然后有一个机器学习算法,现在用这个算法去学习train集的样本,并且给test集的样本打分。因为test集样本的标签已知,所以我们能知道哪些test集样本打分正确,哪些打分错误。
  • 如果test集中,大部分的负样本都被判断成了正样本,说明算法对于负样本学习的不充分,解决办法:需要增加负样本的数量;开发新的特征;
  • 如果test集中,大部分的负样本都被判断成了负样本,判断正确,说明算法对于负样本学习的充分了。

3、二分类问题,什么时候能说明一个算法充分学习了正负样本?

  • 先看test集与train集的AUC,相差在0.5%~1%以内,说明该算法训练出来的模型的泛化能力比较好了;
  • 看badcases,同问题2

4、二分类问题,在算法充分学习了正负样本的情况下,增加样本,无论是哪类样本,改变的是模型的bias,此时已经不会改变模型的variance了,因为模型已经学习的很好了

5、模型过拟合

  • 我们说一个模型过拟合,是说一个模型的variance大;而当一个模型bias大,但是variance比较小的时候,我们认为这个模型是比较稳定的,模型学习的很好,就是会有一些偏移,这个偏移我们通过平移之类的操作就可以消除,所以这种情况,我们不认为是过拟合。

6、模型评价指标,为什么不用accuracy?不同的业务场景下用什么样的评价指标?

  • 衡量一个模型好坏,不用accuracy,accuracy不准确,因为不同的阈值,会有不同的accuracy。
  • 不同的业务场景,对模型的评价指标是不一样的,以二分类问题为例
    • 场景一:很在意模型算法对两类样本的区分/排序能力。比如说一般的分类问题,信用评分模型就属于这一类。此时模型评价指标用AUC(area under curve):ROC曲线与x轴的面积。相对于accuracy而言,AUC衡量的是这个模型在所有阈值下的整体的性能,而不是单个阈值下。
      • ROC曲线
        纵轴 TPR = TP / [ TP + FN] ,所有正例中正例分对的概率
        横轴 FPR = FP / [ FP + TN] ,所有负例中负例分错的概率
      • AUC是ROC曲线下的面积,衡量的是模型对于不同类样本的分类/排序能力,通常tpr越高,fpr越低,分类器效果越好,所以ROC曲线越往左上凸越好。AUC描绘了分类器在“正例分对”和“负例分错”间的trade-off,两类样本都考虑到了,不希望过于适合单个类。
    • 场景二:很在意是不是尽可能多的将需要的那一类样本检索出来,就算是多检索出来另一类的样本也无所谓。这种一般属于检索问题,反欺诈场景就属于这一类。此时模型评价指标用PR曲线
      • PR曲线
        纵轴 precision(查准率/准确率) TP / (TP + FP) 被预测为正例的样本中,真正的正例所占的比例
        横轴 recall(查全率/灵敏度/召回率) TP / [ TP + FN] 在所有正例样本中,被预测为正并且真的是正例的样本所占的比例
      • precision和recall是互相影响的,理想情况下两者都高是最好,但是一般情况下二者是成反比的。 PR曲线是对正样本(labe=1)的查全率和查准率之间的一个trade_off

6、lightgbm算法在风控上面的经验

  • 1、AUC要在[0.75,0.85]之间,<0.75说明模型效果很不好,有可能是特征提取的不对,与业务(根据业务性质来定标签)不怎么相关;>.85,过拟合,有可能引入了未来特征,引入了label,需要剔除一下。
  • 2、训练集的AUC与测试集的AUC相差最好不要超过0.05、0.1;
  • 3、KS(模型将好坏样本分的最开的那个值)一般在[0.25,0.45]之间;
  • 4、注意入模特征的顺序:训练lightgbm模型的时候,要记住入模特征的顺序,因为我们在使用训练好的pkl进行预测的时候,预测样本的特征要以相同的顺序输入到pkl中,然后出相应的预测概率,否则就会出错误。
    我们的做法是事先对所有特征进行编码,每一个特征名字对应一个数字串,然后入模前先对特征按照其编码从小到大进行排序,再入模;在使用pkl的时候,也对预测样本的特征赋予相同的编码,从小到大进行排序之后,再输入到pkl里面。
  • 5、 参数优化
    http://lightgbm.apachecn.org/cn/latest/Parameters-Tuning.html
  • 6、对于离散特征的处理:树模型对于每一个特征,会对该特征的值进行一个分组,满足一定条件的分为一组,不满足条件的分成另外一组,这样做就相当于默认了一个前提:在一定程度上,我们认为连续的挨在一起的值,具有相同的意义。对于连续型、单调的变量来说,这样做是没问题的,但是对于离散型变量,这种方法就存在问题:因为对于一个离散特征来说,每一个值之间是没有数值意义的,随便将它的值,捡挨在一起的分在一个组里面,这是没有任何意义的,因为挨在一起的离散值,不能认为他们具有相同意义,这不像连续值。所以正确的做法是:对于一个离散变量,
    方法一:对该离散特征进行one-hot编码,将一个特征变成多个特征,例如有4个样本,原特征及特征值是{“户籍省“:[“北京”,”上海”,”福建”,”四川”]},用one-hot映射之后就变成了4个特征,分别是{“北京”:[1,0,0,0]}、{“上海”:[0,1,0,0]}、{“福建”:[0,0,1,0]}、{“四川”:[0,0,0,1]},然后将这些特征直接输入lightgbm模型里面,对于4个特征中的每一个,模型会将0分在一组,1分在一组。
    方法二:实际上,lightgbm可以直接处理类别特征。通过指定'categorical_feature'这一参数告诉它哪些feature是类别特征,categorical_feature=[‘列名’, ’列名’]。不必预先进行对离散特征进行one-hot编码,速度会提升不少,其原理是对特征的所有取值,做一个one-vs-others,从而找出最佳分割的那一个特征取值。但是注意:a) 需要提前将分类特征映射为数值,因为即使你通过categorical_feature传递参数,它也不接受字符串值。b) Lightgbm在使用categorical_feature的时候,在test集上的精度表现不佳,会在train集上出现过拟合,这应该是跟“其原理是对特征的所有取值,做一个one-vs-others,从而找出最佳分割的那一个特征取值”有关。
  • 7、入模的特征之间存在共线性的时候怎么处理?现象是:某一特征A单独的AUC很高,但是跟其他特征一起训练模型之后的importance排名比较靠后,说明该特征A与其他特征中的某些特征存在共线性,需要进行排查。
    排查方向与方法:a) 特征A属于哪一类特征,消费、收入、多头、反欺诈、信用?其他特征都属于哪类特征?是否有与A同类型的特征?b) 如果有的话(假设是特征B),计算特征A与特征B的皮尔逊相关系数,看一看二者之间的线性相关性。
  • 8、lightgbm算法,几个重要参数
    • max_depth=12 回归树的深度
    • n_estimators=2000 迭代次数
    • colsample_bytree=0.7 列采样,防止过拟合,不能过小。意思是每次迭代随机选取70%的特征进行分类;
    • learning_rate=0.01 学习率
    • num_leaves=10 每一棵树叶子结点的个数,过多会过拟合
    • min_data_in_leaf=5000
      每一个叶子结点的最小样本个数,如果该叶子节点达不到该个数,lightgbm算法就不会生成该分支。如果有10万个样本,其中具有某一个特征值的样本只有3000个,算法本应该根据该特征进行分类产生树分支,但是此时如果让min_data_in_leaf=5000,则该树分支就会直接不生成,那么该特征就没有发挥任何分类作用。

猜你喜欢

转载自blog.csdn.net/lanyuelvyun/article/details/82118618
今日推荐