当前位置: 首页 > 科技观察

干货!机器学习中5个必知的回归算法!

时间:2023-03-21 01:33:14 科技观察

说到回归算法,我想很多人都会想到线性回归,因为它很容易理解,也很简单。然而,线性回归由于其基本功能和有限的移动自由度,通常不适用于真实世界的数据。事实上,它只是在评估和研究新方法时经常被用作比较的基准模型。在现实场景中,我们经常会遇到回归预测问题。今天给大家总结分享5个回归算法。1.神经网络回归理论神经网络非常强大,但它们通常用于分类。信号通过神经元层并被概括为几个类别。但是,通过更改最后一个激活函数,它们可以非常快速地适应回归模型。每个神经元通过激活函数传递前一个连接的值,从而达到泛化和非线性的目的。常用的激活函数:Sigmoid或ReLU函数。通过用线性激活函数替换最后一个激活函数(输出神经元),可以将输出映射到固定类之外的各种值。这样,输出不是将输入分类到任一类别的可能性,而是神经网络放置观察值的连续值。从这个意义上说,它就像是线性回归的神经网络补充。神经网络回归具有非线性的优点(除了复杂性),可以在神经网络中通过sigmoid等非线性激活函数更早的引入神经网络。然而,由于ReLU忽略负值之间的相对差异,过度使用ReLU作为激活函数可能意味着模型倾向于避免输出负值。这可以通过限制ReLU的使用并添加更多负的适当激活函数来解决,或者在训练前将数据归一化到严格的正范围。实现使用Keras,我们构建了以下人工神经网络结构,只要最后一层是带有线性激活层的密集层或只是一个线性激活层即可。model=Sequential()model.add(Dense(100,input_dim=3,activation='sigmoid'))model.add(ReLU(alpha=1.0))model.add(Dense(50,activation='sigmoid'))model.add(ReLU(alpha=1.0))model.add(Dense(25,activation='softmax'))#IMPORTANTPARTmodel.add(Dense(1,activation='linear'))一直以来神经网络的问题是它的高方差和过度拟合的倾向。在上面的代码示例中,有许多非线性源,例如SoftMax或Sigmoid。如果你的神经网络在具有纯线性结构的训练数据上表现良好,最好使用修剪决策树回归,它模仿神经网络的线性和高可变性,但让数据科学家更多地控制深度、宽度和其他属性来控制过拟合。2.决策树回归理论决策树中的分类和回归非常相似,因为两者都是通过构建是/否节点的树来工作的。虽然分类结束节点产生单个类值(例如,二元分类问题为1或0),但回归树以连续值结束(例如4593.49或10.98)。由于回归作为机器学习任务的特异性和高度可变性,需要仔细修剪决策树回归器。但是,它做回归的方式是不规则的,而不是连续计算值。因此,应该对决策树进行剪枝,使其具有最大的自由度。实现决策树回归可以在sklearn中轻松创建:fromsklearn.treeimportDecisionTreeRegressormodel=DecisionTreeRegressor()model.fit(X_train,y_train)由于决策树回归参数非常重要,建议使用sklearn的GridCV参数搜索优化工具来寻找正确的模型。准则。在正式评估性能时,使用K折测试而不是标准训练拆分,以避免后者的随机性干扰高方差模型的精细结果。3.LASSO回归理论LASSO回归是线性回归的一种变体,特别适用于具有多重共线性(元素之间有很强的相关性)的数据。它使部分模型选择自动化,例如变量选择或参数消除。缩小尺度的过程为回归模型增加了许多好处:对真实参数的估计更准确和稳定。减少抽样和非抽样误差。空间波动更平滑。LASSO不是像神经网络的高方差方法和决策树回归那样通过调整模型的复杂性来补偿数据的复杂性,而是试图通过变形空间来降低数据的复杂性,从而可以通过简单的回归技术。在此过程中,LASSO会自动帮助消除或扭曲低方差方法中高度相关和冗余的特征。LASSO回归使用L1正则化,这意味着它按绝对值对误差进行加权。这种正则化通常会产生系数较少的稀疏模型,这使其具有可解释性。LASSO回归在sklearn中实现,带有一个交叉验证模型,可以在许多具有不同基本参数和训练路径的训练模型中选择性能最佳的模型,从而自动化需要手动完成的任务。fromsklearn.linear_modelimportLassoCVmodel=LassoCV()model.fit(X_train,y_train)4.岭回归理论岭回归与LASSO回归非常相似,因为它应用收缩。Ridge和LASSO回归都非常适用于具有大量相互不独立(共线)特征的数据集,但两者最大的区别是Ridge利用了L2正则化。由于L2正则化的性质,系数越来越接近。归零,却不能归零。正因为如此,如果您想对每个对优先级影响较小的变量进行优先级排序,Ridge是更好的选择。如果您想在模型中考虑多个变量,且每个变量都具有中等到较大的影响,则LASSO是更好的选择。可以在sklearn中实现Ridge回归,如下所示。与LASSO回归一样,sklearn可以实现交叉验证以在众多训练模型中选择最佳模型。fromsklearn.linear_modelimportRidgeCVmodel=Ridge()model.fit(X_train,y_train)5.ElasticNet回归理论ElasticNet试图通过结合L1和L2正则化来利用Ridge回归和LASSOb回归中的最佳方法。LASSO和Ridge提出了两种不同的正则化方法。λ是控制惩罚强度的转向因子。如果λ=0,则目标变得类似于简单线性回归,从而获得与简单线性回归相同的系数。如果λ=∞,由于系数平方的无限权重,系数将为零。小于零的值使目标无限大。如果0<λ<∞,λ的大小决定了目标不同部分的权重。除了λ参数外,ElasticNet还增加了一个额外的参数α,它衡量L1和L2正则化应该如何“混合”:当α等于0时,模型是纯岭回归模型,而当α等于1时,即纯LASSO回归模型。“混合因子”α简单地决定了在损失函数中应该考虑多少L1和L2正则化。实现可以使用sklearn的交叉验证模型实现ElasticNet:fromsklearn.linear_modelimportElasticNetCVmodel=ElasticNetCV()model.fit(X_train,y_train)