• 机器学习:集成学习(集成学习思想、scikit-learn 中的集成分类器)


    一、集成学习的思想

    • 集成学习的思路:一个问题(如分类问题),让多种算法参与预测(如下图中的算法都可以解决分类问题),在多个预测结果中,选择出现最多的预测类别做为该样本的最终预测类别;
    • 生活中的集成思维:
    1. 选择电影:10 个人中,如果有8个人觉得这个电影值得看,那么很多人就会跟进这个现象选择看这部电影;

    二、scikit-learn 中的集成分类器

    • scikit-learn 中封装的集成分类器:VotingClassifier

     1)模拟集成学习操作

    • 模拟数据集

      import numpy as np
      import matplotlib.pyplot as plt
      from sklearn import datasets
      
      # n_samples=500:表示生成 500 个样本;默认自动生成 100 个样本;
      X, y = datasets.make_moons(n_samples=500, noise=0.3, random_state=42)
      
      from sklearn.model_selection import train_test_split
      X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
    1. datasets.make_moons(n_samples=500):表示生成 500 个样本;默认自动生成 100 个样本;
    • 使用逻辑回归算法分类器

      from sklearn.linear_model import LogisticRegression
      
      log_clf = LogisticRegression()
      log_clf.fit(X_train, y_train)
      log_clf.score(X_test, y_test)
      # 准确率:0.864
    • 使用 SVM 算法分类器

      from sklearn.svm import SVC
      
      svm_clf = SVC()
      svm_clf.fit(X_train, y_train)
      svm_clf.score(X_test, y_test)
      # 准确率:0.888
    • 使用决策树算法分类器

      from sklearn.tree import DecisionTreeClassifier
      
      dt_clf = DecisionTreeClassifier()
      dt_clf.fit(X_train, y_train)
      dt_clf.score(X_test, y_test)
      # 准确率:0.84
    • 对各个算法预测结果投票
      y_predict1 = log_clf.predict(X_test)
      y_predict2 = svm_clf.predict(X_test)
      y_predict3 = dt_clf.predict(X_test)
      
      y_predict = np.array((y_predict1 + y_predict2 + y_predict3) >= 2, dtype='int')
    • 投票方式:
    1. (y_predict1 + y_predict2 + y_predict3) >= 2
    2. 三种算法的预测结果中,只有当 2 个或 3 个的预测结果为 1 时,最终的预测结果才为 1;
    • 查看投票结果的准确率
      from sklearn.metrics import accuracy_score
      
      accuracy_score(y_test, y_predict)
      # 准确率:0.896
    • 采用集成学习思路得到的准确率比其它 3 中算法得到的准确率高;

    二、scikit-learn 中的集成分类器

     1)代码

    • from sklearn.ensemble import VotingClassifier
      # 集成分类器 VotingClassifier 的参数:
          # 1)estimators=[]:传入需要使用的算法,放在列表中,使用方式类似管道 Pipeline;
          # 2)voting='hard':表示选择最终预测结果的方式,以出现最多的分类结果作为最终的预测结果;
      # 正常情况下,需要对所选择的算法进行调参;
      voting_clf = VotingClassifier(estimators=[
          ('log_clf', LogisticRegression()),
          ('svm_clf', SVC()),
          ('dt_clf', DecisionTreeClassifier())
      ], voting='hard')
      
      voting_clf.fit(X_train, y_train)
      voting_clf.score(X_test, y_test)
      # 准确率:0.896
    • 注意
    1. 使用方式如以上红色代码;
    2. 参数 estimators=[ ]:传入需要使用的算法,放在列表中,使用方式类似管道 Pipeline;
    3. 参数 voting='hard':表示选择最终预测结果的方式,以出现最多的分类结果作为最终的预测结果;
    4. 正常情况下,需要对所选择的算法进行调参;
  • 相关阅读:
    docker容器如何配置hosts文件?
    如何提高LaTeX的编译速度?
    VS编译时提示“无法查找或打开 PDB 文件”的解决方法
    全网最全电子书下载汇总
    chrome谷歌浏览器扩展程序推荐: 一键读图OCR
    关于研究生英文论文写作的一点思考
    小狼毫输入法的详细配置大全
    java的char类型
    Android APP 自动更新实现
    java中double数据失精度(失真)问题处理
  • 原文地址:https://www.cnblogs.com/volcao/p/9482268.html
Copyright © 2020-2023  润新知