数据挖掘二手车价格预测 Task05:模型融合

简介: 模型融合是kaggle等比赛中经常使用到的一个利器,它通常可以在各种不同的机器学习任务中使结果获得提升。顾名思义,模型融合就是综合考虑不同模型的情况,并将它们的结果融合到一起。模型融合主要通过几部分来实现:从提交结果文件中融合、stacking和blending。

模型融合是kaggle等比赛中经常使用到的一个利器,它通常可以在各种不同的机器学习任务中使结果获得提升。顾名思义,模型融合就是综合考虑不同模型的情况,并将它们的结果融合到一起。模型融合主要通过几部分来实现:从提交结果文件中融合、stacking和blending。


模型融合的类型

image.png


Stacking相关理论介绍

1) 什么是 stacking

简单来说 stacking 就是当用初始训练数据学习出若干个基学习器后,将这几个学习器的预测结果作为新的训练集,来学习一个新的学习器。

image.png


将个体学习器结合在一起的时候使用的方法叫做结合策略。对于分类问题,我们可以使用投票法来选择输出最多的类。对于回归问题,我们可以将分类器输出的结果求平均值。


代码示例

回归\分类概率-融合:

1)简单加权平均,结果直接融合

## 生成一些简单的样本数据,test_prei 代表第i个模型的预测值
test_pre1 = [1.2, 3.2, 2.1, 6.2]
test_pre2 = [0.9, 3.1, 2.0, 5.9]
test_pre3 = [1.1, 2.9, 2.2, 6.0]
# y_test_true 代表第模型的真实值
y_test_true = [1, 3, 2, 6] 
## 定义结果的加权平均函数
def Weighted_method(test_pre1,test_pre2,test_pre3,w=[1/3,1/3,1/3]):
    Weighted_result = w[0]*pd.Series(test_pre1)+w[1]*pd.Series(test_pre2)+w[2]*pd.Series(test_pre3)
    return Weighted_result
# 打印
pd.Series(test_pre1)
0    1.2
1    3.2
2    2.1
3    6.2
dtype: float64
# 各模型的预测结果计算MAE
print('Pred1 MAE:',metrics.mean_absolute_error(y_test_true, test_pre1))
print('Pred2 MAE:',metrics.mean_absolute_error(y_test_true, test_pre2))
print('Pred3 MAE:',metrics.mean_absolute_error(y_test_true, test_pre3))
Pred1 MAE: 0.1750000000000001
Pred2 MAE: 0.07499999999999993
Pred3 MAE: 0.10000000000000009
## 根据加权计算MAE
w = [0.3,0.4,0.3] # 定义比重权值
Weighted_pre = Weighted_method(test_pre1,test_pre2,test_pre3,w)
print('Weighted_pre MAE:',metrics.mean_absolute_error(y_test_true, Weighted_pre))


回归\分类概率-融合


1、简单加权平均,结果直接融合:


sklearn.metrics中的评估方法介绍(accuracy_score, recall_score, roc_curve, roc_auc_score, confusion_matrix)

在理解赛题的时候特意介绍过这几个函数的用法、以及意义。


## 定义结果的加权平均函数
def Weighted_method(test_pre1,test_pre2,test_pre3,w=[1/3,1/3,1/3]):
    Weighted_result = w[0]*pd.Series(test_pre1)+w[1]*pd.Series(test_pre2)+w[2]*pd.Series(test_pre3)
    return Weighted_result
w = [0.3,0.4,0.3] # 定义比重权值
Weighted_pre = Weighted_method(test_pre1,test_pre2,test_pre3,w)
print('Weighted_pre MAE:',metrics.mean_absolute_error(y_test_true, Weighted_pre))

还有一些特殊的形式,比如mean平均,median平均


Stacking融合(回归)


def Stacking_method(train_reg1,train_reg2,train_reg3,y_train_true,test_pre1,test_pre2,test_pre3,model_L2= linear_model.LinearRegression()):
    model_L2.fit(pd.concat([pd.Series(train_reg1),pd.Series(train_reg2),pd.Series(train_reg3)],axis=1).values,y_train_true)
    Stacking_result = model_L2.predict(pd.concat([pd.Series(test_pre1),pd.Series(test_pre2),pd.Series(test_pre3)],axis=1).values)
    return Stacking_result
