广义线性模型(二)

一、符号说明

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

新增符号说明:

其中,当时,;当时,

误差容忍度

:控制

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

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

          

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

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

          

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

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

三、贝叶斯岭回归

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

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

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

~,~,其中

3.1、贝叶斯岭回归示例

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

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

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

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

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

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

,其中,

~,默认值同贝叶斯岭回归。

4.1、ARD示例:

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

4.2、ARD优缺点

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

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

五、Logistic回归

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

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

带罚项的目标函数为:

带罚项的目标函数为:

对于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回归的最小化目标函数为:

其中当,;当时,

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

10.1、Huber示例

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

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

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

十一、多项式回归

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

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

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

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

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

11.1、多项式回归示例

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

首先数据集:

目标值:

基函数:

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

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


参考:《Scikit-Learn官方API》

你可能感兴趣的:(广义线性模型(二))