集成学习(上):任务二
掌握基本的回归模型、机器学习问题一般流程
1、什么是回归?
概念来源:19世纪80年代由英国统计学家郎西斯.高尔顿在研究父子身高关系提出来的,他发 现:在同一族群中,子代的平均身高介于父代的身高以及族群的平均身高之间。具体而言,高个 子父亲的儿子的身高有低于其父亲身高的趋势,而矮个子父亲的儿子身高则有高于父亲的身高的 趋势。也就是说,子代的身高有向族群平均身高"平均"的趋势,这就是统计学上"回归"的最初含 义。
2、回归的问题对象是什么?
研究的是因变量(目标)和自变量(特征)之间的关 系。
3、回归的用处是什么?
回归分析是一种预测性的建模技术,这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。
4、回归的目标是什么?
通常使用曲线/线 来拟合数据点,目标是使曲线到数据点的距离差异最小。
5、以线性回归为例:
线性回归就是回归问题中的一种,线 性回归假设目标值与特征之间线性相关,即满足一个多元一次方程。通过构建损失函数,来求解 损失函数最小时的参数w、b。
我们需要衡量真实值 与线性回归模型的预测值 之间的差距
(a) 最小二乘估计:
涉及的知识点:
L1,L2范数
线性均方误差是一个关于 w 的可微凸函数,即线性回归是一个凸优化问题,所以线性回归有唯一最优值,即
条件是L’(w) = 0
(b) 几何解释:
© 概率视角:假设噪声 ,因此: 我们使用极大似然估计MLE对参数w进行估计: 𝜖 ∽ 𝑁(0, 𝜎 ), 𝑦 = 𝑓(𝑤) + 𝜖 = 𝑥 + 𝜖 2 𝑤𝑇 𝑦|𝑥 , 𝑤 𝑁( 𝑥, )
6、线性回归的推广
(a) 多项式回归:线性回归可以对样本数据是非线性而只对参数是线性的
(b) 广义可加模型(GAM):
如果y与x不满足线性关系,即hθ(x1,x2,⋯,xn)不能用表达式θ0+θ1x1+θ2x2+⋯+θnxn来表示,但是通过某个单调可微的函数,如 g(y),使得
g(hθ(x1,x2,⋯,xn))=θ0+θ1x1+θ2x2+⋯+θnxn
GAM模型框架:
𝑦𝑖 = 𝑤0 + ∑ ( ) + 𝑗=1 𝑝 𝑓𝑗 𝑥𝑖𝑗 𝜖�
GAM模型的优点与不足: 优点:简单容易操作,能够很自然地推广线性回归模型至非线性模型,使得模型的预测精度 有所上升;由于模型本身是可加的,因此GAM还是能像线性回归模型一样把其他因素控制不 变的情况下单独对某个变量进行推断,极大地保留了线性回归的易于推断的性质。 缺点:GAM模型会经常忽略一些有意义的交互作用,比如某两个特征共同影响因变量,不过 GAM还是能像线性回归一样加入交互项 的形式进行建模;但是GAM模型本质上还 是一个可加模型,如果我们能摆脱可加性模型形式,可能还会提升模型预测精度,详情请看 后面的算法。
GAM模型实例介绍: 安装pygam:pip install pygam https://github.com/dswah/pyGAM/blob/master/doc/source/notebooks/quick_start.ipynb (https://github.com/dswah/pyGAM/blob/master/doc/source/notebooks/quick_start.ipynb)
© 局部加权回归
7、回归树
参考Regression Tree 回归树:https://zhuanlan.zhihu.com/p/82054400
目前,最流行的两类算法莫过于神经网络算法(卷积神经网络、循环神经网络、生成式对抗网络和图神经网络)与树形算法(随机森林、GBDT、XGBoost和LightGBM)。树形算法的基础就是决策树,由于其易理解、易构建、速度快等特点,被广泛的应用在数据挖掘、机器学习等领域。因此,决策树是经典的机器学习算法,很多复杂的机器学习算法都是由决策树演变而来。
实际上,回归树总体流程类似于分类树,分枝时穷举每一个特征的每一个阈值,来寻找最优切分特征和最优切分点,衡量的方法是平方误差最小化。分枝直到达到预设的终止条件为止。
当然,在处理具体的实际问题时,使用单一的回归树肯定是不够的。我们可以利用集成学习中的boosting框架,对回归树进行改良升级,得到的新模型就是提升树(Boosting Decision Tree),在进一步改造,就可以得到梯度提升树(Gradient Boosting Decision Tree,GBDT),再进一步可以升级为XGBoost或者LightGBM。我们在学习这些模型时,可以把它们归为一个学习系列,这样便于我们系统理解模型进展。
8、回归树与线性模型的比较:
线性模型的模型形式与树模型的模型形式有着本质的区别,具体而言,线性回归对模型形式 做了如下假定:
𝑓(𝑥) = 𝑤0 + ∑^𝑝 (𝑗=1 )(𝑤(𝑗)𝑥 (𝑗))
而回归树则是
𝑓(𝑥) = ∑ 𝐼(𝑥 ∈ ) 𝑚=1 𝐽 𝑐𝑚̂ 𝑅�那问 题来了,哪种模型更优呢?这个要视具体情况而言,如果特征变量与因变量的关系能很好的 用线性关系来表达,那么线性回归通常有着不错的预测效果,拟合效果则优于不能揭示线性 结构的回归树。反之,如果特征变量与因变量的关系呈现高度复杂的非线性,那么树方法比 传统方法更优。
树模型的优缺点:
(1)解释性强
(2)接近人的决策方式
(3)树模型能很好处理缺失值和异常值,对异常值不敏感,但是这个对线性模型来说却是致 命的。 树模型的预测准确性一般无法达到其他回归模型的水平,但是改进的方法很多。
9、支持向量机–SVR
支持向量机算法的核心思想:
寻找最中立的分离直线等价于寻找间隔最大的分离直线
SVR:宽容的支持向量回归(SVR)
介绍一种“宽容的”回归模型:支持向量回归(Support Vector Regression,SVR)
模型函数
支持向量回归模型的模型函数也是一个线性函数:y = w x + b y=wx+by=wx+b,但是和线性回归是两个不同的回归模型!
不同点在于:计算损失的原则不同,目标函数和最优化算法也不同。
————————————————
参考原文:https://blog.csdn.net/qq_41909317/article/details/88542892
模型精度的评价
(1) 方差(variance):
方差的意思是每一次使用不同的样本集,得到 f 估计的改变量。理想的情况下,用不同的数据集得到的 f相差应该不大,也就是方差很小。
方差的含义:方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影
(2) 偏差(bias)
偏差的意思是为了选择一个简单的模型逼近真实的函数而引入的误差,其构成非常复杂。
偏差的含义:偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。
偏差度量的是单个模型的学习能力,而方差度量的是同一个模型在不同数据集上的稳定性。
给定学习任务,为了取得好的泛化性能,则需使偏差较小,即能够充分拟合数据,并且使方差较小,即使得数据扰动产生的影响小。
一般而言,增加模型的复杂度,会增加模型的方差,但是会减少模型的偏差,我们要找到一个方差–偏差的权衡,使得测试均方误差最小,我们将在模型选择的章节中讨论。
以上是线性回归模型得理论知识
机器学习集成学习与模型融合
具体请参考链接:https://blog.csdn.net/qq_28168421/article/details/108413700
https://zhuanlan.zhihu.com/p/141690284
管道简化工作流
解释:Pipeline可以将许多算法模型串联起来,比如将特征提取、归一化、分类组织在一起形成一个典型的机器学习问题工作流
# 例子
from sklearn.preprocessing import StandardScaler # 用于进行数据标准化
from sklearn.decomposition import PCA # 用于进行特征降维
from sklearn.linear_model import LogisticRegression # 用于模型预测
from sklearn.pipeline import Pipeline
pipe_lr = Pipeline([('scl', StandardScaler()),
('pca', PCA(n_components=2)),
('clf', LogisticRegression(random_state=1))])
pipe_lr.fit(X_train, y_train)
print('Test Accuracy: %.3f' % pipe_lr.score(X_test, y_test))
y_pred = pipe_lr.predict(X_test)
from sklearn.pipeline import Pipeline # 管道简化工作流
pipe1 = Pipeline([['sc',StandardScaler()],['clf',clf1]])
pipe3 = Pipeline([['sc',StandardScaler()],['clf',clf3]])
集成学习库安装遇到问题
相关库:均在cmd窗口进行安装操作
import lightgbm as lgb
import xgboost as xgb
from catboost import CatBoostRegressor
问题:
1、安装慢
pip install xgboost
pip install catboost
pip install lightgbm
2、安装多次未成功
3、安装成功之后依然导入出错
解决:
1、使用清华镜像解决安装慢的问题
pip install catboost -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install ngboost -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install xgboost -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install lightgbm -i https://pypi.tuna.tsinghua.edu.cn/simple
3、
# 首先
pip uninstall xgboost
#然后重新
pip3 install xgboost
集成学习之catboost
一个超级简单并且又极其实用的boosting算法包Catboost,据开发者所说这一boosting算法是超越Lightgbm和XGBoost的又一个神器。
catboost有一下三个的优点:
1、 它自动采用特殊的方式处理类别型特征(categorical features)
2、 catboost还使用了组合类别特征,可以利用到特征之间的联系,这极大的丰富了特征维度。
3、 catboost的基模型采用的是对称树,同时计算leaf-value方式和传统的boosting算法也不一样,传统的boosting算法计算的是平均数,而catboost在这方面做了优化采用了其他的算法,这些改进都能防止模型过拟合。
参考链接:
https://www.jianshu.com/p/49ab87122562
https://blog.csdn.net/friyal/article/details/82758532
集成学习之LightGBM
https://www.hrwhisper.me/machine-learning-lightgbm/
调参、优化:
https://blog.csdn.net/qq_35679464/article/details/85223467?ops_request_misc=&request_id=&biz_id=102&utm_term=LightGBM&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-9-85223467.first_rank_v2_pc_rank_v29
(Light Gradient Boosting Machine)是一款基于决策树算法的分布式梯度提升框架。为了满足工业界缩短模型计算时间的需求,LightGBM的设计思路主要是两点:
减小数据对内存的使用,保证单个机器在不牺牲速度的情况下,尽可能地用上更多的数据;
减小通信的代价,提升多机并行时的效率,实现在计算上的线性加速。
由此可见,LightGBM的设计初衷就是提供一个快速高效、低内存占用、高准确度、支持并行和大规模数据处理的数据科学工具。
LightGBM是微软旗下的Distributed Machine Learning Toolkit (DMKT)的一个项目,由2014年首届阿里巴巴大数据竞赛获胜者之一柯国霖主持开发。虽然其开源时间才仅仅2个月,但是其快速高效的特点已经在数据科学竞赛中崭露头角。Allstate Claims Severity竞赛中的冠军解决方案里就使用了LightGBM,并对其大嘉赞赏。
算上的线性加速。
由此可见,LightGBM的设计初衷就是提供一个快速高效、低内存占用、高准确度、支持并行和大规模数据处理的数据科学工具。
LightGBM是微软旗下的Distributed Machine Learning Toolkit (DMKT)的一个项目,由2014年首届阿里巴巴大数据竞赛获胜者之一柯国霖主持开发。虽然其开源时间才仅仅2个月,但是其快速高效的特点已经在数据科学竞赛中崭露头角。Allstate Claims Severity竞赛中的冠军解决方案里就使用了LightGBM,并对其大嘉赞赏。