数据挖掘二手车价格预测 Task05:模型融合
模型融合是kaggle等比赛中经常使用到的一个利器,它通常可以在各种不同的机器学习任务中使结果获得提升。顾名思义,模型融合就是综合考虑不同模型的情况,并将它们的结果融合到一起。模型融合主要通过几部分来实现:从提交结果文件中融合、stacking和blending。
模型融合的类型
Stacking相关理论介绍
1) 什么是 stacking
简单来说 stacking 就是当用初始训练数据学习出若干个基学习器后,将这几个学习器的预测结果作为新的训练集,来学习一个新的学习器。
将个体学习器结合在一起的时候使用的方法叫做结合策略。对于分类问题,我们可以使用投票法来选择输出最多的类。对于回归问题,我们可以将分类器输出的结果求平均值。
代码示例
回归\分类概率-融合:
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))
Weighted_pre MAE: 0.05750000000000027
# 打印看下这是啥
Weighted_pre
0 1.05
1 3.07
2 2.09
3 6.02
dtype: float64
将个体学习器结合在一起的时候使用的方法叫做结合策略。对于分类问题,我们可以使用投票法来选择输出最多的类。对于回归问题,我们可以将分类器输出的结果求平均值。
回归\分类概率-融合
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_resultw = [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_resultmodel_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文件下,如果有兴趣可进入模块目录查看
2、远程加载数据集
比较大的数据集,主要用于测试解决实际问题,支持在线下载,下载下来的数据,默认保存在~/scikit_learn_data文件夹下,可以通过设置环境变量SCIKIT_LEARN_DATA修改路径,datasets.get_data_home()获取下载路径。
3、构造数据集
下面以make_regression()函数为例:
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)
XGBClassifier函数
xgboost模块的XGBClassifier函数
RandomForestClassifier
参数
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)
- 1
详解
硬投票:对多个模型直接进行投票,不区分模型结果的相对重要度,最终投票数最多的类为最终被预测的类
VotingClassifier
调用VotingClassifier上的fit方法将拟合存储在类属性self.estimators中的原始估计器的克隆。估计器可以使用set_params设置为’drop’
如果“硬”,则使用预测类标签进行多数规则投票。否则,如果“软”,则基于预测概率之和的argmax来预测类标签,这是推荐用于经过良好校准的分类器集合的。
软投票:和硬投票原理相同,增加了设置权重的功能,可以为不同模型设置不同权重,进而区别模型不同的重要度
eclf = VotingClassifier(estimators=[('xgb', clf1), ('rf', clf2), ('svc', clf3)], voting='soft', weights=[2, 1, 1])
clf1.fit(x_train, y_train)
分类的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
StackingClassifier(classifiers,meta_classifier,use_probas = False,average_probas = False,verbose = 0)
GridSpec:
先是通过gridspec.GridSpec()创建区域,参数5,5的意思就是每行五个,每列五个,最后就是一个5×5的画布,相比于add_subplot(),使用网格布局的话可以更加灵活的控制占用多少空间
itertools.product
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)
参考:数据竞赛—二手车价格预测— 模型融合_你会弹琴吗的博客-CSDN博客
数据挖掘二手车价格预测 Task05:模型融合相关推荐
- 二手车价格预测——Task5 模型融合
文章目录 前言 一.代码示例 1.引入库 2.读入数据 3.建立模型 4.加权融合 总结 前言 当我们在做数据挖掘的时候,往往会发现单个模型的预测结果总是不如人意,这个时候我们不妨尝试模型融合,把多个 ...
- 【算法竞赛学习】二手车交易价格预测-Task5模型融合
二手车交易价格预测-Task5 模型融合 五.模型融合 Tip:此部分为零基础入门数据挖掘的 Task5 模型融合 部分,带你来了解各种模型结果的融合方式,在比赛的攻坚时刻冲刺Top,欢迎大家后续多多 ...
- 数据挖掘-二手车价格预测 Task04:建模调参
数据挖掘-二手车价格预测 Task04:建模调参 模型调参部分 利用xgb进行五折交叉验证查看模型的参数效果 ## xgb-Model xgr = xgb.XGBRegressor(n_estimat ...
- 零基础入门金融风控-贷款违约预测-Task05——模型融合
有幸参加了阿里云举办的零基础入门金融风控-贷款违约预测训练营.收获颇多. 每天记录一些自己之前的知识盲点,需经常温习. 第五次的学习任务,是模型融合. 一.模型融合常用方法 模型融合有常用的如下六种方 ...
- 数据挖掘-二手车价格预测 Task03:特征工程
一.特征工程理论: 常见的特征工程包括: 一.导入数据 import warnings warnings.filterwarnings('ignore') import pandas as pd im ...
- 数据挖掘-二手车价格预测 Task02:数据分析
Task02:数据分析 1.EDA数据探索性分析 读取文件 import warnings warnings.filterwarnings('ignore') import pandas as pd ...
- Python二手车价格预测(二)—— 模型训练及可视化
系列文章目录 一.Python数据分析-二手车数据获取用于机器学习二手车价格预测 二.Python二手车价格预测(一)-- 数据处理 文章目录 系列文章目录 前言 一.明确任务 二.模型训练 1.引入 ...
- 【组队学习】【24期】河北邀请赛(二手车价格预测)
河北邀请赛(二手车价格预测) 开源内容: https://github.com/datawhalechina/team-learning-data-mining/tree/master/SecondH ...
- 基于二手车价格预测——特征工程
特征工程 特征工程 分析: 第一步:异常值处理 箱型图法: 第二步:特征构造 第三步:数据分桶 数据分桶详解 删除不需要的数据 特征归一化 总结--特征 1.特征构造: 2.异常类型处理 3.构造新特 ...
最新文章
- Rus入门到放弃——HashMap和BTreeMap
- 新版mysql授权命令,缺一不可
- 【学习笔记】观察者模式
- (provider: 共享内存提供程序, error: 0 - 管道的另一端上无任何进程。) (Microsoft SQL Server,错误: 233)...
- Javascript中四种函数调用方式
- 中国基座臂行业市场供需与战略研究报告
- 字节跳动学前端还是java_【全国】—Java/前端工程师—字节跳动
- linux 内核参数分析,linux 内核参数VM调优 之 参数调节和场景分析
- mysql编译方式查询_源码编译mysql及其各种查询总结
- 2 年前端面试心路历程(字节跳动、YY、虎牙、BIGO)
- 宜家IKEA EDI IFTMBF运输预定请求详解
- android ios 重力感应器,iOS实时获取当前的屏幕方向之重力感应
- 简单的android游戏框架——zgf
- 如何判断一笔交易是否属于欺诈 数据挖掘算法与现实生活中的应用案例
- 知乎百万热议:程序员如何做到年薪 50 万?
- div中图片下方的说明文字如何能添加的上去
- svn: E155017: 工作副本的参考文件损坏【解决方案】
- 30w 重金等你挑战,数字合肥广邀智慧城市建设英才
- QT:在QT中调用摄像头并实现简单的拍照功能
- OpenCVSharp入门教程——导读