快手大数据比赛总结

1.模型融合方面:

1.1普通加权

这种方法更适合模型结果差异性较大,线上效果好的权重较大些,线上效果好的权重相对大些,反之权重相对小些。

1.2Stacking

快手大数据比赛总结_第1张图片

该图是一个基模型得到P1和T1的过程,采用的是5折交叉验证,所以循环了5次,拼接得到P1,测试集预测了5次,取平均得到T1。而这仅仅只是第二层输入的一列/一个特征,并不是整个训练集。再分析作者的代码也就很清楚了。也就是刚刚提到的两层循环。

1.3加权平均结合sigmoid反函数

快手大数据比赛总结_第2张图片

首先将各个模型的结果代入到sigmoid反函数中,然后得到其均值,对其结果使用sigmoid函数。相较于普通的加权平均,这种方法更适合于结果具有较小差异性的。

1.4 gbdt和lr的融合

把gbdt的叶节点未给lr

 

2.特征选择方面

快手大数据比赛总结_第3张图片

 

主要分为产生过程,评估过程,停止条件和验证过程。

但是, 当特征数量很大的时候, 这个搜索空间会很大,如何找最优特征还是需要一些经验结论。

2.1 过滤法

1.pearson系数

皮尔森相关系数是一种最简单的,能帮助理解特征和响应变量之间关系的方法,该方法衡量的是变量之间的线性相关性,结果的取值区间为 , 表示完全的负相关(这个变量下降,那个就会上升), 表示完全的正相关, 表示没有线性相关。Pearson Correlation速度快、易于计算,经常在拿到数据(经过清洗和特征提取之后的)之后第一时间就执行。Scipy的pearsonr方法能够同时计算相关系数和p-value,

import numpy as np
from scipy.stats import pearsonr

np.random.seed(0)
size = 300
x = np.random.normal(0, 1, size)
print("Lower noise", pearsonr(x, x + np.random.normal(0, 1, size)))
print("Higher noise", pearsonr(x, x + np.random.normal(0, 10, size)))

Pearson相关系数的一个明显缺陷是,作为特征排序机制,他只对线性关系敏感。如果关系是非线性的,即便两个变量具有一一对应的关系,Pearson相关性也可能会接近 。

  • 2.卡方验证

卡方校验其实是数理统计中一种常用的校验两个变量独立性的方法。假设自变量有N种取值,因变量有M种取值,考虑自变量等于i且因变量等于j的样本频数的观察值与期望的差距,构建统计量:

不难发现,这个统计量的含义简而言之就是自变量对因变量的相关性。用sklearn中feature_selection库的SelectKBest类结合卡方检验来选择特征的代码如下:

from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
iris = load_iris()
X, y = iris.data, iris.target
#选择K个最好的特征,返回选择特征后的数据
X_new = SelectKBest(chi2, k=2).fit_transform(X, y)

sklearn.feature_selection模块中的类可以用于样本集中的特征选择/维数降低,以提高估计器的准确度分数或提高其在非常高维数据集上的性能
 

  • 互信息和最大信息系数 Mutual information and maximal information coefficient (MIC)

经典的互信息也是评价定性自变量对定性因变量的相关性的,互信息公式如下:

当 是0/1离散值的时候,这个公式如上。很容易推广到 是多个离散值的情况。这里的 , 和 都是从训练集上得到的。若问这个 公式如何得来,请看它的 距离(Kullback-Leibler)表述:

也就是说, 衡量的是 和 的独立性。如果它俩独立 ,那么 距离值为0,也就是 和 不相关了,可以去除 。相反,如果两者密切相关,那么 值会很大。在对 进行排名后,最后剩余的问题就是如何选择 个值(前 个 )。(后面将会提到此方法)我们继续使用交叉验证的方法,将 从 扫描到 ,取最大的 。
不过这次复杂度是线性的了。比如,在使用朴素贝叶斯分类文本的时候,词表长度 很大。
使用filiter特征选择方法,能够增加分类器精度。

想把互信息直接用于特征选择其实不是太方便:1、它不属于度量方式,也没有办法归一化,在不同数据及上的结果无法做比较;2、对于连续变量的计算不是很方便( 和 都是集合, , 都是离散的取值),通常变量需要先离散化,而互信息的结果对离散化的方式很敏感。

