美文网首页
集成学习和随机森林

集成学习和随机森林

作者: 元宝的技术日常 | 来源:发表于2020-04-23 21:32 被阅读0次

    1、集成学习

    前几篇写了常见的几个机器学习算法,用这些算法训练出的模型各有优劣。而在实际的工程中,目标一定是贪心的,想要的更多地是万无一失。不难想到,把所有的模型集成在一起,做一个强大的、拥有更多优势的模型,以“饱和式救援”的思路来保证万无一失,这便是集成学习的原理。

    当把模型集成到一个大的模型中时,最终的结果听谁的又成了一个问题,一般会有两种解决方案:硬投票-hard_voting和软投票-soft_voting。硬投票,就是少数服从多数。软投票,就是综合了各个算法预测标签的概率,基于概率平均的投票,所以软投票的前置条件是集成的每个算法都能估计概率。

    硬投票-hard_voting 软投票-soft_voting

    从投票的角度来看,集成的模型越多越好,但机器学习的算法训练出的模型还是远远不够的。那么既然算法的类别只有这几类,训练出各个算法的不同子模型就是增加模型个数的一种解决方案。训练出不同子模型,重点就是模型的差异性,如何创建差异性呢?

    这种差异性是通过每个子模型只看样本数据的一部分实现的。对于取数据,取样方式分为放回取样Bagging和不放回取样Pasting,更常用的是Bagging方式,统计学中叫bootstrap。对于每个子模型来讲,因为看的样本数据减少了,那么准确率肯定会降低。但从整体的效果而言,子模型的准确并不需要太高的准确率,如果单个子模型的准确率是51%的话,500个子模型最终效果可以达到65.6%;如果单个子模型的准确率是60%的话,500个子模型最终效果就可以达到99.999%。

    采用bobo老师创建简单测试用例

    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn import datasets
    from sklearn.model_selection import train_test_split
    
    # 创建测试数据
    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() # 见plt.show1
    
    plt.show1
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42) # 创建训练和测试数据
    
    from sklearn.linear_model import LogisticRegression
    from sklearn.svm import SVC
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.ensemble import VotingClassifier
    
    # 使用 Hard Voting Classifier
    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
    
    
    # 使用 Soft Voting Classifier
    voting_clf2 = VotingClassifier(estimators=[
        ('log_clf', LogisticRegression()), 
        ('svm_clf', SVC(probability=True)),#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
    

    2、随机森林

    随机森林,就是一种集成学习。它的子模型是一棵一棵的决策树,决策树作为一种非参数学习算法,使用它创建子模型更能产生差异性。

    采用bobo老师创建简单测试用例

    from sklearn.ensemble import RandomForestClassifier
    
    rf_clf = RandomForestClassifier(n_estimators=500, oob_score=True, random_state=666, n_jobs=-1)
    rf_clf.fit(X, y)
    rf_clf.oob_score_
    # 0.89200000000000002
    
    rf_clf2 = RandomForestClassifier(n_estimators=500, max_leaf_nodes=16, oob_score=True, random_state=666, n_jobs=-1)
    rf_clf2.fit(X, y)
    rf_clf2.oob_score_
    # 0.90600000000000003
    

    相关文章

      网友评论

          本文标题:集成学习和随机森林

          本文链接:https://www.haomeiwen.com/subject/lrxsihtx.html