model_L2= linear_model.LinearRegression()
Stacking_pre = Stacking_method(train_reg1,train_reg2,train_reg3,y_train_true,
                               test_pre1,test_pre2,test_pre3,model_L2)
print('Stacking_pre MAE:',metrics.mean_absolute_error(y_test_true, Stacking_pre))

可以发现模型结果相对于之前有进一步的提升,这是我们需要注意的一点是,对于第二层Stacking的模型不宜选取的过于复杂,这样会导致模型在训练集上过拟合,从而使得在测试集上并不能达到很好的效果


Voting投票机制

Voting即投票机制,分为软投票和硬投票两种,其原理采用少数服从多数的思想


sklearn的datasets使用:

sklearn.datasets模块主要提供了一些导入、在线下载及本地生成数据集的方法,可以通过dir或help命令查看,目前主要有三种形式




1、本地加载数据集

数据集文件在sklearn安装目录下datasets\data文件下,如果有兴趣可进入模块目录查看

cfc755b248c56e891c30905ab6917c0e_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTU2ODM1Mw==,size_16,color_FFFFFF,t_70.png



2、远程加载数据集


 比较大的数据集,主要用于测试解决实际问题,支持在线下载,下载下来的数据,默认保存在~/scikit_learn_data文件夹下,可以通过设置环境变量SCIKIT_LEARN_DATA修改路径,datasets.get_data_home()获取下载路径。


3、构造数据集


下面以make_regression()函数为例:

11566919c45bbe685f1968c3e501efbe_2020040121102354.png

make_regression(n_samples=100, n_features=100, n_informative=10, n_targets=1, bias=0.0, effective_rank=None, tail_strength=0.5, noise=0.0, shuffle=True, coef=False, random_state=None)

895cd16e56f920dc3a2eca57231e0bc2_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTU2ODM1Mw==,size_16,color_FFFFFF,t_70.png

afe71532282b6d5d77a4c4c508c62ce9_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTU2ODM1Mw==,size_16,color_FFFFFF,t_70.png


XGBClassifier函数

xgboost模块的XGBClassifier函数

acb2d8c99e5e7161385524433a5cbcae_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTU2ODM1Mw==,size_16,color_FFFFFF,t_70.png




RandomForestClassifier


参数

d45896cb28cc52386046d9c936701ef4_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTU2ODM1Mw==,size_16,color_FFFFFF,t_70.png

93388e6ab4104d6ddf5cf9d622975770_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTU2ODM1Mw==,size_16,color_FFFFFF,t_70.png

93388e6ab4104d6ddf5cf9d622975770_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTU2ODM1Mw==,size_16,color_FFFFFF,t_70.png


class sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False, n_jobs=1, random_state=None, verbose=0, warm_start=False, class_weight=None)

a91d265c461ba7fc7fc47ecfbed4dede_2020040200215252.png

详解

硬投票:对多个模型直接进行投票,不区分模型结果的相对重要度,最终投票数最多的类为最终被预测的类


VotingClassifier


调用VotingClassifier上的fit方法将拟合存储在类属性self.estimators中的原始估计器的克隆。估计器可以使用set_params设置为’drop’


如果“硬”,则使用预测类标签进行多数规则投票。否则,如果“软”,则基于预测概率之和的argmax来预测类标签,这是推荐用于经过良好校准的分类器集合的。


软投票:和硬投票原理相同,增加了设置权重的功能,可以为不同模型设置不同权重,进而区别模型不同的重要度


分类的Stacking\Blending融合

stacking是一种分层模型集成框架。以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出作为训练集进行再训练,从而得到完整的stacking模型, stacking两层模型都使用了全部的训练数据


LogisticRegression(solver='lbfgs')



RandomForestClassifier



要并行运行的作业数。拟合、预测、决策路径和应用都是在树上并行的。无表示1,除非在joblib.parallel_后端上下文中。-1表示使用所有处理器。


The function to measure the quality of a split. Supported criteria are “gini” for the Gini impurity and “entropy” for the information gain.

测量分割质量的函数。支持的标准是基尼杂质的“基尼”和信息增益的“熵”。注意:此参数是树特定的。


GradientBoostingClassifier


用于拟合单个基础学习者的样本分数。如果小于1.0,则会导致随机梯度增强。子样本与参数n_估计量相互作用。选择小于1.0的子样本会导致方差减少和偏差增加。


