当前位置:   article > 正文

机器学习集成学习与模型融合!

自适应模型融合

↑↑↑关注后"星标"Datawhale

每日干货 & 每月组队学习,不错过

 Datawhale干货 

作者:李祖贤,深圳大学,Datawhale高校群成员

对比过kaggle比赛上面的top10的模型,除了深度学习以外的模型基本上都是集成学习的产物。集成学习可谓是上分大杀器,今天就跟大家分享在Kaggle或者阿里天池上面大杀四方的数据科学比赛利器---集成学习。

一、什么是集成学习

  • 正所谓“三个臭皮匠赛过诸葛亮”的道理,在机器学习数据挖掘的工程项目中,使用单一决策的弱分类器显然不是一个明智的选择,因为各种分类器在设计的时候都有自己的优势和缺点,也就是说每个分类器都有自己工作偏向,那集成学习就是平衡各个分类器的优缺点,使得我们的分类任务完成的更加优秀。

  • 在大多数情况下,这些基本模型本身的性能并不是非常好,这要么是因为它们具有较高的偏差(例如,低自由度模型),要么是因为他们的方差太大导致鲁棒性不强(例如,高自由度模型)。集成方法的思想是通过将这些弱学习器的偏差和/或方差结合起来,从而创建一个「强学习器」(或「集成模型」),从而获得更好的性能。

集成学习的方法:

  • 1. 基于投票思想的多数票机制的集成分类器(MajorityVoteClassifier)

  • 2. 于bagging思想的套袋集成技术(BaggingClassifier)

  • 3. 基于boosting思想的自适应增强方法(Adaboost)

  • 4. 分层模型集成框架stacking(叠加算法)

二、基于投票思想的集成分类器

以上是多数投票的流程图:

  • 分别训练n个弱分类器。

  • 对每个弱分类器输出预测结果,并投票(如下图)

  • 每个样本取投票数最多的那个预测为该样本最终分类预测。

加载相关库:

  1. ## 加载相关库
  2. from sklearn.datasets import load_iris # 加载数据
  3. from sklearn.model_selection import train_test_split # 切分训练集与测试集
  4. from sklearn.preprocessing import StandardScaler # 标准化数据
  5. from sklearn.preprocessing import LabelEncoder # 标签化分类变量

初步处理数据

  1. ## 初步处理数据
  2. iris = load_iris()
  3. X,y = iris.data[50:,[1,2]],iris.target[50:]
  4. le = LabelEncoder()
  5. y = le.fit_transform(y)
  6. X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.5,random_state=1,stratify=y)

我们使用训练集训练三种不同的分类器:逻辑回归 + 决策树 + k-近邻分类器

  1. ## 我们使用训练集训练三种不同的分类器:逻辑回归 + 决策树 + k-近邻分类器
  2. from sklearn.model_selection import cross_val_score # 10折交叉验证评价模型
  3. from sklearn.linear_model import LogisticRegression
  4. from sklearn.tree import DecisionTreeClassifier
  5. from sklearn.neighbors import KNeighborsClassifier
  6. from sklearn.pipeline import Pipeline # 管道简化工作流
  7. clf1 = LogisticRegression(penalty='l2',C=0.001,random_state=1)
  8. clf2 = DecisionTreeClassifier(max_depth=1,criterion='entropy',random_state=0)
  9. clf3 = KNeighborsClassifier(n_neighbors=1,p=2,metric="minkowski")
  10. pipe1 = Pipeline([['sc',StandardScaler()],['clf',clf1]])
  11. pipe3 = Pipeline([['sc',StandardScaler()],['clf',clf3]])
  12. clf_labels = ['Logistic regression','Decision tree','KNN']
  13. print('10-folds cross validation :\n')
  14. for clf,label in zip([pipe1,clf2,pipe3],clf_labels):
  15. scores = cross_val_score(estimator=clf,X=X_train,y=y_train,cv=10,scoring='roc_auc')
  16. print("ROC AUC: %0.2f(+/- %0.2f)[%s]"%(scores.mean(),scores.std(),label))

我们使用MajorityVoteClassifier集成:

  1. ## 我们使用MajorityVoteClassifier集成:
  2. from sklearn.ensemble import VotingClassifier
  3. mv_clf = VotingClassifier(estimators=[('pipe1',pipe1),('clf2',clf2),('pipe3',pipe3)],voting='soft')
  4. clf_labels += ['MajorityVoteClassifier']
  5. all_clf = [pipe1,clf2,pipe3,mv_clf]
  6. print('10-folds cross validation :\n')
  7. for clf,label in zip(all_clf,clf_labels):
  8. scores = cross_val_score(estimator=clf,X=X_train,y=y_train,cv=10,scoring='roc_auc')
  9. print("ROC AUC: %0.2f(+/- %0.2f)[%s]"%(scores.mean(),scores.std(),label))
  10. ## 对比下面结果,可以得知多数投票方式的分类算法,抗差能力更强。

使用ROC曲线评估集成分类器:

  1. ## 使用ROC曲线评估集成分类器
  2. from sklearn.metrics import roc_curve
  3. from sklearn.metrics import auc
  4. colors = ['black','orange','blue','green']
  5. linestyles = [':','--','-.','-']
  6. plt.figure(figsize=(10,6))
  7. for clf,label,clr,ls in zip(all_clf,clf_labels,colors,linestyles):
  8. y_pred = clf.fit(X_train,y_train).predict_proba(X_test)[:,1]
  9. fpr,tpr,trhresholds = roc_curve(y_true=y_test,y_score=y_pred)
  10. roc_auc = auc(x=fpr,y=tpr)
  11. plt.plot(fpr,tpr,color
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/707791
推荐阅读
相关标签
  

闽ICP备14008679号