• 机器学习-决策树


    决策树算法是机器学习中十分重要的算法,它的思想很简单,模拟了人的决策思想,就是根据一些条件做一些决策。比如,我们决策今天是否要去逛街,要看天气好不好、心情好不好、有没有妹子陪等等。

    常见的决策树有ID3、C4.5和CART决策树,主要区别是在选择相关因数的算法不同,前两者和信息增益有关、后一种是与基尼指数有关。具体关于这几种决策树的详细信息就不说明了,大家可以网上看看,我这里主要是以代码实现为主以及一些代码的说明。

    这次代码还是使用sklearn的的数据吧,以iris花为列子。

    #第三天决策树
    from sklearn import tree
    from sklearn.datasets import load_iris
    from sklearn.metrics import classification_report,confusion_matrix
    from sklearn.model_selection import train_test_split
    
    #我的例子主要是以代码实现和对其中的说明为主
    #如果想了解具体的算法原理网上有很多,我也不想复制粘贴了
    #这里还是用iris花作为例子
    iris_data = load_iris()['data']
    iris_label = load_iris()['target']
    
    #将数据分为训练集和测试集合,test_size表示测试集锁占的比例
    #得到的四个值分别是训练集的特征、测试集的特征、训练集的label、测试集的label
    train_x,test_x,train_y,test_y = train_test_split(iris_data,iris_label,test_size=0.3)
    
    #ID3和C4.5就是基于信息增益和信息增益率的,cart决策树则是基于基尼指数的
    #criterion默认为gini指数,我们这里用entropy表示用信息增益
    clf = tree.DecisionTreeClassifier(criterion='entropy')
    
    #训练和预测
    clf.fit(train_x,train_y)
    predict_y = clf.predict(test_x)
    
    #预测结果打印,上一篇逻辑回归和线性回归中有解释classification_report的结果说明
    print(classification_report(test_y,predict_y))

    预测结果分析如下:

                precision    recall    f1-score   support
    
    0              1.00      1.00      1.00        18
    1              0.93      0.93      0.93        15
    2              0.92      0.92      0.92        12
    
    avg / total    0.96      0.96      0.96        45

    机器学习-逻辑回归和线性回归中我已经说明过这个结果的含义了。

    这四列分别表示准确率、召回率、F1分数以及与数量,三行分别是每个一个类别的预测数据。

    之前还些了一篇ID3决策树算法,主要讲了一下原理并且用matlab实现了一下算法。

    最后再说一下决策树缓解过拟合的主要方法,预剪枝后剪枝

    预剪枝:在对节点划分前进行处理,判断划分前后精度是否有提高,若没有提高就进行剪枝。预剪枝使得决策树很多分支没有展开,不仅有效的降低了过拟合的风险,还显著的减少了训练时间。但是预剪枝又过于贪心了,一些节点展开可能没有对精度提高,但是展开的节点下级再分支很有可能会提升精度,而预剪枝则全部否定了这种可能性,带来了欠拟合的风险。

    后剪枝:后剪枝是在决策树生成之后,自底向上对非叶节点处理,它的好处就是比预剪枝保留了更多有用的分支,一般情况欠拟合的风险比预剪枝小,泛化性能也常优于预剪枝。但是后剪枝之中处理模式训练开销比预剪枝要大很多。

  • 相关阅读:
    Android Studio打包过程和应用安装过程
    MVP模式和Clean模式
    Gradle入门学习---认识buildeTypes和dependencies
    微信小程序官方DEMO解读
    从ListView逐步演变到RecyclerView
    Mac下如何配置环境变量
    Android上滑手势触发和不增加布局层级扩大点击区域
    寻找Fragment的替代品的尝试
    高效的策略模式设计方法
    利用ListView的基本方法实现效果
  • 原文地址:https://www.cnblogs.com/yifengjianbai/p/10382757.html
Copyright © 2020-2023  润新知