美文网首页
广义线性模型(二)

广义线性模型(二)

作者: Powehi_ | 来源:发表于2019-06-29 21:43 被阅读0次

    一、符号说明

    上篇:广义线性模型(一) - 简书

    新增符号说明:

    l_{0} 先验正则化:||\gamma ||_0=\sum_{1}^nx_i

    其中,当w_i!=0时,x_i=1 ;当w_i=0时,x_i=0

    tol:误差容忍度

    I_p:p阶单位方阵

    \alpha,\lambda服从gamma分布

    N:高斯分布

    A:对角矩阵

    \rho :控制l_1与l_2正则化的强度,若\rho =1,意味着你想要获得一个稀疏向量

    二、正交匹配追踪法(OMP)

    OMP算法近似拟合了一个带限制的线性模型,该限制影响模型的l_0范数,它可以找到近似非0元素的最优向量解。其最小化目标函数为:

    \min_{ }||X\gamma -y||_{2}^2    subject   to    ||\gamma ||_0≤n(n为非0元素的个数)

    是的,它和最小二乘法很相似,区别在于最小二乘法目标是使得残差平方和最小,而OMP是使得最终的权值向量中小于等于你指定的非0元素个数,所以每次迭代都需要重新计算残差,所以注定OMP的复杂度很高。

    当然,你也可以指定一个误差容忍度来最小化||\gamma ||_0,其目标函数为:

    min||\gamma ||_0    subject  to    ||X\gamma -y||_2^2≤tol

    OMP主要运用在从带噪信号中提取稀疏信号,我们不妨将OMP运用于之前的例子,噪声数据量为1/2,容忍度设为0.01,经检验,OMP将原始维度5000维降到了76维,其R^2分数如下:

    看,结果比之前的任何算法都要高,就是速度慢,当然设置不同的容忍度或者不同的n都可能有不同的结果。

    三、贝叶斯岭回归

    贝叶斯回归可以用于在预估阶段的参数正则化,正则化参数的选择不是人为的选择,而是手动调节数据值来实现。在岭回归中使用l_2正则项,其实是假定了w为高斯先验分布。

    w的先验参数可以通过球面高斯公式得出:

    p(w|\lambda)=N(w|\alpha,\lambda^{-1}I_p)

    通过此公式得到的w先验模型称为贝叶斯岭回归,w服从高斯分布,之所以叫贝叶斯岭回归是因为它的两个超参数均值α与标准差λ服从gamma分布,在岭回归中使用的l_2正则项假定了w为高斯先验分布,而gamma分布又与高斯分布成共轭先验关系,所以其本质与岭回归很相似,所以称为贝叶斯岭回归。对于α与λ,其先验分布默认为:

    α~\Gamma (α_1, α_2)λ~\Gamma (λ_1,λ_2),其中\alpha _1=\alpha _2=\lambda _1=\lambda _2=10^{-6}

    3.1、贝叶斯岭回归示例

    还是一样的数据集,参杂一半的噪声,经检验,贝叶斯岭回归对于高维数据集并没有压缩维度,意味着权值向量的每一元素都是非0元素,且最后的分数很低,大概为0.016。于是,我又进一步实验,将数据维度变为2000*50,分数几乎接近100%,并且没有压缩维度。

    3.2、贝叶斯岭回归的优缺点

    优点:对于病态数据的鲁棒性好、精确度高。

    缺点:速度慢,不适用于高维数据。

    四、主动相关决策理论(ARD)

    ARD与贝叶斯岭回归很相似,唯一不同的是ARD会产生更稀疏的权值向量。ARD弱化了w高斯分布为球形的先验假设,即假设w分布为钰轴平行的椭圆高斯分布,每个权值w_i从一个中心在0点,方差为\lambda_i的高斯分布中采样得到。其w的先验分布公式为:

    p(w|\lambda=N(w|0,A^{-1}),其中,diag(A)=\lambda=(\lambda_1,\lambda_2,..,\lambda_p)

    \lambda_i~\Gamma (\lambda_1,\lambda_2),默认值同贝叶斯岭回归。

    4.1、ARD示例:

    与岭回归数据一样,经检验,该算法将50维数据降到10维,并且效果与贝叶斯回归差不多,也是几乎接近100%。但是博主也发现了它的另一个缺点:慢!比贝叶斯回归要慢,调参的需要注意将迭代次数调到10此左右。

    4.2、ARD优缺点

    优点:能够得到稀疏向量。

    缺点:不适用于大型数据集,而且相当慢。

    五、Logistic回归

    请注意:虽然名字中带有回归,然而这是一个分类算法。

    Logistic回归既可以选l_1正则化,也可以选l_2正则化,也可以将l_1正则化与l_2正则化相互组合。

    l_2罚项的目标函数为:

    arg\min_{w ,c}\frac{1}{2} w^Tw+C\sum_{i=1}^nlog(e^{-y_i(X_i^Tw+C)}+1)

    l_1罚项的目标函数为:

    arg\min_{w ,c}||w||_1+C\sum_{i=1}^nlog(e^{-y_i(X_i^Tw+C)}+1)

    l_1与l_2的组合:

    arg\min_{w ,c}\frac{1-\rho }{2}w^Tw +\rho ||w||_1+C\sum_{i=1}^nlog(e^{-y_i(X_i^Tw+C)}+1)

    对于sklearn中求解器的选择,我们一般选择'saga',在一个经过缩放的数据集上,它的效果是最好的。

    5.1、Logistic示例

    分类数据集大小为2000*50,二分类,经检验,结果如下:

    随机数据集分类性能报告

    我们将其运用到鸢尾花数据集,看看效果:

    鸢尾花数据集效果

    大家也可以尝试其它不同的数据集。

    六、随机梯度下降(SGD)

    SGD在样本数量与特征数量都很大时很有用,它既可以用于分类,也可以用于回归。通过使用不同的损失函数,支持不同的罚项。例如,设定loss='log',则它拟合的就是一个Logistic回归模型,设定loss='hinge',则它拟合的就是SVM模型。

    6.1、SGD示例

    例如,对于鸢尾花数据集,我们使用loss='hinge'的效果与loss='log'进行对比

    loss='log' loss='hinge'

    两者logistic更胜一筹,但是对于单独使用Logistic回归,效果似乎差远了,问题就在于这个随机上,它牺牲更高的正确度来换取更短的收敛时间。

    七、感知器(Perceptron)

    感知器是一种适用于大规模学习的简单算法。默认情况下,该算法无需设置学习率,不需要正则化处理,仅使用错误样本来更新模型。

    7.1、感知器示例

    根据官网的API我们通过二百万个数据来比较SGD与感知器的运行时间,其结果如下:

    SGD VS 感知器

    官网API说,感知器要比SGD略快,不晓得是哪里出了问题,但是最后的模型效果是胜于SGD的,读者也可以动手去实践下,如果有读者知晓原因,烦请告诉博主。

    八、被动攻击算法(Passive Aggressive)

    被动攻击算法是大规模学习的一类算法,它也也不需要手动输入学习率,但是需要正则化。

    8.1、被动攻击算法示例

    依旧是二百万个数据:

    感知器VS被动攻击算法

    可以看出,被动攻击算法时间略长,但是模型的正确率和召回率都比感知器的高,各有利弊吧。

    九、稳健回归:处理离群点和模型错误

    稳健回归特别适用于回归模型包含损坏数据的情况,如离群点或模型中的错误。稳健拟合的一个重要概念就是崩溃点,即拟合模型所能承受的离群值最大比例。

    注意:在高维数据下,稳健拟合的效果可能会很差。

    对于稳健回归预测器的选择,推荐选择RANSAC。RANSAC中文名为随机抽样一致性算法。它是一种非确定性算法,以一定概率输出一个可能的合理结果,依赖于迭代次数,该算法主要解决线性或非线性回归问题,在计算机视觉摄影测绘领域尤为流行。算法从全体样本输入中分出一个局内点集合,全体样本可能由于测量错误或对数据的假设错误而含有噪点、离群点。最终的模型仅从这个局内点集合中得出。

    9.1、稳健回归示例

    我们将稳健回归与贝叶斯岭回归作个对比:

    稳健回归VS贝叶斯岭回归

    运行时间下面是决定系数,可以看出来,两个算法效果差不多。

    十、Huber回归

    Huber回归与岭回归不同,因为它对于被分为异常值的样本应用了一个线性损失。如果某个样本的绝对误差小于某一阈值,样本就被分为内围值。但该算法又不同于稳健回归,因为它没有忽略异常值的影响,并分配给异常值较小的权重。Huber回归的最小化目标函数为:

    arg\min_{w,\sigma }\sum_{i=1}^n(\sigma +H_m(\frac{X_iw-y_i}{\sigma } )\sigma)+\alpha||w||_2^2

    其中当|z|<\epsilon 时H_m(z)=z^2;当|z|\geq\epsilon 时,H_m(z)=2\epsilon |z|-\epsilon ^2

    \epsilon 就是你设的阈值,建议设置为1.35以实现95%的统计效率。

    10.1、Huber示例

    我们将Huber回归、岭回归、稳健回归三者对比下:

    岭回归 VS 稳健回归 VS Huber回归

    可以看出来,Huber回归时间较长,三者决定系数都差不多。

    十一、多项式回归

    机器学习中一种常见的模式,是使用线性模型训练数据的非线性函数。这种方法保持了一半快速的线性方法的性能,同时允许它们适应更广泛的数据范围。例如,我们有一个以下的双变量线性回归方程(基函数):

    \hat{y} (w,x)=w_0+w_1x_1+w_2x_2

    为了防止欠拟合,我们可以使得这个模型更加复杂:

    \hat{y} (w,x)=w_0+w_1x_1+w_2x_2+w_3x_1x_2+w_4x_1^2+w_5x_2^2

    由此,我们可以创造一个新的变量:

    z=[x_1,x_2,x_1x_2,x_1^2,x_2^2]

    那么,问题就可以转换成:

    \hat{y} (w,z)=w_0+w_1z_1+w_2z_2+w_3z_3+w_4z_4+w_5z_5

    该方程依旧是线性的,所以我们可以通过组合基函数的特征,建立高维线性方程,适应更广泛的数据。比如,多项式回归可以很方便的解决异或问题。

    11.1、多项式回归示例

    我们运用多项式回归解决异或问题:

    首先数据集:X=[[0,0][0,1],[1,0],[1,1]]

    目标值:y=[0,1,1,0]

    基函数:\hat{y} =w_0+w_1x_1+w_2x_2

    事实证明,你无法找到这样的基函数去准确的拟合这个数据集,但是我们通过组合特征可以做到。根据异或表达式:y=x_1\bar{x}_2+\bar{x}_1 x_2,由于特征量都是布尔代数,所以“非”很容易实现。现实中,多项式回归的特征组合可能需要多次尝试,以找到最合适的特征组合,接着就可以用其它回归算法进行拟合了。

    如有错误,请指正;如有疑问,请留言。


    参考:《Scikit-Learn官方API》

    相关文章

      网友评论

          本文标题:广义线性模型(二)

          本文链接:https://www.haomeiwen.com/subject/svrnqctx.html