http://www.zhihu.com/question/31989952
连续特征的离散化:在什么情况下将连续的特征离散化之后可以获得更好的效果?
Q:CTR预估,发现CTR预估一般都是用LR,而且特征都是离散的。为什么一定要用离散特征呢?这样做的好处在哪里?
A:
在工业界,很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,这样做的优势有以下几点:
0、 离散特征的增加和减少都很容易,易于模型的快速迭代。(离散特征的增加和减少,模型也不需要调整,重新训练是必须的,相比贝叶斯推断方法或者树模型方法迭代快)
1、稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
2、离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;离散化后年龄300岁也只对应于一个权重,如果训练数据中没有出现特征"年龄-300岁",那么在LR模型中,其权重对应于0,所以,即使测试数据中出现特征"年龄-300岁",也不会对预测结果产生影响。特征离散化的过程,比如特征A,如果当做连续特征使用,在LR模型中,A会对应一个权重w,如果离散化,那么A就拓展为特征A-1,A-2,A-3...,每个特征对应于一个权重,如果训练样本中没有出现特征A-4,那么训练的模型对于A-4就没有权重,如果测试样本中出现特征A-4,该特征A-4也不会起作用。相当于无效。但是,如果使用连续特征,在LR模型中,y = w*a,a是特征,w是a对应的权重,比如a代表年龄,那么a的取值范围是[0..100],如果测试样本中,出现了一个测试用例,a的取值是300,显然a是异常值,但是w*a还是有值,而且值还非常大,所以,异常值会对最后结果产生非常大的影响。
3、逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;在LR模型中,特征A作为连续特征对应的权重是Wa。A是线性特征,因为y = Wa*A,y对于A的导数就是Wa,如果离散化后,A按区间离散化为A_1,A_2,A_3。那么y = w_1*A_1+w_2*A_2+w_3*A_3.那么y对于A的函数就相当于分段的线性函数,y对于A的导数也随A的取值变动,所以,相当于引入了非线性。
4、 离散化后可以进行特征交叉,加入特征A 离散化为M个值,特征B离散为N个值,那么交叉之后会有M*N个变量,进一步引入非线性,提升表达能力;
5、特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;按区间离散化,划分区间是非常关键的。
6、特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。(当使用连续特征时,一个特征对应于一个权重,那么,如果这个特征权重较大,模型就会很依赖于这个特征,这个特征的一个微小变化可能会导致最终结果产生很大的变化,这样子的模型很危险,当遇到新样本的时候很可能因为对这个特征过分敏感而得到错误的分类结果,也就是泛化能力差,容易过拟合。而使用离散特征的时候,一个特征变成了多个,权重也变为多个,那么之前连续特征对模型的影响力就被分散弱化了,从而降低了过拟合的风险。)
李沐曾经说过:模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。
http://www.zhihu.com/question/28641663/answer/41653367
机器学习中,有哪些特征选择的工程方法?
特征选择是特征工程中的重要问题(另一个重要的问题是特征提取),坊间常说:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程尤其是特征选择在机器学习中占有相当重要的地位。机器学习做得好不好,被数据和模型共同影响,比如说,数据本身不可分,那么SVM等分类算法再牛逼,也不能完全正确分开。数据集本身是有内在特性的,数据集本身的特征决定了机器学习的上限。所以,一个机器学习算法可能在数据集A上效果很好,但在数据集B上效果很差,这是很正常的现象,因为数据集A和B的内在特性不一样。我以前学别人使用GBDT提取特征,别人使用GBDT提取特征,可以使分类效果提升,但是,我使用了GBDT提特征,并没有使效果提升。因为数据集特性不一样。所以,数据集的特性决定了算法能达到效果的上限。
通常而言,特征选择是指选择获得相应模型和算法最好性能的特征集,工程上常用的方法有以下:
1.计算每一个特征与响应变量的相关性:工程上常用的手段有计算皮尔逊系数和互信息系数,皮尔逊系数只能衡量线性相关性而互信息系数能够很好地度量各种相关性,但是计算相对复杂一些,好在很多toolkit里边都包含了这个工具(如sklearn的MINE),得到相关性之后就可以排序选择特征了.(其实就是计算输出关于输入的导数,如果某个特征很大程度上影响了输出,那么该特征就会比较重要)。
2. 构建单个特征的模型,通过模型的准确性为特征排序,借此来选择特征,另外,记得JMLR'03上有一篇论文介绍了一种基于决策树的特征选择方法,本质上是等价的。当选择到了目标特征之后,再用来训练最终的模型;
3. 通过L1正则项来选择特征:L1正则方法具有稀疏解的特性,因此天然具备特征选择的特性,但是要注意,L1没有选到的特征不代表不重要,原因是两个具有高相关性的特征可能只保留了一个,如果要确定哪个特征重要应再通过L2正则方法交叉检验;
4. 训练能够对特征打分的预选模型:RandomForest和Logistic Regression等都能对模型的特征打分,通过打分获得相关性后再训练最终模型;
5. 通过特征组合后再来选择特征:如对用户id和用户特征最组合来获得较大的特征集再来选择特征,这种做法在推荐系统和广告系统中比较常见,这也是所谓亿级甚至十亿级特征的主要来源,原因是用户数据比较稀疏,组合特征能够同时兼顾全局模型和个性化模型,这个问题有机会可以展开讲。
6. 通过深度学习来进行特征选择:目前这种手段正在随着深度学习的流行而成为一种手段,尤其是在计算机视觉领域,原因是深度学习具有自动学习特征的能力,这也是深度学习又叫unsupervisedfeature learning的原因。从深度学习模型中选择某一神经层的特征后就可以用来进行最终目标模型的训练了。
这是结合sklearn的特征选择方法: http://www.cnblogs.com/zhizhan/p/5035306.html
在广告LR模型中,为什么要做特征组合?
在业界,LR模型之所以很受欢迎,主要是因为LR模型本质是对数线性模型,实现简单,易于并行,大规模扩展方便,迭代速度快,同时使用的特征比较好解释,预测输出在0与1之间契合概率模型。(模型的可解释性举例,比如A-B的权重比较大,A代表用户,B代表物品,那么可以认为A是对B比较感兴趣的)但是,线性模型对于非线性关系缺乏准确刻画,特征组合正好可以加入非线性表达,增强模型的表达能力。另外,广告LR中,基本特征可以认为是用于全局建模,组合特征更加精细,是个性化建模,因为在这种大规模离散LR中,单对全局建模会对部分用户有偏,对每一用户建模又数据不足易过拟合同时带来模型数量爆炸,所以基本特征+组合特征兼顾了全局和个性化。比如特征向量中,有用户A,B,C,物品E,F,G。基本的特征A,B.C.E.F.G对应的权重,对应的是每个对象的偏置权重,但如果A偏好E,B偏好F,那么组合特征A-E,B-F就是对用户的个性进行建模,组合特征A-E,B-F的权重就是代表A对E的喜好,和B-F的喜好。
http://www.zhihu.com/question/34271604
Tips
什么是卡方检验?用方差来衡量某个观测频率和理论频率之间差异性的方法
什么是皮尔森卡方检验?这是一种最常用的卡方检验方法,它有两个用途:1是计算某个变量对某种分布的拟合程度,2是根据两个观测变量的Contingency table来计算这两个变量是否是独立的。主要有三个步骤:第一步用方差和的方式来计算观测频率和理论频率之间卡方值;第二步算出卡方检验的自由度(行数-1乘以列数-1);第三步比较卡方值和对应自由度的卡方分布,判断显著性。
什么是p-value?简单地说,p-value就是为了验证假设和实际之间一致性的统计学意义的值,即假设检验。有些地方叫右尾概率,根据卡方值和自由度可以算出一个固定的p-value,
什么是响应变量(response value)?简单地说,模型的输入叫做explanatroy variables,模型的输出叫做response variables,其实就是要验证该特征对结果造成了什么样的影响
什么是度量(metric)?
什么是零假设(null hypothesis)?在相关性检验中,一般会取“两者之间无关联”作为零假设,而在独立性检验中,一般会取“两者之间是独立”作为零假设。与零假设相对的是备择假设(对立假设),即希望证明是正确的另一种可能。
什么是多重共线性?
什么是grid search?