1. 信息论基础(熵 联合熵 条件熵 信息增益 基尼不纯度)
信息熵:信息熵是度量样本集合纯度常用的一种指标。定义为:
联合熵:联合熵就是度量一个联合分布的随机系统的不确定度
条件熵:在得知某一确定信息的基础上获取另外一个信息时所获得的信息量。
信息增益:信息增益代表使用属性a带来的纯度提升,信息增益越大,带来的纯度提升越大。计算公式就是父节点的信息熵减去所有子节点的信息熵。
基尼不纯度:从一个数据集中随机选取子项,度量其被错误的划分到其他组里的概率。
2.决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景
决策树的基本步骤:特征选择,决策树生成,决策树剪枝。
决策树生成的过程就是将数据集不断划分成为纯度更高,不确定更小的子集的过程。
ID3算法:ID3的算法计算的是信息增益,缺点是喜欢选择选项多的特征
C4.5算法:在ID3的基础熵增加信息增益率,采用了悲观剪枝,采用了离散化处理连续属性,处理缺失值
CART:采用基尼系数划分数据,同时决定改特征的最优二值切分点,可针对离散和连续型,可以做分类和回归。
3. 回归树原理
将数据和属性向纯度高的方向进行分类
4. 决策树防止过拟合手段
剪枝是对付过拟合的主要手段,基本策略有“预剪枝”和“后剪枝”,预剪枝是说在决策树生成的过程中对这个节点进行估计,如果不能提升泛化能力就停止划分节点。后剪枝是从训练集中生成一颗完整的决策树,自底向上的进行考察如果子树变成子节点可以带来泛化能力的提升的话,那就将子树替换成为子节点。
5. 模型评估
回归参照线性回归评价指标,分类参照Logistic评价指标
6. sklearn参数详解,Python绘制决策树
sklearn详解
from sklearn import tree
mode = tree.DecisionTreeClassifier(criterion=‘gini’)
mode.fit(X,Y)
y_test = mode.predict(x_test)
其中对于函数 tree.DecisionTreeClassifier()中的具体参数
class sklearn.tree.DecisionTreeClassifier(criterion=‘gini’, splitter=‘best’, max_depth=None, min_samples_split=2,min_samples_leaf =1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None,class_weight=None, presort=False)
criterion:string类型,可选(默认为"gini")
衡量分类的质量。支持的标准有"gini"代表的是Gini impurity(不纯度)与"entropy"代表的是information gain(信息增益)。
splitter:string类型,可选(默认为"best")
一种用来在节点中选择分类的策略。支持的策略有"best",选择最好的分类,"random"选择最好的随机分类。
max_features:int,float,string or None 可选(默认为None)
在进行分类时需要考虑的特征数。
1.如果是int,在每次分类是都要考虑max_features个特征。
2.如果是float,那么max_features是一个百分率并且分类时需要考虑的特征数是int(max_features*n_features,其中n_features是训练完成时发特征数)。
3.如果是auto,max_features=sqrt(n_features)
4.如果是sqrt,max_features=sqrt(n_features)
5.如果是log2,max_features=log2(n_features)
6.如果是None,max_features=n_features
注意:至少找到一个样本点有效的被分类时,搜索分类才会停止。
max_depth:int or None,可选(默认为"None")
表示树的最大深度。如果是"None",则节点会一直扩展直到所有的叶子都是纯的或者所有的叶子节点都包含少于min_samples_split个样本点。忽视max_leaf_nodes是不是为None。
min_samples_split:int,float,可选(默认为2)
区分一个内部节点需要的最少的样本数。
1.如果是int,将其最为最小的样本数。
2.如果是float,min_samples_split是一个百分率并且ceil(min_samples_split*n_samples)是每个分类需要的样本数。ceil是取大于或等于指定表达式的最小整数。
min_samples_leaf:int,float,可选(默认为1)
一个叶节点所需要的最小样本数:
1.如果是int,则其为最小样本数
2.如果是float,则它是一个百分率并且ceil(min_samples_leaf*n_samples)是每个节点所需的样本数。
min_weight_fraction_leaf:float,可选(默认为0)
一个叶节点的输入样本所需要的最小的加权分数。
max_leaf_nodes:int,None 可选(默认为None)
在最优方法中使用max_leaf_nodes构建一个树。最好的节点是在杂质相对减少。如果是None则对叶节点的数目没有限制。如果不是None则不考虑max_depth.
class_weight:dict,list of dicts,“Banlanced” or None,可选(默认为None)
表示在表{class_label:weight}中的类的关联权值。如果没有指定,所有类的权值都为1。对于多输出问题,一列字典的顺序可以与一列y的次序相同。
"balanced"模型使用y的值去自动适应权值,并且是以输入数据中类的频率的反比例。如:n_samples/(n_classes*np.bincount(y))。
对于多输出,每列y的权值都会想乘。
如果sample_weight已经指定了,这些权值将于samples以合适的方法相乘。
random_state:int,RandomState instance or None
如果是int,random_state 是随机数字发生器的种子;如果是RandomState,random_state是随机数字发生器,如果是None,随机数字发生器是np.random使用的RandomState instance.
persort:bool,可选(默认为False)
是否预分类数据以加速训练时最好分类的查找。在有大数据集的决策树中,如果设为true可能会减慢训练的过程。当使用一个小数据集或者一个深度受限的决策树中,可以减速训练的过程。