在各类比赛中经常出现预测回归问题,一般使用scikit-learn的模型,本文就对这些类库的使用做一个总结,总结时注重自己做比赛中的使用经验。
1. Ordinary Least Squares(最小二乘法)
最简单的线性模型,损失函数是平方差损失,常用梯度下降法求解参数。
使用要点:这个模型不像其他模型都配有CV交叉验证,所以需要我们自己选择是算法自己默认参数还是Grid寻找最优参数。
使用场景:模型容易受到异常点影响,性能无法保证,适合当做最基础的线性模型。
2. Ridge regression and classification(岭回归)
在最小二乘法的基础加入L2正则化,使大量参数权重变小。
使用要点:惩罚系数alpha默认是1,需要自己调节alpha参数;可以做分类问题,分类时只有正类和负类,输出的是概率,类似Logistic算法
使用场景:如果普通的线性函数效果不好的话,可以试试这个函数。Ridge函数可以特征之间存在相关性时保持稳定性和可靠性。但是因为需要自己指定参数,所以通常换成RidgeCV函数。关于稳定性和可靠性的分析在博客中有详细的解释。
3. Lasso(拉索算法)
在最小二乘法的基础上加入L1正则化,使大量参数为0,使用坐标下降法迭代求解参数。
使用要点:惩罚系数alpha和Ridge默认系数一样,需要自己调节参数;没有提供分类问题的解决方案。
使用场景:因为会使大量的特征失去作用,所以很少在比赛和科研中使用。同时网上也说可以做特征选择,但是通常会使留下的特征数量太少,所以也很少作为特征选择算法。
4. Multi-task Lasso(多任务学习拉索算法)
输入标签的形式是(n_samples,target), 使用同一批数据联合训练多个Lasso回归器。和Lasso唯一的区别是输入y不同。
基本没有用到过,在网上也没有查到资料。
5. Elastic-Net(弹性神经网络)
函数形式:$$min {w} frac{1}{2 n{ ext {samples }}}|X w-y|{2}^{2}+alpha
ho|w|{1}+frac{alpha(1-
ho)}{2}|w|_{2}^{2}$$
在线性函数中同时加入L1正则化和L2正则化,用参数alpha调节,如果alpha=1表示Lasso算法,如果alpha=0,表示Ridge算法。继承了Ridge在循环下的稳定性
使用要点:需要自己调节参数,可以用Elastic_CV函数自动搜索最优参数。
使用场景:在比赛过程中,相比Lasso和Ridge过多和过少的参数,Elastic算法往往能取得良好的效果。
6. Multi-task Elastic-Net(多任务的弹性神经网络)
MultiTaskElasticNet类和MultiTaskLasso类的模型是相同的。区别在于损失函数不同。具体没有使用过。
7. Least Angle Regression(角回归算法)
前向选择回归是按照投影和残差的方向走,前向梯度回归是按照最接近的变量方向走,最小角回归是按照新特征和原来特征的角平分线方向走,保留前向梯度的精确行,优化前行梯度一步一步迭代的过程。简介博客, 公式推导博客
使用要点:计算速度前向选择算法一样;样本的噪声极为敏感
使用场景:适合高维数据回归。
8. LARS Lasso(角回归拉索算法)
相关的理论较深,先放篇博客,以后在看
9. Orthogonal Matching Pursuit(匹配追踪算法)
MP算法是稀疏表征中用于稀疏求解的最基本方法之一.OMP是正交匹配追踪算法。每次用内积找到和残差最接近的向量作为贡献最大的向量,直到没有特征或者参数小于阈值。具体讲解可参考文章
使用场景:适合稀疏回归问题。
10. Bayesian Regression(贝叶斯回归)
用训练数据得到似然函数likelihood,再加上一个先验分布prior,利用贝叶斯公式得到一个后验分布posterior。对于一个新的测试数据x,用之前得到的posterior作为权重在整个参数空间里计算一个加权积分,得到一个预测分布。贝叶斯回归对数据有自适应能力,可以重复的利用实验数据,并防止过拟合。
使用要点:得到的参数接近0。
使用场景:确定数据分布的情况,贝叶斯回归更能取得良好的效果。
11. Logistic regression(逻辑斯蒂回归)
将线性回归算法的结果放入sigmoid函数实现分类功能,如果输出大于0.5,结果被分为正类,如果输出小于0.5,结果被分为负类。
使用要点:LR只能做分类问题!!默认的正则化项时L2,多分类的策略是OVR,求解参数算法:liblinear,sag,saga,newton-cg,lbfs算法。其中liblinear适合小数据,sag和saga适合大数据,sag和saga需要数据归一化。liblinear算法适合两类分类问题,其他优化算法适合多类分类问题。
使用场景:做比赛预测广告点击次数,次数是正整数和0,LR算法把次数当作是类别,整体当作回归问题预测结果。预测的结果类别和训练数据的类别完全一致。这样做只能取得一般的效果。作为完全的分类问题模型,LR的效果不如SVM的分类效果。
12. Stochastic Gradient Descent - (随机梯度下降算法)
只在神经网络算法中用到过
13. Perceptron(感知机)
感觉用感知机不如直接使用神经网络,哪怕只有一层的神经网络效果也比感知机强。
14. Passive Aggressive Algorithms(被动攻击算法)
Passive Aggressive Algorithms指代一系列大规模在线学习算法。可以解决分类和回归问题。具体推导参考github
使用场景:大规模流式在线学习
15. Robustness regression: outliers and modeling errors(稳健回归算法)
和一般回归分析方法相比,鲁棒回归(Robust Regression)不容易受离群值(outlier)和错误点(Error point)的影响。
常用有两种文件回归算法:RANSAC随机采样一致性算法和Theil-Sen Regression泰尔森回归算法。
使用场景:适合有异常数据的回归问题
16. Polynomial regression: extending linear models with basis functions
算法计算不同特征的组合的结果,比如只有两个特征(X_1)和(X_2),组合交叉形成(X_1,X_2,X_1X_2,X_2X_1,X_1^{2},X^{2}_{1})
使用要点:可以指定只要交叉特征
使用场景:做推荐算法比赛时常用到这个函数,省去人工交叉特征的麻烦。