集成学习之 VotingClassifier

Contents

一、 背景

在机器学习中,对于同一个训练集,不同的算法可能会给出不同的结果 ,那么在这种情况下,我们选择哪个算法的结果作为最终结果呢?
我们可以把多种算法集中起来,让不同算法对同一种问题都进行预测,最终少数服从多数,这就是集成学习的思路。

二、 VotingClassifier

集成多个算法,让不同的算法对同一组数据进行分析得到结果,最终投票来看具体哪个结果是大家公认的更好的结果。

2.1 Hard Voting

一人一票,少数服从多数,集成多个模型进行处理
在这里我们没有对单个分类器进行调参,只是给出voting classifier基本思路,在具体使用的时候可以先把每一个分类器调整到最好参数情况下,再一起使用集成学习。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import VotingClassifier

from sklearn import datasets
X, y = datasets.make_moons(n_samples=500, noise=0.3, random_state=42)

plt.scatter(X[y==0,0], X[y==0,1])
plt.scatter(X[y==1,0], X[y==1,1])
plt.show()

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

voting_clf = VotingClassifier(estimators=[
    ('log_clf', LogisticRegression()), 
    ('svm_clf', SVC()),
    ('dt_clf', DecisionTreeClassifier(random_state=666))],
                             voting='hard')

voting_clf.fit(X_train, y_train)
voting_clf.score(X_test, y_test)

输出

0.89600000000000002

在很多情况下,少数服从多数,不一定合理。政治学中的一个名词明主暴政,有时候一人一票,采用完全明主的方式,得到的决策结果反而是一个不好的结果,更合理的投票,应该有权值

2.2 Soft Voting

在一些重要的决策上,专业人士的票,权值应该高一些
将所有模型预测样本为某一类别的概率的平均值作为标准,概率最高的对应的类型为最终的预测结果。

from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import VotingClassifier

# svc默认参数,是不支持计算概率的。所有probability设置Trues
voting_clf2 = VotingClassifier(estimators=[
    ('log_clf', LogisticRegression()), 
    ('svm_clf', SVC(probability=True)),
    ('dt_clf', DecisionTreeClassifier(random_state=666))],
                             voting='soft')

voting_clf2.fit(X_train, y_train)
voting_clf2.score(X_test, y_test)                             

输出

0.91200000000000003

三、小结

在这里,我们集成了不同的算法,但是算法种类再多,也是有限的几个,我们怎样聚集更多的分类器为我们创建更好的分类结果呢?这就需要我们从训练样本上动脑筋了。

Further Reading

[1] sklearn.svm.SVC


转载请注明:yezuolin的博客 » 点击阅读原文