版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章
朴素贝叶斯分类器生成式分类器vs.判别式分类器
大纲生成式分类器简介朴素贝叶斯分类器朴素贝叶斯分类器vs.判别式分类器
生成式分类器vs.判别式分类器
生成式分类器大纲生成式分类器简介朴素贝叶斯分类器朴素贝叶斯分类器vs.判别式分类器朴素贝叶斯(NaiveBayesClassifier,NBC)
朴素贝叶斯模型训练:参数估计
朴素贝叶斯模型训练:参数估计
朴素贝叶斯的训练:先验分布
朴素贝叶斯的训练:先验分布
朴素贝叶斯的训练:先验分布
多类分类任务中类先验分布的参数估计
两类分类任务中类先验分布的参数估计
最大后验估计后验均值估计朴素贝叶斯模型训练:参数估计
NBC——二值特征
textinformationidentifyminingminedisusefultofromappledeliciousD1111101110001D2110011101001D3000001000110
Sklearn中的实现:BernoulliNBNBC
——二值特征朴素贝叶斯大大减少了模型的参数量无独立假设:条件独立假设:
…NBC
——二值特征
朴素贝叶斯模型训练:参数估计
NBC
——类别型特征
Sklearn中的实现:CategoricalNB
例:社区账号的真实性判断例:社区账号的真实性判断——模型训练例:SNS账号真实性判断日志密度好友密度是否使用真实头像账号是否真实ssnonoslyesyeslmyesyesmmyesyeslmyesyesmlnoyesmsnonolmnoyesmsnoyesssyesno
2.类条件:
例:社区账号的真实性判断——模型训练例:SNS账号真实性判断日志密度好友密度是否使用真实头像账号是否真实ssnonoslyesyeslmyesyesmmyesyeslmyesyesmlnoyesmsnonolmnoyesmsnoyesssyesno1.类先验
2.类条件:
例:社区账号的真实性判断——模型训练例:SNS账号真实性判断日志密度好友密度是否使用真实头像账号是否真实ssnonoslyesyeslmyesyesmmyesyeslmyesyesmlnoyesmsnonolmnoyesmsnoyesssyesno1.类先验分布的参数
2.类条件分布的参数:
例:社区账号的真实性判断——测试模型训练好后,对新的用户
日志密度为m,好友密度为m,使用真实头像判断该用户的社区帐号是否真实
是真实账号
朴素贝叶斯模型训练:参数估计
NBC——多项分布特征
Sklearn中的实现:MultinomialNB朴素贝叶斯模型训练:参数估计
当特征取值为连续值,且在类边缘分布为高斯分布时,注意:不是所有的连续特征均可假设为高斯分布NBC——连续特征(高斯分布)
Sklearn中的实现:GaussianNB
NBC——连续特征(高斯分布)
似然函数对参数求偏导数:NBC——连续特征(高斯分布)
似然函数对参数求偏导数:NBC——连续特征(高斯分布)
Sklearn中的朴素贝叶斯实现
案例:新闻文档分类NBC_News.ipynb新闻类别PrecisionRecallF1-scoreSupportalt.atheism0.970.940.9589comp.graphics0.790.840.8199comp.os.ms-windows.misc0.890.910.90130comp.sys.ibm.pc.hardware0.860.800.83109comp.sys.mac.hardware0.920.920.92117comp.windows.x0.920.890.91118misc.forsale0.850.950.90117rec.autos0.950.940.95121rec.motorcycles0.960.970.97119rec.sport.baseball0.981.000.99113rec.sport.hockey1.000.960.98129sci.crypt0.960.990.98109sci.electronics0.910.930.92120sci.med0.990.910.95123sci.space0.970.970.97119soc.religion.christian0.930.980.95128talk.politics.guns0.970.960.97120talk.politics.mideast1.001.001.00100talk.politics.misc0.940.940.94106talk.religion.misc0.960.840.9077avg/total0.940.940.942263案例:新闻文档分类第8章
决策树大纲决策树简介树的构建划分准则剪枝决策树模型是一种树状模型,可用于分类或回归树:分级,将一个复杂问题转化为若干个简单问题来解决(分而治之)对多类分类任务和多峰分布数据尤其适合树:由结点和有向边组成
结点:特征空间子集
边:划分规则
从根结点到叶子结点的有向边代表了一条决策路径。
决策树的路径是互斥并且完备的决策树简介决策树可视化工具:dtreeviz
https://explained.ai/decision-tree-viz/index.html/parrt/dtreeviz/tree/master例:鸢尾花分类的决策树叶子结点叶子结点叶子结点例:决策树用于回归大纲决策树简介树的构建划分准则剪枝决策树构建初始化:构建根结点,将所有训练数据放在根结点,并根结点加入叶子结点列表;若叶子结点列表为空,算法结束,返回生成的决策树;否则从叶子结点列表中挑选1个叶子结点,
2.1:若该叶子结点的样本集合已足够纯净,计算该叶子结点的预测值,并将其从叶子结点列表中删除(不再划分);
2.2:否则,对该叶子结点进行近一步划分:
(1)对每个特征的每个可能的划分方式,尝试将该结点的样本集合进行划分,计算划分后数据的纯净度和划分的分数;(2)从第(1)步所有的划分中,选择一个最优划分(分数最高),将训练数据划分成若干子集,每个子集为当前结点的子结点,并将这些子结点加入叶子结点列表,同时将当前结点从叶子结点列表中删除;决策树构建选择一个合适的树结构
二叉树、多叉树确定在每个非叶子结点上要使用的特征所有特征(训练性能更好)、随机选择特征子集(更快,测试性能可能也不差)在每个非叶子结点上选择合适的决策规则划分点的选择:精确搜索/穷举所有可能的划分点(训练性能更好)、近似搜索/直方图(更快,测试性能可能也不差)划分点的评价准则:信息熵增益、信息熵增益率、Gini指数、带正则的Gini指数停止划分条件足够纯净、最大深度、最大叶子结点数目、结点的最小样本数目、…剪枝大纲决策树简介树的构建划分准则剪枝
决策树熵&经验熵
条件熵&经验条件熵
信息增益
划分前:经验信息熵为1划分后:经验信息熵为0例:信息增益日志密度L好友密度F是否使用真实头像H账号是否真实Rssnonoslyesyeslmyesyesmmyesyeslmyesyesmlnoyesmsnonolmnoyesmsnoyesssyesno
日志密度L:
账号真实的概率账号不真实的概率
信息增益日志密度L好友密度F是否使用真实头像H账号是否真实Rssnonoslyesyeslmyesyesmmyesyeslmyesyesmlnoyesmsnonolmnoyesmsnoyesssyesno
信息增益率
Gini指数:无需log,计算更快为什么不用错误率?错误率曲线分两个区间,在每个区间是直线,如果划分后的子结点和父结点在同一条直线上,则划分后错误率不会下降,从而无法进一步分裂结点。Gini指数
两类分类的不纯度度量熵的曲线也分两个区间,但在每个区间是向上凸起,划分后子结点的熵的平均会比分裂前的熵小,从而可以继续分裂结点,直到达到分裂停止标准。
父结点包含10个样本,其中正负样本数目分别为7,3,则例:错误率vs.Gini指数
左子结点:包含5个样本,其中正负样本数目分别为3,2例:错误率vs.熵/Gini指数
右子结点:包含5个样本,其中正负样本数目分别为4,1例:错误率vs.熵/Gini指数
分裂后的平均:分裂前:例:错误率vs.熵/Gini指数
分裂后错误率没变,熵减少
分类回归树(ClassificationAndRegressionTree,CART)例:离散型特征日志密度L好友密度F是否使用真实头像H账号是否真实Rssnonoslyesyeslmyesyesmmyesyeslmyesyesmlnoyesmsnonolmnoyesmsnoyesssyesno
widthheightClass7.09.5Orange6.96.0Orange6.66.6Orange6.56.6Lemon6.06.6Lemon6.99.6Lemon例:连续型特征根据特征width的取值,对所有样本进行排序得到可能的阈值为:6.25,6.55,6.75,6.95widthheightClass6.06.6Lemon6.56.6Lemon6.66.6Orange6.96.0Orange6.99.6Lemon7.09.5Orange对每个可能的阈值,计算划分后的Gini指数:
例:连续型特征根据特征height的取值,对所有样本进行排序得到可能的阈值为:6.3,8.05,9.55widthheightClass6.96.0Orange6.06.6Lemon6.56.6Lemon6.66.6Orange7.09.5Orange6.99.6Lemon对每个可能的阈值,计算划分后的Gini指数:
width>6.552Lemons1Lemon,3Oranges
建树过程是一个自顶向下的递归过程。递归的停止条件划分带来的损失的减小太小树的深度超过了最大深度叶子结点数目超过了最大数目左/右分支的样本分布足够纯净左/右分支中样本数目足够少划分停止条件大纲决策树简介树的构建划分准则剪枝
剪枝
叶子结点数目正则因子对所有叶子结点求和
=
对所有样本求和(一个样本总会落入某个叶子结点)
剪枝
蓝色虚线框内未剪枝部分费用不变,故而在此忽略
剪枝
对一系列子树,计算其在验证集上的性能验证集上性能最好的剪枝树胜出
验证集
Scikit-Learn中对剪枝的支持path=clf.cost_complexity_pruning_path(X_train,y_train)ccp_alphas,impurities=path.ccp_alphas,path.impuritiesclfs=
[]forccp_alphainccp_alphas:
clf=
DecisionTreeClassifier(random_state=0,ccp_alpha=ccp_alpha)
clf.fit(X_train,y_train)
clfs.append(clf)train_scores=
[clf.score(X_train,y_train)
forclfinclfs]test_scores=
[clf.score(X_test,y_test)
forclfinclfs]
容易解释对特征预处理要求少(理论上)能处理离散值和连续值混合的输入(实际需根据具体工具包的要求)对特征的单调变换不敏感
(只与数据的排序有关)能自动进行特征选择可扩展到大数据规模决策树模型的优点正确率不高:建树过程过于贪心可作为Boosting的弱学习器(深度不太深)模型不稳定(方差大):输入数据小的变化会带来树结构的变化
Bagging
&随机森林当特征数目相对样本数目太多时,容易过拟合决策树模型的缺点DecisionTreeClassifier决策树算法特有的参数:criterion、splitter、max_features
max_depth、max_leaf_nodes
min_samples_split、min_samples_leaf、min_weight_fraction_leaf、min_impurity_decrease、min_impurity_split、ccp_alphaclass
sklearn.tree.DecisionTreeClassifier(*,
criterion='gini',
splitter='best',
max_depth=None,
min_samples_split=2,
min_samples_leaf=1,
min_weight_fraction_leaf=0.0,
max_features=None,
random_state=None,
max_leaf_nodes=None,
min_impurity_decrease=0.0,
class_weight=None,
ccp_alpha=0.0)
DecisionTreeClassifier参数参数说明备注criterion权衡划分质量的指标‘gini’(默认):Gini指数‘entropy’:熵splitter划分方式:‘best’(默认):在特征的所有划分点中找出最优值‘random’:在一些随机划分点中找最优分裂点‘best‘适合样本量不大的时候,如果样本数据量非常大,推荐’random’
。max_features如果样本特征数不多,如小于50,用默认的“None”即可。如果特征数非常多,可以控制分裂时考虑的最大特征数,以控制决策树的生成时间。DecisionTreeClassifier参数参数说明备注max_depth树的最大深度。None(默认),在建树时不限制树的深度,直到每个叶子结点都是纯净的或叶子结点的样本数目小于min_samples_split。数据少或者特征少的时候可以默认值。如果模型样本量多,特征也多的情况下,推荐限制最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。max_leaf_nodes最大叶子节点数目。以最好优先(best-first)的方式生成树时,用该参数限制叶子结点数目。None(默认):不限制叶子结点数目。如果不为None,则忽略max_depth。min_samples_split对中间结点进行分裂的最小样本数。整数:样本绝对数目浮点数:样本百分比默认值为2如果样本量数量级非常大,则推荐增大该参数。如10万样本,min_samples_split=10。min_samples_leaf叶子节点包含的最小样本数。整数:样本绝对数目浮点数:样本百分比默认值为1如果某叶子节点数目小于该参数,则会和兄弟节点一起被剪枝。min_samples_split约为min_samples_leaf的2倍。DecisionTreeClassifier参数参数说明备注min_weight_fraction_leaf叶子结点所有样本权重和的最小值。默认值为0,不考虑权重约束。当没有设置sample_weight
时,每个样本的权重相等。如果某叶子结点样本权重和小于该参数,则会和兄弟结点一起被剪枝。min_impurity_decrease结点划分最小不纯度下降量。如果结点划分带来的的不纯度下降小于这个阈值,则该结点不再划分,为叶子结点
。class_weight每个类别的权重:{class_label:weight}。如果不给定,所有类别的权重均1.“balanced”模式:自动调整权重。n_samples/(n_classes*np.bincount(y))还可以设置样本权重(fit函数)random_state随机种子ccp_alpha后剪枝中结点有效性的阈值
。DecisionTreeClassifier的属性属性说明备注classes_类别标签n_classes_类别数目feature_importances_特征重要性可根据特征重要性做特征选择max_features_max_features的值n_features_训练模型(fit)的特征数目n_outputs_训练模型(fit)的输出的数目tree_树DecisionTreeClassifier的方法方法说明apply(X[,
check_input])
返回每个样本对应的叶子结点索引。fit(X,
y[,
sample_weight])predict(X)返回X对应的预测值(类别标签)predict_log_proba(X)
返回X对应的预测值(每个类别对应的概率的log值)predict_proba(X)
返回X对应的预测值(每个类别对应的概率)score(X,
y[,
sample_weight])评估模型预测性能,返回模型预测的正确率。decision_path(X[,
check_input])
返回每个样本对应的树的决策路径
例:鸢尾花分类的决策树chp3_iris_dt.ipynb例:鸢尾花分类的决策树特征重要性
feature_importances_第9章集成学习
(Ensemble
Learning)我们已经开发了很多机器学习算法/代码。单个模型的性能已经调到最优,很难再有改进。集成学习:用很少量的工作,组合多个基模型,使得系统性能提高集成学习
三个臭皮匠,顶个诸葛亮误差的偏差-方差分解Bagging随机森林提升法投票法堆叠法大纲误差的偏差-方差分解偏差:模型预测值的期望与真值之间的差异实践中,当训练误差稳定时,训练误差的大小可视为模型偏差(训练充分时,模型与训练数据的拟合程度)方差:预测值作为随机变量的变化程度当训练误差稳定时,训练误差与验证误差之间的差异可视为模型的方差(由于数据不同模型性能的差异)
噪声可以证明:当误差度量取军方误差时,误差的偏差-方差分解
噪声偏差-方差权衡
学习曲线(Learning
Curve)学习曲线:不同训练集大小时训练集和验证集的性能
横轴:训练样本的数量
纵轴:模型性能train_sizes,train_scores,validation_scores=
learning_curve
(estimator,
X,
y,
*,
groups=None,
train_sizes=array([0.1,
0.33,
0.55,
0.78,
1.]),
cv=None,
scoring=None,
exploit_incremental_learning=False,
n_jobs=None,
pre_dispatch='all',
verbose=0,
shuffle=False,
random_state=None,
error_score=nan,
return_times=False)返回值:训练集大小、训练集和验证集上的误差得分参数:学习器、数据、训练集大小、交叉验证参数、性能评价指标学习曲线(Learning
Curve)学习曲线:通过画出不同训练集大小时训练集和验证集的性能训练误差随训练集增大而增大,然后趋于稳定验证误差随训练集增大而减少,然后趋于稳定二者之间的差异随训练集增大而减少,然后趋于稳定不同模型区域稳定的样本集合大小不同
简单模型需要更少的训练数据学习曲线偏差:当训练误差稳定时,训练误差的大小可视为模型偏差(训练充分时,模型与训练数据的拟合程度)随机森林偏差小、线性模型偏差大方差:当训练误差稳定时,训练误差与验证误差之间的差异可视为模型的方差(由于数据不同模型性能的差异)随机森林方差大、线性模型方差小学习曲线(Learning
Curve)
验证集和训练集的误差值都很大,偏差大,此时为欠拟合训练集误差非常小,但验证集误差远大于训练集误差,此时为过拟合不可约误差为什么集成学习有效?如果学习算法能减少模型的偏差(提高算法在训练集上的性能)或者降低模型的方差(从训练集到验证集上更好地泛化),模型的性能都会有所提高。集成学习将多个模型通过合适的方式组合,使得组合后的模型的偏差和/或方差变小,从而得到性能更好的学习器。如果基础模型太弱(高偏差),通过弱弱组合变强;如果基础模型太复杂(高方差),通过互相遏制变壮。基学习器:
“好而不同”
每个基分类器正确率为66.6%每个基分类器精度为66.6%但每个基分类器之间没有差别
每个基分类器的精度为33.3%
集成学习的两个基本问题如何训练出具有差异性的多个基学习器?
基学习器算法不同:异质集成学习
基学习器算法相同,但训练集不同:同质集成学习如何将多个基学习器的预测结果集成为最终的强学习器预测结果?Bagging、Boosting、投票、堆叠
误差的偏差-方差分解Bagging随机森林提升法投票法堆叠法大纲Baggingaggregating训练集子训练集子训练集子训练集Bootstrap采样基模型1基模型2
训练模型
集成模型
预测结果投票/平均预测…
Baggingaggregating
Bootstrap
Bootstrap如何训练出具有差异性的多个基学习器?基学习器算法相同,但训练集不同:对训练集的Bootstrap采样如何将多个基学习器的预测结果集成为最终的强学习器预测结果?
每个基学习器的地位相同:分类任务通常采取投票法,取多个基学习器的预测类别的众数;
回归任务通常使用平均法,取多个基学习器的预测值的平均
Bagging:集成学习的两个基本问题
Bagging:降低模型方差
Bagging可降低模型方差推荐阅读:《为什么说bagging是减少variance,而boosting是减少bias?》使用sklearn进行集成学习——理论/jasonfreak/p/5657196.htmlBagging适合对偏差低、方差高的模型进行融合如较复杂的决策树、神经网络决策树很容易过拟合
偏差低、方差高如果每个训练样本为一个叶子结点,训练误差为0BaggingScikit-Learn中支持对任意基学习器的Bagging分类:BaggingClassifier回归:BaggingRegressorScikit-Learn中的Baggingclass
sklearn.ensemble.BaggingClassifier(base_estimator=None,
n_estimators=10,
max_samples=1.0,
max_features=1.0,
bootstrap=True,
bootstrap_features=False,
oob_score=False,
warm_start=False,
n_jobs=None,
random_state=None,
verbose=0)class
sklearn.ensemble.BaggingRegressor(base_estimator=None,
n_estimators=10,
max_samples=1.0,
max_features=1.0,
bootstrap=True,
bootstrap_features=False,
oob_score=False,
warm_start=False,
n_jobs=None,
random_state=None,
verbose=0)参数说明base_estimator基学习器,scikit-learn的分类器或回归器。如果没有给出,默认使用决策树(不推荐,不如RandomForest)。n_estimators基学习器的数目。通常基学习器越多,模型的方差越小。max_samples每个数据子集(用于训练基学习器)的样本数量。可以是浮点数(0.0至1.0,表示取样本占所有样本的比例),也可以是整数(表示样本的实际数量)。注意:如果输入了1而不是1.0,那么每个数据子集仅包含1个样本,会导致严重失误。max_features训练基学习器的特征数量。bootstrap在随机选取样本时是否是有放回bootstrap_features在随机选取特征时是否是有放回oob_score是否计算out-of-bag分数。每个基学习器只在原始数据集的一部分上训练,所以可以用剩下样本上的误差(out-of-bagerror),来估计它的泛化误差/测试误差。warm_start如果是True,在下一次使用fit方法时,向原有的模型再增加n_estimators个新的基学习器。BaggingClassifier的参数class
sklearn.ensemble.BaggingClassifier(base_estimator=None,
n_estimators=10,
max_samples=1.0,
max_features=1.0,
bootstrap=True,
bootstrap_features=False,
oob_score=False,
warm_start=False,
n_jobs=None,
random_state=None,
verbose=0)在Bagging中,每个基学习器只在原始数据集的一部分上训练,所以可以不用交叉验证,直接用包外样本上的误差(out-of-bagerror)来估计它的泛化误差/测试误差。Out-of-bagerror(OOBE)全体训练数据单次训练数据单次测试数据正确率估计:11/15*100%=73.33%
基学习器数目由于只是训练数据有一些不同,对决策树算法进行Bagging得到的多棵树高度相关,因此带来的方差减少有限。随机森林通过随机选择一部分特征随机选择一部分样本降低树的相关性随机森林在很多应用案例上被证明有效,但牺牲了可解释性森林:多棵树随机:对样本和特征进行随机抽取随机森林(Random
Forest)
Scikit-Learn中实现了两种包含随机树的森林随机森林(Random
Forests)极度随机森林(
ExtremelyRandomizedTrees)
极度随机森林组合比随机森林更随机在分裂时,随机森林寻找特征最有判别力的阈值。极度随机森林中,随机选取每个候选特征的阈值,然后从这些随机选取的阈值中寻找最佳阈值:每个结点上找到每个特征的最佳阈值是决策树生长中最耗时的任务极度随机森林对方差的减少会更多一些,但偏差可能增大一点点。Scikit-Learn中的随机森林随机森林模型参数众多,且涉及随机操作,在分类任务中当不同类别的样本数目不均衡时,超参数调优时需慎重。一般来说,先调含随机性的参数先初调“子采样率”(subsample)和“分裂时考虑的最大特征数”(max_features)再调叶节点最小样本数”(min_samples_leaf)和“分裂所需最小样本数”(min_samples_split)再调无随机性的参数:“最大深度”(max_depth)或“最大叶节点数”(max_leaf_nodes)随机森林超参数调优推荐阅读:使用sklearn进行集成学习——实践OutlineBagging提升法AdaBoostGradient
Boosting
Decision
Tree(GBDT)XGBoostLightGBMCatBoost投票法堆叠法提升法:Boosting并行顺序提升法:Boosting
弱学习器是按顺序学习的。怎样得到互补的学习器?在不同的训练集上训练学习器。怎么得到不同的训练集?对原始训练集重采样改变训练集的标签(基于梯度的提升法)对原始训练集重新加权(AdaBoost)在实际操作中,改变目标函数即可:
…
AdaBoost的基本思想
样本重新加权
权重减小权重增大样本重新加权
样本重新加权
AdaBoost
M1算法
准确率越高的弱学习机权重越高。例:AdaBoost
弱学习器:决策树桩
例:AdaBoost
例:AdaBoost
例:AdaBoost
训练误差可以证明:随着弱学习器数目增多,训练误差越来越小。证明
形式与训练误差很像证明(cont.)
0-1损失指数损失
证明(cont.)
证明(cont.)
测试误差
测试误差
回忆SVM中间隔的概念margin小的样本很少,即样本的margin都很大,泛化性能好前向分步加法模型解释
前向分步加法模型解释
前向分步加法模型解释
OutlineBagging提升法AdaBoostGradient
Boosting
Decision
Tree(GBDT)XGBoostLightGBMCatBoost投票法堆叠法Boosting的一般框架
Gradient
Boosting
用弱学习器来拟合目标函数的负梯度。(回归问题)GradientBoosting
Algorithm
从Gradient
Descent到Gradient
BoostingFrom:http://wepon.me/files/gbdt.pdf
GradientBoosting—不同损失函数对分类问题,损失函数取负log似然损失,得到logitBoosting。对回归问题,损失函数可取L2损失,得到L2boosting。
L2Boosting
预测残差
例:回归582134-52780134-5412103134-3123118134-16251721343828127134-7292041347034189134553599134-354016613432
例:回归
582134-5295.75-13.75780134-5495.75-15.7512103134-3195.757.2523118134-1695.7522.25251721343825.5159.512.528127134-725.5159.5-32.5292041347025.5159.544.5341891345525.5159.529.53599134-3525.5159.5-60.5401661343225.5159.56.5
例:回归
582134-5295.75-13.756.75102.50-20.50780134-5495.75-15.756.75102.50-22.5012103134-3195.757.256.75102.500.5023118134-1695.7522.256.75102.5015.60251721343825.5159.512.56.75166.255.7528127134-725.5159.5-32.56.75166.25-39.25292041347025.5159.544.56.75166.2537.75341891345525.5159.529.56.75166.2522.753599134-3525.5159.5-60.5-27.00132.50-33.50401661343225.5159.56.5-27.00132.5033.50
例:回归582134-5295.75-13.756.75102.50-20.50-10.0833392.41667780134-5495.75-15.756.75102.50-22.50-10.0833392.4166712103134-3195.757.256.75102.500.50-10.0833392.4166723118134-1695.7522/256.75102.5015.60-10.0833392.41667251721343825.5159.512.56.75166.255.75-10.08333156.1666728127134-725.5159.5-32.56.75166.25-39.25-10.08333156.16667292041347025.5159.544.56.75166.2537.7515.12500181.37500341891345525.5159.529.56.75166.2522.7515.12500181.375003599134-3525.5159.5-60.5-27.00132.50-33.5015.12500147.62500401661343225.5159.56.5-27.00132.5033.5015.12500147.62500
例:回归最后残差倾向于白噪声,没有模式,无需再学习器logitBoosting
logitBoosting
logitBoosting
logitBoosting所以
logitBoosting
预测残差
Shrinkage
OutlineBagging随机森林提升法AdaBoostGradient
Boosting
Decision
Tree(GBDT)XGBoostLightGBMCatBoost投票法堆叠法XGBoostXGBoost:eXtremeGradientBoosting可自定义损失函数:采用二阶Taylor展开近似损失函数规范化的正则项:叶子节点数目、叶子结点的分数建树支持分裂点近似搜索稀疏特征处理缺失值处理并行计算内存缓存推荐阅读:深入理解XGBoost(/fengdu78/article/details/104284924)损失函数的二阶近似
常用损失函数的g和h
正则项
正则项
目标函数
目标函数
分数越小的树越好!例:树的分数H2回归树的学习策略当树的结构确定时,我们前面已经推导出其最优的叶节点分数以及对应的最小损失值。如何确定树的结构?
暴力枚举所有可能的树结构,选择损失值最小的——NP难问题
贪心法:每次尝试分裂一个叶节点,计算分裂前后的增益,选择增益最大的分裂如何度量分裂的增益?分裂的增益度量ID3算法采用信息增益C4.5算法采用信息增益比CART采用Gini系数XGBoost:
增益
精确贪心算法
例:精确贪心算法左分支为age<b的样本共4个样本:A、B、C、D
对所有特征都按照特征的数值进行预排序精确贪心算法
基于直方图的近似算法当数据太多不能装载到内存时,不能进行精确搜索分裂,只能近似根据特征分布的百分位数(或直方图),提出特征的一些候选分裂点将连续特征值映射到桶里(候选点对应的分裂),然后根据桶里样本的统计量,从这些候选中选择最佳分裂点根据候选提出的时间,分为全局近似:在构造树的初始阶段提出所有的候选分裂点,然后对各个层次采用相同的候选提出候选的次数少,但每次的候选数目多(因为候选不更新)局部近似:在每次分裂重新提出候选对层次较深的树更适合例:直方图近似确定分割点直方图近似确定分割点6个可能的分裂点2个可能的分裂点直方图可减少候选分裂点的数目直方图可减少存储,且无需排序
对长尾分布,直方图可能利用不充分
稀疏特征在实际任务中,极有可能遇到稀疏特征缺失数据人工设计的特征:如独热(one-hot)编码XGBoost:在树的每个结点设置一个缺省方向稀疏特征统一的稀疏特征处理方案:将稀疏特征视为缺失值最佳缺省方向确定:只访问非缺失数据计算复杂度与非缺失数据数目线性相关
D,D在数据高度稀疏的Allstate-10K数据集上稀疏算法比基本算法快近50倍
(假设缺省方向为右边)(假设缺省方向为左边)OutlineBagging随机森林提升法AdaBoostGradient
Boosting
Decision
Tree(GBDT)XGBoostLightGBMCatBoost投票法堆叠法LightGBM:LightGradientBoostingMachineLightGBM是Microsoft开发的一个GBDT算法框架,支持高效率的并行训练,并且具有以下优点:更快的训练速度更低的内存消耗分布式支持,可以快速处理海量数据/Microsoft/LightGBMLightGBM的优化基于直方图的分裂算法直方图加速构造带深度限制的Leaf-wise的叶子生长策略直接支持类别型特征(CategoricalFeature)Cache命中率优化多线程优化基于Histogram的决策树算法
相当于数值特征离散化/分组:一个bin为一组Histogram算法的计算优势Histogram算法可大幅减少计算分割点增益的次数对于一个特征,预排序需要对每一个不同特征值都计算一次分割增益,而histogram只需要计算#bin次。Histogram算法的缺点Histogram算法不能找到精确的分割点,训练误差没有预排序算法好。但从实验结果来看,Histogram算法在测试集的误差预排序算法算法差异并不是很大,甚至有时候效果更好。实际上可能决策树对于分割点的精确程度并不太敏感,而且较“粗”的分割点也自带正则化的效果。Histogram做差加速
直方图加速计算
直方图加速:基于梯度的单边采样减少样本数:抛弃那些不太重要的样本梯度:样本重要性度量
梯度很小:该样本的训练误差很小,或者说该样本已经能被模型很好表示,样本的重要性低但直接抛弃梯度很小的样本会改变样训练集的分布,使得模型准确率下降保留梯度绝对值大的样本,对梯度的绝对值小的样本进行采样,对减少实际访问样本数直方图加速:基于梯度的单边采样基于梯度的单边采样(Gradient-basedOne-SideSampling,GOSS)
样本索引梯度4-53320.560.250.110样本索引梯度4-53360.250.1采样将增加基学习器的多样性直方图加速:互斥特征捆绑
直方图加速:互斥特征捆绑
直方图加速:互斥特征捆绑特征捆绑:图着色问题1.初始化:
计算结点的度(或特征非零值的样本数),根据度对特征进行排序特征束为空2.
对每个特征(根据度的大小)
计算特征与已有束的冲突程度。如冲突小,就加入到该计算束;如果与所有现有的束的冲突都较大,则生成一个新束;训练之前只处理一次例:互斥特征捆绑feature1和feature2互斥(不同时取非0值)
feature1和feature2变成一束确保捆绑特性(feature1和feature2)的非零数据点位于不同的bucket中。在feature_bundle中,bucket1到4包含feature1的非零实例,bucket5(4+1)、6(4+2)包含feature2的非零实例。将互斥特征放在不同的箱中来构建bundle:将偏移量添加到特征原始值带有深度限制的按叶子生长(leaf-wise)算法Level-wise过一次数据可以同时分裂同一层的叶子,容易进行多线程优化,不容易过拟合但Level-wise不加区分的对待同一层的叶子,带来了很多没必要的开销,比较低效(分裂增益较低,没必要进行搜索和分裂)Leaf-wise每次从当前所有叶子中,找到分裂增益最大(一般也是数据量最大)的一个叶子进行分裂。同level-wise相比,在分裂次数相同的情况下,leaf-wise可以降低更多的误差,得到更好的精度。Leaf-wise的缺点是可能会长出比较深的决策树,产生过拟合。因此LightGBM在leaf-wise之上增加了一个最大深度的限制,在保证高效率的同时防止过拟合。直接支持类别型特征大多数机器学习工具都无法直接支持类别型特征,一般需要把类别型特征转化到多维的0/1特征,降低了空间和时间效率。LightGBM优化了对类别型特征的支持,直接输入类别特征,不需要额外的0/1展开,并在决策树算法上增加了类别型特征的决策规则。切分不平衡:分裂增益很小得到的空间划分太小:落入该区域的数据少,统计信息不准确,学习不充分直接支持类别型特征
OutlineBaggingBoostingAdaBoostGradient
Boosting
Decision
Tree(GBDT)XGBoostLightGBMCatBoost投票法堆叠法CatBoost:
专为类别特征而生的无偏BoostingCatBoost(CategoricalBoosting)由Yandex在2017年开发的一种改进的梯度提升算法。核心创新:避免目标泄露原生支持类别特征避免目标泄露使用对称树结构实际应用中很多特征都是离散值/类别型特征。如商品类型类别型特征编码
0/1编码
标签编码独热编码计数编码类别型特征编码
标签编码#import编码器fromsklearn.preprocessingimportLabelEncoder#1.生成编码器实例enc=LabelEncoder()#调用fit_transform进行编码(对测试集调用transform)genre_labels=enc.fit_transform(df['Genre'])
独热编码Scikt-learn中的OneHotEncoderclass
sklearn.preprocessing.OneHotEncoder(*,
categories='auto',
drop=None,
sparse_output=True,
dtype=<class
'numpy.float64'>,
handle_unknown='error',
min_frequency=None,
max_categories=None,
feature_name_combiner='concat')
视频游戏有6代(特征'Generation'有6个不同的取值)例:独热编码fromsklearn.preprocessingimportOneHotEncoderenc=OneHotEncoder()transformed_df=pd.DataFrame(enc.fit_transform(df[‘Generation’]),
columns=enc.get_feature_names_out(),
index=df.index)poke_df=pd.concat([df,
transformed_df],axis=1)NameGenerationGeneration_Gen1Generation_Gen2Generation_Gen3Generation_Gen4Generation_Gen5Generation_Gen64OctilleryGen20.01.00.00.00.00.05HelioptileGen60.00.00.00.00.01.06DialgaGen40.00.00.01.00.00.0
计数编码
计数编码class
sklearn.preprocessing.TargetEncoder(categories='auto',
target_type='auto',
smooth='auto',
cv=5,
shuffle=True,
random_state=None)1.增加先验2.将样本打散顺序(随机置换),只用每个样本前面(伪历史)的样本来统计信息
某一行数据的目标值绝不会被用于计算该行自身的特征编码,同时随机置换确保这种顺序不会受到原始数据集中固有序列的偏差影响。对于目标变量为连续值的回归任务,CatBoost首先将目标变量离散化为多个区间(bin)。然后以这些区间标识作为目标标签执行有序目标编码,将回归问题有效转化为类分类任务的编码过程。测试:用整个训练数据集的目标统计信息,确保预测结果具有确定性且计算效率高。CatBoost的信息泄漏解决方案
通过“最喜欢的颜色”预测某人是否“喜欢《巨怪2》”(目标变量:1=是),且数据已进行随机排列例顺序(Order)最喜欢的颜色(FavoriteColor)喜欢《巨怪2》(目标)先验目标和先验类别计数编码值1蓝色(Blue)1000.0502红色(Red)0000.0503绿色(Green)1000.0504蓝色(Blue)0110.5255绿色(Green)1110.5256绿色(Green)1220.6837蓝色(Blue)1120.350某一类别的编码值会随着观测样本数量的增加而变化,但任意一行数据的编码计算均严格依赖于其之前的序列数据。用随机置换的伪历史信息来估计叶子节点的预测值(残差平均值),确保确保某个样本自身的残差不会被用于计算自身的预测值在评估和选择最佳分割阈值时,CatBoost使用余弦相似度作为度量标准(而非常用的L2损失),方向一致更重要残差预测防信息泄漏CatBoost采用对称树(SymmetricTrees),又称无偏树(
ObliviousTrees)作为其架构的核心组件。对称决策树计算效率高,还能作为正则化器。对称决策树:树中同一层级的所有节点,使用完全相同的特征和分割阈值例如,第一层(0层)的分割条件为“特征A<10”,第二层的所有节点将使用相同的后续条件(如“特征B<5”)进行分割(
标准决策树中,同一层级的不同节点可自由使用不同的特征和阈值)效果:弱学习器特性、结构统一、高效推理;单棵树表达能力弱,但整体组合效果佳对称决策树OutlineBagging提升法投票法堆叠法投票法各基学习器的地位相同时,集成采用简单的投票(分类任务)或平均(回归)机制即可。但当不同基学习器性能差别较大时,可以对各基学习器的结果采用加权平均法,其中权重需要用户根据经验指定。OutlineBagging提升法投票法堆叠法堆叠法各基学习器的地位相同时,集成采用简单的投票(分类任务)或平均(回归)机制即可。但当不同基用户根学习器性能差别较大时,可以对各基学习器的结果采用加权平均法,其中权重需要据经验指定,或者采用堆叠法对基模型进行更好的融合。信息泄露堆叠法:类似交叉验证堆叠法:类似留出法在训练集创建一个小的留出集(probe),用于训练stacker模型CombiningPredictionsforAccurateRecommenderSystems,MichaelJahrer,AndreasTöscher,RobertLegenstein,KDD2010Train:训练基模型Probe:训练融合模型Qualifying:测试集Blending只使用了整体中数据一部分,最终的模型有可能对留出集过拟合Stacking使用交叉验证比使用单一留出集更加稳健(但需要在更多折上进行计算)堆叠法基模型最好是强模型,这样最后的强学习器可以是一个简单的分类器,防止过拟合。基模型的数目不能太少,因为前一层模型的数目等于后一层分类器的特征维度。基模型必须“准而不同”,如果有一个性能很差的模型,将会严重影响整个模型融合的效果。XGBoost资源XGBoost官方文档:https://xgboost.readthedocs.io/en/latest/PythonAPI:http://xgboost.readthedocs.io/en/latest/python/python_api.html参数说明:http://xgboost.readthedocs.io/en/latest/parameter.html#general-parametersGithub:/dmlc/xgboost很多有用的资源:/dmlc/xgboost/blob/master/demo/README.mdGPU加速:/dmlc/xgboost/blob/master/plugin/updater_gpu/README.md示例代码:/dmlc/xgboost/tree/master/demo/guide-pythonXGBoost原理:XGBoost:AScalableTreeBoostingSystem/abs/1603.02754XGBoost资源XGBoost参数调优:/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/中文版:/u010657489/article/details/51952785/han_xiaoyang/article/details/52665396使用sklearn进行集成学习——实践/jasonfreak/p/5720137.htmlOwenZhang,WinningDataScienceCompetitions/OwenZhang2/tips-for-data-science-competitions?from_action=saveXGBoostUserGroup:/forum/#!forum/xgboost-user/LightGBM资源LightGBM文档:http://lightgbm.readthedocs.io/en/latest/index.html中文参考:/cn/latest/Quick-Start.html
LightGBM参数说明:http://lightgbm.readthedocs.io/en/latest/Parameters.html从结构到性能,一文概述XGBoost、LightGBM和CatBoost的同与不同/articles/2018-03-18-4/catboost-vs-light-gbm-vs-xgboost-5f93620723db集成学习小结同质的个体学习器,低偏差高方差,用并行方法结合成的
bagging同质的个体学习器,高偏差低方差,用序列方法结合成的
boosting异质的个体学习器,低偏差高方差,用分堆方法结合成的
stackingPytorch
基础什么是PyTorch?一种基于Python语言的深度学习开发框架.特征:使用Pytorch可实现在GPU上进行N维张量的计算操作对训练网络自动进行求导Tensors—张量High-dimensional
matrices
(arrays)1-D
tensore.g.
audio2-D
tensore.g.
grayimages3-D
tensore.g.
RGB
imagesTensors
–
Shape
of
TensorsCheck
with
.shape()(5,)5(3,5)5(4,5,3)dim
0
dim
1
dim
0Note:
dim
in
PyTorch
==
axis
inNumPydim
0dim
1dim
25343Tensors
–
创建Tensors从已有数据创建(listor
numpy.ndarray)x=torch.tensor([[1,-1],[-1,1]])x=torch.from_numpy(np.array([[1,-1],[-1,1]]))Tensorof
constant
zeros
&
onesx=torch.zeros([2,2])x=torch.ones([1,2,5])shapetensor([[0.,0.],[0.,0.]])tensor([[[1.,1.,1.,1.,1.],[1.,1.,1.,1.,1.]]])tensor([[1.,-1.],[-1.,1.]])Addition
●Summationy=x.sum()Meany
=x.mean()z=x+ySubtractionz=x-yPowery
=x.pow(2)Pytorch支持一些常见的数学运算,如:Tensors
–
常见的操作Tensors
–常见的操作Transpose:
交换张量中两个指定的维度>>>x=torch.zeros([2,3])2>>>x.shapetorch.Size([2,3])>>>x=x.transpose(0,1)>>>x.shapetorch.Size([3,2])323Tensors
–常见的操作Permute:
交换张量中任意的维度>>>x=torch.zeros([2,3,
4,
5])>>>x.shapetorch.Size([2,3,4,5])>>>x=x.permute(3,1,0,2).contiguous()>>>x.shapetorch.Size([5,3,2,4])Tensors
–
Common
OperationsSqueeze:
删除张量中指定的大小为1的维度>>>x=torch.zeros([1,2,3])>>>x.shapetorch.Size([1,2,3])torch.Size([2,3])>>>x=x.squeeze(0)(dim
=
0)>>>x.shape12323Tensors
–常见的操作Unsqueeze:
扩充一个新维度>>>x=torch.zeros([2,3])>>>x.shapetorch.Size([2,3])>>>x=x.unsqueeze(1)>>>x.shapetorch.Size([2,1,3])23213(dim
=
1)Tensors
–常见的操作Cat:
将多个张量沿着指定维度进行拼接>>>x=torch.zeros([2,1,3])>>>y=torch.zeros([2,3,3])>>>z=torch.zeros([2,2,3])>>>w=torch.cat([x,y,z],dim=1)>>>w.shapetorch.Size([2,6,3])213x233y223z236wmore
operators:
/docs/stable/tensors.htmlTensors
–
数据类型Data
typedtypetensor32-bit
floating
pointtorch.floattorch.FloatTensor64-bit
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 产品召回计划执行通知(5篇)范文
- 半导体器件物理(第2版) 第5章 MOS型晶体管
- 三农技术创新与研发推广方案手册
- 2026西部绿洲国际实业集团有限公司招聘2人模拟试卷附答案详解(精练)
- 2026个人总结报告(3篇)
- 四川省遂宁市2026年中考地理真题附答案
- 2026年跨境电商市场分析与增长潜力报告
- 2024-2025学年上海建平中学高二上学期期末化学试题含答案
- 上海延安中学高二(下)开学考化学试题含解析
- 苏教版三年级数学上册《笔算两、三位数乘一位数(不进位)》教学设计
- 2026浙江省高校毕业生“三支一扶”计划招募300人参考题库【A卷】附答案详解
- 2026年陕西省中考数学卷试题真题及答案详解(精校打印版)
- 二手房买卖合同(无中介版)模板
- 2026年江西省中考道德与法治试卷(含答案)
- 2025年重庆市拟任县处级领导干部任职资格试题及参考答案
- 人工气道气囊的管理专家共识
- (2026版)《中华人民共和国药品管理法实施条例》培训课件
- 物业安全隐患排查整改清单
- 探索绿色低碳循环发展模式路径
- 人教版九年级化学上册教材课后习题参考答案
- 胖东来员工手册(各岗位工作状态服务标准)
评论
0/150
提交评论