最大信息系数克服了这两个问题。它首先寻找一种最优的离散化方式,然后把互信息取值转换成一种度量方式,取值区间在 。minepy提供了MIC功能。

下面我们来看下 这个例子,MIC算出来的互信息值为1(最大的取值)。代码如下:

from minepy import MINE

m = MINE()
x = np.random.uniform(-1, 1, 10000)
m.compute_score(x, x**2)
print(m.mic())
  • 距离相关系数

距离相关系数是为了克服Pearson相关系数的弱点而生的。在 和 这个例子中,即便Pearson相关系数是 ,我们也不能断定这两个变量是独立的(有可能是非线性相关);但如果距离相关系数是 ,那么我们就可以说这两个变量是独立的。

方差选择法

过滤特征选择法还有一种方法不需要度量特征 和类别标签 的信息量。这种方法先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。

例如,假设我们有一个具有布尔特征的数据集,并且我们要删除超过80%的样本中的一个或零(开或关)的所有特征。布尔特征是伯努利随机变量,这些变量的方差由下式给出:

VarianceThreshold是特征选择的简单基线方法。它删除方差不符合某个阈值的所有特征。默认情况下,它会删除所有零差异特征,即所有样本中具有相同值的特征。代码如下:

from sklearn.feature_selection import VarianceThreshold
X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]
sel = VarianceThreshold(threshold=(.8 * (1 - .8)))
print(sel.fit_transform(X))

输出结果:

array([[0, 1],
       [1, 0],
       [0, 0],
       [1, 1],
       [1, 0],
       [1, 1]]) 

如预期的那样,VarianceThreshold已经删除了第一列,其具有 包含零的概率。

2.2 包裹式

 

Wrapper这里指不断地使用不同的特征组合来测试学习算法进行特征选择。先选定特定算法, 一般会选用普遍效果较好的算法, 例如Random Forest, SVM, kNN等等。

2.2.1

  • 前向搜索

前向搜索说白了就是每次增量地从剩余未选中的特征选出一个加入特征集中,待达到阈值或者 时,从所有的  中选出错误率最小的。过程如下:

  1. 初始化特征集  为空。
  2. 扫描  从  到 
    如果第  个特征不在  中,那么特征  和 放在一起作为  (即  )。
    在只使用  中特征的情况下,利用交叉验证来得到  的错误率。
  3. 从上步中得到的  个  中选出错误率最小的  ,更新  为  。
  4. 如果  中的特征数达到了  或者预定的阈值(如果有的话),
    那么输出整个搜索过程中最好的 ;若没达到,则转到 2,继续扫描。
  • 2.2.2后向搜索

既然有增量加,那么也会有增量减,后者称为后向搜索。先将  设置为  ,然后每次删除一个特征,并评价,直到达到阈值或者为空,然后选择最佳的  。

这两种算法都可以工作,但是计算复杂度比较大。时间复杂度为

  • 2.2.3递归特征消除法

递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。

 

 

2.3、嵌入(Embedded)特征选择

  • 基于惩罚项的特征选择法

通过L1正则项来选择特征:L1正则方法具有稀疏解的特性,因此天然具备特征选择的特性,但是要注意,L1没有选到的特征不代表不重要,原因是两个具有高相关性的特征可能只保留了一个,如果要确定哪个特征重要应再通过L2正则方法交叉检验。

  • 基于学习模型的特征排序

这种方法的思路是直接使用你要用的机器学习算法,针对每个单独的特征和响应变量建立预测模型。假如某个特征和响应变量之间的关系是非线性的,可以用基于树的方法(决策树、随机森林)、或者扩展的线性模型等。基于树的方法比较易于使用,因为他们对非线性关系的建模比较好,并且不需要太多的调试。但要注意过拟合问题,因此树的深度最好不要太大,再就是运用交叉验证。通过这种训练对特征进行打分获得相关性后再训练最终模型。

 

参考资料:https://zhuanlan.zhihu.com/p/32749489

 

你可能感兴趣的:(快手大数据比赛总结)