Docker训练营Docker基础知识学习笔记5

这篇博客主要介绍了模型融合技术,包括平均模型、投票模型、Stacking模型和Blending模型,并提供了相关代码示例。通过学习,强调了多尝试模型融合、观察数据与模型关系以及选择合适模型的重要性。
摘要由CSDN通过智能技术生成

一、学习知识点概要

1、模型融合

2、多种融合方案

3、实现模型的代码

二、学习内容

1、平均模型

  • 简单加权平均,结果直接融合 求多个预测结果的平均值。pre1-pren分别是n组模型预测出来的结果,将其进行加权融。pre = (pre1 + pre2 + pre3 +...+pren )/n
  • 加权平均法 一般根据之前预测模型的准确率,进行加权融合,将准确性高的模型赋予更高的权重。pre = 0.3pre1 + 0.3pre2 + 0.4pre3

2、投票模型

  • 简单投票
  • from xgboost import XGBClassifier
    from sklearn.linear_model import LogisticRegression
    from sklearn.ensemble import RandomForestClassifier, VotingClassifier
    clf1 = LogisticRegression(random_state=1)
    clf2 = RandomForestClassifier(random_state=1)
    clf3 = XGBClassifier(learning_rate=0.1, n_estimators=150, max_depth=4, min_child_weight=2, subsample=0.7,objective='binary:logistic')

    vclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('xgb', clf3)])
    vclf = vclf .fit(x_train,y_train)
    print(vclf .predict(x_test))

  • 加权投票

       from xgboost import XGBClassifier
       from sklearn.linear_model import LogisticRegression
       from sklearn.ensemble import RandomForestClassifier, VotingClassifier
       clf1 = LogisticRegression(random_state=1)
       clf2 = RandomForestClassifier(random_state=1)
       clf3 = XGBClassifier(learning_rate=0.1, n_estimators=150, max_depth=4, min_child_weight=2, subsample=0.7,objective='binary:logistic')

       vclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('xgb', clf3)], voting='soft', weights=[2, 1, 1])
       vclf = vclf .fit(x_train,y_train)
       print(vclf .predict(x_test))

3、Stacking模型

      import warnings
      warnings.filterwarnings('ignore')
      import itertools
      import numpy as np
      import seaborn as sns
      import matplotlib.pyplot as plt
      import matplotlib.gridspec as gridspec
      from sklearn import datasets
      from sklearn.linear_model import LogisticRegression
      from sklearn.neighbors import KNeighborsClassifier
      from sklearn.naive_bayes import GaussianNB 
      from sklearn.ensemble import RandomForestClassifier
      from mlxtend.classifier import StackingClassifier
      from sklearn.model_selection import cross_val_score, train_test_split
      from mlxtend.plotting import plot_learning_curves
      from mlxtend.plotting import plot_decision_regions

      # 以python自带的鸢尾花数据集为例
      iris = datasets.load_iris()
      X, y = iris.data[:, 1:3], iris.target
      clf1 = KNeighborsClassifier(n_neighbors=1)
      clf2 = RandomForestClassifier(random_state=1)
      clf3 = GaussianNB()
      lr = LogisticRegression()
      sclf = StackingClassifier(classifiers=[clf1, clf2, clf3], 
                          meta_classifier=lr)

      label = ['KNN', 'Random Forest', 'Naive Bayes', 'Stacking Classifier']
     clf_list = [clf1, clf2, clf3, sclf]
     fig = plt.figure(figsize=(10,8))
     gs = gridspec.GridSpec(2, 2)
     grid = itertools.product([0,1],repeat=2)
     clf_cv_mean = []
     clf_cv_std = []
     for clf, label, grd in zip(clf_list, label, grid)   
    scores = cross_val_score(clf, X, y, cv=5, scoring='accuracy')
    print("Accuracy: %.2f (+/- %.2f) [%s]" %(scores.mean(), scores.std(), label))
    clf_cv_mean.append(scores.mean())
    clf_cv_std.append(scores.std())
        
    clf.fit(X, y)
    ax = plt.subplot(gs[grd[0], grd[1]])
    fig = plot_decision_regions(X=X, y=y, clf=clf)
    plt.title(label)
    plt.show()

4、blending模型

    from sklearn.ensemble import ExtraTreesClassifier
    from sklearn.ensemble import GradientBoostingClassifier
    from sklearn.metrics import roc_auc_score
    # 以python自带的鸢尾花数据集为例
   data_0 = iris.data
   data = data_0[:100,:]

   target_0 = iris.target
   target = target_0[:100]
   #模型融合中基学习器
   clfs = [LogisticRegression(),
            RandomForestClassifier(),
            ExtraTreesClassifier(),
            GradientBoostingClassifier()]
 
     #切分一部分数据作为测试集
     X, X_predict, y, y_predict = train_test_split(data, target, test_size=0.3, random_state=914)

    #切分训练数据集为d1,d2两部分
    X_d1, X_d2, y_d1, y_d2 = train_test_split(X, y, test_size=0.5, random_state=914)
    dataset_d1 = np.zeros((X_d2.shape[0], len(clfs)))
    dataset_d2 = np.zeros((X_predict.shape[0], len(clfs)))
    for j, clf in enumerate(clfs):
        #依次训练各个单模型
        clf.fit(X_d1, y_d1)
        y_submission = clf.predict_proba(X_d2)[:, 1]
        dataset_d1[:, j] = y_submission
        #对于测试集,直接用这k个模型的预测值作为新的特征。
        dataset_d2[:, j] = clf.predict_proba(X_predict)[:, 1]
        print("val auc Score: %f" % roc_auc_score(y_predict, dataset_d2[:, j]))

    #融合使用的模型
    clf = GradientBoostingClassifier()
    clf.fit(dataset_d1, y_d2)
    y_submission = clf.predict_proba(dataset_d2)[:, 1]
    print("Val auc Score of Blending: %f" % (roc_auc_score(y_predict, y_submission)))

三、学习问题与解答

1、要多尝试多种模型融合

2、多观察数据与模型之间的相互关系

3、懂得判断模型好坏

4、如何应用合理模型

四、学习思考与总结

1、需了解和熟悉更多模型

2、需懂得利用多个好的模型融合

3、需灵活分析各个类型变量间及模型的适合关系

4、需灵活分析数据特征及应用较好的模型

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

城南小巷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值