决策树(Decision tree,DT)算法笔记(二)-scikit-learn

写在前面的话:哈喽,大家早安、午安、晚安喽,欢迎大家指点,也希望我的内容可以温暖、帮助同在学习路上的人们~

正文开始~~


上一篇,基于分类决策树的原理,用Python初步实现决策分类的函数,详情见决策树(Decision tree,DT)算法笔记(一)-Python。今天将基于scikit-learn来实现决策分类。

scikit-learn的决策树类型主要是来源于sklearn.tree,主要分为决策树分类DecisionTreeClassifier和决策树回归模型DecisionTreeRegressor。今天主要分析决策树分类模块DecisionTreeClassifier

1、首先来研究下DecisionTreeClassifier模块中的参数列表

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,min_impurity_split=1e-07,class_weight=None,presort=False)

oh,我的天哪,这么多,眼花了,请给我来瓶六神花露水~`~马上开启正经脸

criterion->表示在基于特征划分数据集合时,选择特征的标准。默认是’gini‘,即'Gini impurity'(Gini不纯度),还可以是criterion='entropy'

Gini不纯度表示该Gini度量是指随机选择集合中的元素,根据集合中label的分布将该元素赋予分类,该元素分类错误的几率;entropy则表示采用信息增益来选择特征

splitter->表示在构造树时,选择结点的原则,默认是splitter='best',即选择最好的特征点分类,比如基于信息增益分类时,则选择信息增益最大的特征点,还可以是'random'

max_features->这个参数表示在划分数据集时考虑的最多的特征值数量,根据数据类型表示的意义也不同:int值->在每次split时,最大特征数;float->表示百分数,即(max_features * n_features);'auto'->max_features=sqrt(n_features);'sqrt'->max_features=sqrt(n_features);

'log2'->max_features=log2(n_features);'None'->max_features=n_features

max_depth->int,default=None,表示数的最大深度

min_samples_split->int,float,optional(default=2),表示在分解内部结点时最少的样本数

min_samples_leaf->int,float,optional(default=1),表示每个叶结点最小的样本数目

min_weight_fraction_leaf->float,optional(default=0),如果设置为0,则表示所有样本的权重是一样的

max_leaf_nodes->int,None,optional(default=None),主要是在最优分类中考虑

class_weight->dict,list of dicts,'balanced',None,optional(default=None),主要是考虑每个类的权重{class_label: weight}

random_state->int, RandomState instance or None, optional (default=None)

min_impurity_split->float, optional (default=1e-7),树增长停止阈值,仅仅当他的impurity超过阈值时才会继续向下分解,否则会成为叶结点

presort->bool,optional(default=False),表示在进行拟合前,是否预分数据来加快数的构建。对于数据集非常庞大的分类,presort=true将导致整个分类变的缓慢;当数据集较小,且数的深度有限制,presort=true才会加速分类

剩下的就是该模型的一些属性,比如classes_,feature_importances_,max_features_,n_classes_,n_features_, n_outputs_,tree_

基于DecisionTreeClassifier模型进行决策分类

1)获取数据,将数据分为训练集和测试集,同时利用sklearn.preprocessing模块中的函数来对原始数据进行标准化,因为在一个范围内的数据会有效提高分类的准确性,代码见图1

其中,一些基本的标准化数据的方法有:包括preprocessing.scale(X)、preprocessing.StandardScaler().fit(X)、preprocessing.MinMaxScaler().fit_transform(X_train)、preprocessing.MaxAbsScaler().fit_transform(X),其中X是np.array类的数组

决策树(Decision tree,DT)算法笔记(二)-scikit-learn_第1张图片
图1 数据标准化与分类

2)利用DecisionTreeClassifier来训练数据

决策树(Decision tree,DT)算法笔记(二)-scikit-learn_第2张图片
图2 训练决策树模型

3)检测模型的有效性

图3 检测决策树模型的有效性,准确率为0.966...

4)预测输入级的类别

图4 基于决策树模型预测输出类别

5)获取模型的相关参数

(1)获取各个特征值的重要性,通过feature_importances_属性,取值越大越重要


图5 特征的重要性

从结论来看,第4个特征值的区分度最大,第1个和第2个特征对数据集的区分度较小,其实从属性的分布来看,也证实了这点,见图6、图7

决策树(Decision tree,DT)算法笔记(二)-scikit-learn_第3张图片
图6 左右图分别为训练集与测试集中,第1个和第2个属性的分布
决策树(Decision tree,DT)算法笔记(二)-scikit-learn_第4张图片
图7 左右图分别为训练集与测试集中,第3个和第4个属性的分布

(2)获取标签的类型,通过classes_

图8 获取标签类型


以上就是基于scikit-learn的DecisionTreeClassifier模型进行的分类决策树运算,随着算法复杂度的增加,scikit-learn的便利性更加明显。

好哒,谢谢大家,请大牛拍砖,也希望自己的内容对大家有所帮助~~剧情透露,下集学习朴素贝叶斯啦~~

你可能感兴趣的:(决策树(Decision tree,DT)算法笔记(二)-scikit-learn)