Python机器学习----第5部分 集成学习

  将不同的分类器组合成元分类器,得到更好的泛化性能,稳定性和准确性更好。在训练和预测中,最终结果采用多数投票原则。元分类器中每个子分类器都参与分类,最终结果采用少数服从多数的方式获取。集成学习可将决策树、支持向量机、逻辑斯蒂回归等方法集成在一起。

1、多数投票分类器----VotingClassifier

from xgboost.sklearn import XGBClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn import svm
from sklearn.svm import SVC
clf1 = XGBClassifier(learning_rate =0.1, n_estimators=140, max_depth=1,min_child_weight=2, gamma=0, subsample=0.7, colsample_bytree=0.6,objective= 'binary:logistic', nthread=4, scale_pos_weight=1)
clf2 = RandomForestClassifier(n_estimators=50,max_depth=1,min_samples_split=4,min_samples_leaf=54,oob_score=True)
clf3 = SVC(C=0.1,probability=True)

from sklearn.ensemble import VotingClassifier
from sklearn.model_selection import cross_val_score
eclf = VotingClassifier(estimators=[('xgb', clf1), ('rf', clf2), ('svc', clf3)], voting='hard')
for clf, label in zip([clf1, clf2, clf3, eclf], ['XGBBoosting', 'Random Forest', 'SVM', 'Ensemble']):
    scores = cross_val_score(clf, x, y, cv=5, scoring='accuracy')
    print("Accuracy: %0.2f (+/- %0.2f) [%s]" % (scores.mean(), scores.std(), label))
2、Bagging分类器----基于bootstrap抽样的集成分类器

Bagging分类器可以指定一个子分类器及其个数,在训练时将采用bootstrap(有放回)随机抽样分别训练子分类器,得到多个子模型。预测时每个子模型都得出结论,最后少数服从多数得到预测结果。

from sklearn.ensemble import BaggingClassifier
tree = DecisionTreeClassifier(criterion = 'entropy',
                              max_depth = None)
bag = BaggingClassifier(base_estimator = tree, #这里还可以指定其他分类器,如感知器、支持向量机、逻辑斯蒂回归等
                        n_estimators = 500,    #子分类器个数
                        max_sample=1.0,
                        max_feature=1.0,
                        bootstrap=True,
                        bootstrap_features=False,
                        n_jobs=-1,
                        random_state = 1) #random_state参数指定分类器训练时使用的随机算法的随机种子
bag.fit(X_train, y_train)
Y_pred = bag.predict(X_test)
随机森林算法是Bagging的一个特例。Baggin分类器与子分类器的准确率更高,降低过拟合程度。到计算成本较高。

3、自适应boosting----AdaBoost

在boosting中,集成分类器中包含多个简单成员分类器,这些成员分类器性能仅仅稍好于随机猜测--弱学习机(如单层决策树),boostring主要使用分类错误的样本来训练弱学习机,进而提高集成分类的性能。

from sklearn.ensemble import AdaBoostClassifier
tree = DecisionTreeClassifier(criterion = 'entropy',
                              max_depth = None)
ada = AdaBoostClassifier(base_estimator = tree, #这里还可以指定其他分类器,如感知器、支持向量机、逻辑斯蒂回归等
                        n_estimators = 500,    #子分类器个数
                        learning_rate=0.1,
                        random_state = 1) #random_state参数指定分类器训练时使用的随机算法的随机种子
ada = ada.fit(X_train, Y_train)
Y_train_pred = ada.predict(X_train)
Y_test_pred = ada.predict(X_test)
accuracy_score(Y_train, Y_train_pred)  #得到训练集上准确率
accuracy_score(Y_test, Y_test_pred)    #得到测试集上准确率



猜你喜欢

转载自blog.csdn.net/henreash/article/details/79097670