赞
踩
↑↑↑关注后"星标"Datawhale
每日干货 & 每月组队学习,不错过
Datawhale干货
作者:李祖贤,深圳大学,Datawhale高校群成员
对比过kaggle比赛上面的top10的模型,除了深度学习以外的模型基本上都是集成学习的产物。集成学习可谓是上分大杀器,今天就跟大家分享在Kaggle或者阿里天池上面大杀四方的数据科学比赛利器---集成学习。
正所谓“三个臭皮匠赛过诸葛亮”的道理,在机器学习数据挖掘的工程项目中,使用单一决策的弱分类器显然不是一个明智的选择,因为各种分类器在设计的时候都有自己的优势和缺点,也就是说每个分类器都有自己工作偏向,那集成学习就是平衡各个分类器的优缺点,使得我们的分类任务完成的更加优秀。
在大多数情况下,这些基本模型本身的性能并不是非常好,这要么是因为它们具有较高的偏差(例如,低自由度模型),要么是因为他们的方差太大导致鲁棒性不强(例如,高自由度模型)。集成方法的思想是通过将这些弱学习器的偏差和/或方差结合起来,从而创建一个「强学习器」(或「集成模型」),从而获得更好的性能。
1. 基于投票思想的多数票机制的集成分类器(MajorityVoteClassifier)
2. 于bagging思想的套袋集成技术(BaggingClassifier)
3. 基于boosting思想的自适应增强方法(Adaboost)
4. 分层模型集成框架stacking(叠加算法)
以上是多数投票的流程图:
分别训练n个弱分类器。
对每个弱分类器输出预测结果,并投票(如下图)
每个样本取投票数最多的那个预测为该样本最终分类预测。
加载相关库:
- ## 加载相关库
- from sklearn.datasets import load_iris # 加载数据
- from sklearn.model_selection import train_test_split # 切分训练集与测试集
- from sklearn.preprocessing import StandardScaler # 标准化数据
- from sklearn.preprocessing import LabelEncoder # 标签化分类变量
初步处理数据
- ## 初步处理数据
- iris = load_iris()
- X,y = iris.data[50:,[1,2]],iris.target[50:]
- le = LabelEncoder()
- y = le.fit_transform(y)
- X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.5,random_state=1,stratify=y)
我们使用训练集训练三种不同的分类器:逻辑回归 + 决策树 + k-近邻分类器
- ## 我们使用训练集训练三种不同的分类器:逻辑回归 + 决策树 + k-近邻分类器
- from sklearn.model_selection import cross_val_score # 10折交叉验证评价模型
- from sklearn.linear_model import LogisticRegression
- from sklearn.tree import DecisionTreeClassifier
- from sklearn.neighbors import KNeighborsClassifier
- from sklearn.pipeline import Pipeline # 管道简化工作流
- clf1 = LogisticRegression(penalty='l2',C=0.001,random_state=1)
- clf2 = DecisionTreeClassifier(max_depth=1,criterion='entropy',random_state=0)
- clf3 = KNeighborsClassifier(n_neighbors=1,p=2,metric="minkowski")
- pipe1 = Pipeline([['sc',StandardScaler()],['clf',clf1]])
- pipe3 = Pipeline([['sc',StandardScaler()],['clf',clf3]])
- clf_labels = ['Logistic regression','Decision tree','KNN']
- print('10-folds cross validation :\n')
- for clf,label in zip([pipe1,clf2,pipe3],clf_labels):
- scores = cross_val_score(estimator=clf,X=X_train,y=y_train,cv=10,scoring='roc_auc')
- print("ROC AUC: %0.2f(+/- %0.2f)[%s]"%(scores.mean(),scores.std(),label))
我们使用MajorityVoteClassifier集成:
- ## 我们使用MajorityVoteClassifier集成:
- from sklearn.ensemble import VotingClassifier
- mv_clf = VotingClassifier(estimators=[('pipe1',pipe1),('clf2',clf2),('pipe3',pipe3)],voting='soft')
- clf_labels += ['MajorityVoteClassifier']
- all_clf = [pipe1,clf2,pipe3,mv_clf]
- print('10-folds cross validation :\n')
- for clf,label in zip(all_clf,clf_labels):
- scores = cross_val_score(estimator=clf,X=X_train,y=y_train,cv=10,scoring='roc_auc')
- print("ROC AUC: %0.2f(+/- %0.2f)[%s]"%(scores.mean(),scores.std(),label))
- ## 对比下面结果,可以得知多数投票方式的分类算法,抗差能力更强。
使用ROC曲线评估集成分类器:
- ## 使用ROC曲线评估集成分类器
- from sklearn.metrics import roc_curve
- from sklearn.metrics import auc
-
- colors = ['black','orange','blue','green']
- linestyles = [':','--','-.','-']
- plt.figure(figsize=(10,6))
- for clf,label,clr,ls in zip(all_clf,clf_labels,colors,linestyles):
- y_pred = clf.fit(X_train,y_train).predict_proba(X_test)[:,1]
- fpr,tpr,trhresholds = roc_curve(y_true=y_test,y_score=y_pred)
- roc_auc = auc(x=fpr,y=tpr)
- plt.plot(fpr,tpr,color
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。