• sklearn中对随机森林进行调参


    一、闲言碎语

    具体的方法可参考我的这篇文章python+sklearn进行交叉验证(使用交叉验证对数据划分,模型评估和参数估计,使用决策树举例)
    方法都是相同的,不同的是要调哪些参数,我在这里主要介绍一下随机森林中的主要的参数。
    分割线

    二、参数问题

    随机森林就是多颗决策树,那么调参可以分为两类:

    1. 随机森林框架参数
      n_estimators:
      也就是弱学习器的最大迭代次数,或者说最大的弱学习器的个数。
      oob_score:
      即是否采用袋外样本来评估模型的好坏。默认识False。个人推荐设置为True,因为袋外分数反应了一个模型拟合后的泛化能力。
      criterion:
      即CART树做划分时对特征的评价标准。分类模型和回归模型的损失函数是不一样的。分类RF对应的CART分类树默认是基尼系数gini,另一个可选择的标准是信息增益。回归RF对应的CART回归树默认是均方差mse,另一个可以选择的标准是绝对值差mae。一般来说选择默认的标准就已经很好的。
    2. 随机森林决策树参数
      决策树参数中最重要的包括最大特征数max_features, 最大深度max_depth, 内部节点再划分所需最小样本数min_samples_split和叶子节点最少样本数min_samples_leaf(这里写的比我开头介绍的那篇文章多一个参数,由于之前写的那篇文章比较早,所以可能考虑的少,不过再进行考虑max_features之后,发现还是默认的效果最好)

    参数的重要性
    首先看下面这张图(来源:知乎):
    main_parameter
    在这里面主要看最右侧的影响程度,按这个顺序调参即可,还有一个参数oob_score,其实可以放到倒数第二个执行。

    看是不是过拟合,有一个方法:可以在训练集上进行训练模型之后,可以对训练集进行测试,一般未调参之前,都会达到1.0的精度,显然是过拟合。在经过调参之后,精度会下降,说明消除掉过拟合了,可以看下表train那一列。

    三、结论

    conclusion

    可以看出,使用随机森林的时候,精度达到了最高的0.8325。到目前为止,除了上表提到的决策树,神经网络,逻辑回归,随机森林,以及集成方法(使用了神经网络,逻辑回归,随机森林)之外


    集成方法部分代码如下:

    clf1 = tree.DecisionTreeClassifier(criterion="entropy", max_depth=9, min_samples_leaf=7, min_samples_split=2)
    clf2 = MLPClassifier(hidden_layer_sizes=(12, 9), activation='tanh', max_iter=3000, solver='adam', random_state=42, learning_rate='constant', alpha=0.0001, batch_size=200, tol=0.00001, beta_1=0.9, beta_2=0.999, epsilon=1e-8)
    clf3 = RandomForestClassifier(n_estimators=101, criterion='gini', oob_score=False, max_features='auto', max_depth=15, random_state=42, min_samples_leaf=2, min_samples_split=2)
    
    eclf1 = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('mlp', clf3)], voting='soft', weights=[1, 2, 2], flatten_transform=True)
    
    cv = StratifiedShuffleSplit(n_splits=10, test_size=0.1, random_state=42)
    score = cross_val_score(eclf1, x, y, cv=cv).mean()
    print(score)
    

    (接上段),还使用了支持向量机SVM, Adaboost, Native_Bayes, KNN,一共9种机器学习算法,之所以这四个没有进行调参,是因为他们的精度真的很低,即使调参,效果也不会很好,所以主要对decision_tree, neural_network, logistic, random_dorest, vote这五种方法进行调参,也就是上表的五种方法。可以说,在现有的数据集上精度可能已经很难提升了,0.8325成为了最好的结果,要想提升我看只能从数据入手了,不过因为一些原因,数据收集是个难点,就看之后会有什么进展吧,结束!

    四、参考文献

    1. https://zhuanlan.zhihu.com/p/126288078
    2. https://blog.csdn.net/geduo_feng/article/details/79558572
  • 相关阅读:
    从零开始~
    SVN
    了解下几个证书~~
    重要的技术发展趋势
    求职路上英语面试试题问答大全
    C语言比java重要吗?
    开源solr搜索服务器配置
    全文索引 与 Like 的实现原理
    nginx搭建多个站点
    .Solr构建索引查询索引
  • 原文地址:https://www.cnblogs.com/ycycn/p/14181583.html
Copyright © 2020-2023  润新知