机器学习:决策树(CART 、决策树中的超参数)

  • 老师非参数学习的算法都容易产生过拟合

一、决策树模型的创建方式、时间复杂度

 1)创建方式

  • 决策树算法
  1. 既可以解决分类问题,又可以解决回归问题;
  2. CART 创建决策树的方式:根据某一维度 d 和某一个 阈值 v 进行二分;(得到的是一个二叉树
  3. scikit-learn 中的创建决策树的方式:CART(Classification And Regression Tree),也就是二叉树的方式;
  4. 创建决策树的方式有多种:ID3、C4.5、C5.0、CART;

 

 2)二叉树的实际复杂度

  • 预测样本时的时间复杂度:O(logm)
  1. m:待预测的样本个数;
  2. logm:表示“树”的高度,也就是 “树” 一共有 logm 层;
  3. 可以这样理解:每一次的节点划分,都是对当前实际的对半划分,则“树”的高度是 logm ;当传入一个未知的新的样本时,从根节点处开始一步一步做决策,走到“叶子”节点;

 

  • 训练决策树模型时的时间复杂度:O(n*m*logm)
  1. X_train 是(m,n);
  2. “树”是 logm 级别的,如果每一层只划分一个节点,在一个节点上大概都要对数据集做 n*m 次划分,则训练的时间复杂度为 O(n*m*logm);

 

 

二、scikit-learn 中决策树算法的参数

 1)决策树算法的问题

  1. 训练决策树模型的时间复杂度比较大:O(n*m*logm);
  2. 训练决策树模型时容易产生过拟合;(这也是所有非参数学习算法的共同问题)
  • 方案:剪枝——可降低复杂度,同时解决过拟合;

 

 2)常用参数

  • 参数的功能:防止模型过拟合或欠拟合,降低训练模型的时间复杂度

  • from sklearn.tree import DecisionTreeClassifier
    
    dt_clf = DecisionTreeClassifier(max_depth=2, criterion='entropy', min_samples_split=10, min_samples_leaf=6, max_leaf_nodes=4)
    dt_clf.fit(X, y)
  1. max_depth = 2:决策树模型的最高深度为 2;
  2. criterion = 'entropy':划分节点数据集时,采用信息熵为判断条件;
  3. criterion = 'gini':划分节点数据集时,采用基尼系数为判断条件;
  4. min_samples_split = 10:节点数据集中至少要有 10 个样本,才能继续对节点数据集进行划分;否则即使信息熵和基尼系数都比较大,也不在划分数据集;
  5. min_samples_leaf = 6:一个“叶子”节点,至少要有 6 个样本;
  6. max_leaf_nodes = 4:模型最多只能有 4 个“叶子”节点;

 

  • scikit-learn 中的决策树算法中还有很多其它参数,可查官方文档;
  • 实际应用中,需要将各种参数相互组合,可以用网格搜索的方式找到最佳的一组;

 

posted @ 2018-08-15 11:29  何永灿  阅读(2303)  评论(0编辑  收藏  举报