本文共 3477 字,大约阅读时间需要 11 分钟。
集成学习是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法。
#准备数据X,y = datasets.make_moons(noise=0.3,n_samples=500,random_state=42)from sklearn.model_selection import train_test_splitX_train,X_test,y_train,y_test = train_test_split(X,y,random_state=666)#逻辑回归预测from sklearn.linear_model import LogisticRegressionlog_reg = LogisticRegression()log_reg.fit(X_train,y_train)log_reg.score(X_test,y_test)#SVM预测from sklearn.svm import SVCsvc = SVC()svc.fit(X_train,y_train)svc.score(X_test,y_test)#决策树预测from sklearn.tree import DecisionTreeClassifierdec_clf = DecisionTreeClassifier()dec_clf.fit(X_train,y_train)dec_clf.score(X_test,y_test)y1_predict = log_reg.predict(X_test)y2_predict = svc.predict(X_test)y3_predict = dec_clf.predict(X_test)#使用集成学习的方法决定最终预测结果y_predict = np.array((y1_predict+y2_predict+y3_predict)>=2,dtype='int')
from sklearn.ensemble import VotingClassifiervoting_clf = VotingClassifier(estimators=[ ('log_clf',LogisticRegression()), ('SVM',SVC()), ('dec_clf',DecisionTreeClassifier())],voting='hard') #hard为少数服从多数的集成学习方式voting_clf.fit(X_train,y_train)voting_clf.score(X_test,y_test)
voting_clf2 = VotingClassifier(estimators=[ ('log_clf',LogisticRegression()), ('SVM',SVC(probability=True)), ('dec_clf',DecisionTreeClassifier(random_state=666))],voting='soft')voting_clf2.fit(X_train,y_train)voting_clf2.score(X_test,y_test)
让每个子模型只看数据的一部分,用放回取样的方式来训练大量的子模型,作为集成学习的方法。
from sklearn.ensemble import BaggingClassifier#创建Bagging集成学习的参数#使用DecisionTreeClassifier()作为子模型,决策树作为子模型更容易创建子模型间的差异性,对于Bagging这种方式的集成学习来说,决策树是相对较好的子模型选择#max_samples决定每个子模型最多参考样本数据量#n_estimators决定生成多少个子模型#bootstrap决定采用放回抽样还是不放回抽样,True为放回抽样bagging_clf = BaggingClassifier(DecisionTreeClassifier(),max_samples=100,n_estimators=500,bootstrap=True)
上例为对样本进行随机采样,但对于Bagging,其实有更多的方法可以进行采样来创建子模型
#max_features设置随机取的最大样本特征数量#bootstrap_features设置对特征进行放回或不放回取样#oob_score设置对所有样本进行采样,不分离训练和测试数据集,而在随机采样中所有没有被采样的数据作为测试集使用random_subspaces_clf = BaggingClassifier(DecisionTreeClassifier(),max_samples=500,n_estimators=500,bootstrap=True, max_features=1,bootstrap_features=True,n_jobs=-1,oob_score=True)random_subspaces_clf.fit(X,y)random_subspaces_clf.oob_score_
random_patches_clf = BaggingClassifier(DecisionTreeClassifier(),max_samples=100,n_estimators=500,bootstrap=True, max_features=1,bootstrap_features=True,n_jobs=-1)random_patches_clf.fit(X,y)random_patches_clf.oob_score
from sklearn.ensemble import RandomForestClassifierrf_clf = RandomForestClassifier(n_estimators=500,oob_score=True)rf_clf.fit(X,y)rf_clf.oob_score_
from sklearn.ensemble import ExtraTreesClassifieret_clf = ExtraTreesClassifier(n_estimators=500,oob_score=True,n_jobs=-1,bootstrap=True)et_clf.fit(X,y)
from sklearn.ensemble import AdaBoostClassifierada_clf = AdaBoostClassifier(DecisionTreeClassifier(),n_estimators=500)ada_clf.fit(X_train,y_train)ada_clf.score(X_test,y_test)
#GradientBoostingClassifier本身基于决策树进行,因此不需要设置best_estamitorfrom sklearn.ensemble import GradientBoostingClassifierada_clf = GradientBoostingClassifier(n_estimators=500)ada_clf.fit(X_train,y_train)
转载地址:http://mmbsl.baihongyu.com/