集成学习入门

论智2019-07-03 03:27:53
作者:Sagar Howal
编译:weakish

编者按:Towards Data Science博主Sagar Howal简明扼要地介绍了集成学习的常用技术。

使用多种不同的模型通常比使用单一模型更可靠。在单个数据集上使用多个协同工作的模型称为集成(Ensemble)。这一方法称为集成学习(Ensemble Learning)

投票

你可以使用多种不同的算法训练你的模型,然后加以集成以预测最终输出。比如,你可以使用随机森林分类器、SVM分类器、线性回归,等等。模型互相竞争,然后你可以使用sklearn.ensembleVotingClassifier类来挑选最佳表现。

硬投票(hard voting)按照简单多数原则选择最终预测。而软投票(soft voting)仅在所有的分类器都可以为输出计算概率时才可以使用。软投票通过对单独算法计算出的概率取均值得到最佳结果。

代码:

  1. from sklearn.svm import SVC

  2. from sklearn.linear_model import LogisticRegression

  3. from sklearn.ensemble import RandomForestClassifier

  4. from sklearn.ensemble import VotingClassifier

  5. log_clf = LogisticRegression()

  6. rnd_clf = RandomForestClassifier()

  7. svm_clf = SVC()

  8. voting_clf = VotingClassifier(

  9.    Estimators = [('lr', log_clf), ('rf', rnd_clf), ('svc',svm_clf)],

  10.    voting = 'hard')

  11. voting_clf.fit(X_train, y_train)

以上代码使用了SVM、线性回归、随机森林三种分类器,并进行硬投票。

一般而言,VotingClassifier的精确度比单独分类器要高。确保使用了差异足够大的分类器,这样类似的错误不会累积。

Bagging和Pasting

除了在单一数据集上运行多个模型以外,你还可以在一个数据集的多个随机子集上运行单个模型。有放回的随机取样称为Baggingbootstrap aggregaing,引导聚类)。如果这对你而言太不形象的话,你可以想像忽略数据集中的部分随机条目,然后基于剩下的条目建模。Pasting与此类似,只不过它不允许为同一预测反复取样训练实例。

代码:

  1. from sklearn.ensemble import BaggingClassifier

  2. from sklearn.tree import DecisionTreeClassifier

  3. bag_clf = BaggingClassifier(

  4.    DecisionTreeClassifier(random_state=42), n_estimators=500,

  5.    max_samples=100, bootstrap=True, n_jobs=-1, random_state=42)

  6. bag_clf.fit(X_train, y_train)

  7. y_pred = bag_clf.predict(X_test)

bootstrap=True参数指定使用Bagging。改为bootstrap=False则使用Pa