StratifiedKFold用法类似Kfold,但是他是分层采样,确保训练集,测试集中各类别样本的比例与原始数据集中相同。

参数:


KNeighborsClassifier

class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights=’uniform’, algorithm=’auto’, leaf_size=30, p=2, metric=’minkowski’, metric_params=None, n_jobs=1, **kwargs)

StackingClassifier

b960cf3afd0e830f4d7f6711682bfab4_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTU2ODM1Mw==,size_16,color_FFFFFF,t_70.png

GridSpec:

先是通过gridspec.GridSpec()创建区域,参数5,5的意思就是每行五个,每列五个,最后就是一个5×5的画布,相比于add_subplot(),使用网格布局的话可以更加灵活的控制占用多少空间

itertools.product(*iterables[, repeat])

笛卡尔积创建一个迭代器,生成表示item1,item2等中的项目的笛卡尔积的元组

repeat是一个关键字参数,指定重复生成序列的次数


product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
plot_decision_regions
plot_decision_regions(X, y, clf, feature_index=None, filler_feature_values=None, filler_feature_ranges=None, ax=None, X_highlight=None, res=None, legend=1, hide_spines=True, markers='s^oxv<>', colors='#1f77b4,#ff7f0e,#3ca02c,#d62728,#9467bd,#8c564b,#e377c2,#7f7f7f,#bcbd22,#17becf', scatter_kwargs=None, contourf_kwargs=None, scatter_highlight_kwargs=None)
目录
相关文章
|
6月前
|
机器学习/深度学习 数据挖掘 Python
【数据挖掘】分类器模型性能评估讲解及iris数据集评估实战(超详细 附源码)
【数据挖掘】分类器模型性能评估讲解及iris数据集评估实战(超详细 附源码)
172 0
|
3月前
|
机器学习/深度学习 数据挖掘 Python
【数据挖掘】生成模型和判别模型的区别及优缺点
文章讨论了生成模型和判别模型在数据挖掘中的区别、原理、优缺点,并提供了一些常见的模型示例。
35 0
|
6月前
|
移动开发 算法 数据可视化
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例
|
6月前
|
算法 数据挖掘 数据库
R语言主成分PCA、决策树、boost预警模型在跨区域犯罪研究数据挖掘分析|数据分享
R语言主成分PCA、决策树、boost预警模型在跨区域犯罪研究数据挖掘分析|数据分享
|
6月前
|
机器学习/深度学习 数据挖掘
使用SAS EnterpriseMiner进行数据挖掘:信用评分构建记分卡模型
使用SAS EnterpriseMiner进行数据挖掘:信用评分构建记分卡模型
|
6月前
|
机器学习/深度学习 算法 数据挖掘
【数据挖掘】模型选择中正则化、交叉验证详解及实战应用(超详细 附源码)
【数据挖掘】模型选择中正则化、交叉验证详解及实战应用(超详细 附源码)
111 0
|
机器学习/深度学习 数据采集 算法
【数据挖掘和机器学习技术】数据挖掘和机器学习相关的算法和模型,如聚类、分类、回归、神经网络
【数据挖掘和机器学习技术】数据挖掘和机器学习相关的算法和模型,如聚类、分类、回归、神经网络
153 0
|
机器学习/深度学习 数据采集 运维
数据挖掘实践(金融风控):金融风控之贷款违约预测挑战赛(上篇)[xgboots/lightgbm/Catboost等模型]–模型融合:stacking、blending
数据挖掘实践(金融风控):金融风控之贷款违约预测挑战赛(上篇)[xgboots/lightgbm/Catboost等模型]–模型融合:stacking、blending
|
机器学习/深度学习 数据采集 数据可视化
数据挖掘:降低汽油精制过程中的辛烷值损失模型(二)
数据挖掘:降低汽油精制过程中的辛烷值损失模型(二)
227 0
数据挖掘:降低汽油精制过程中的辛烷值损失模型(二)
|
机器学习/深度学习 数据可视化 算法
【机器学习入门与实践】数据挖掘-二手车价格交易预测(含EDA探索、特征工程、特征优化、模型融合等)
【机器学习入门与实践】数据挖掘-二手车价格交易预测(含EDA探索、特征工程、特征优化、模型融合等)

热门文章

最新文章