美文网首页自然语言处理类
决策树(Decision tree,DT)算法笔记(二)-sci

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

作者: keepStriving | 来源:发表于2017-03-15 11:20 被阅读4562次

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

    正文开始~~


    上一篇,基于分类决策树的原理,用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类的数组

    图1 数据标准化与分类

    2)利用DecisionTreeClassifier来训练数据

    图2 训练决策树模型

    3)检测模型的有效性

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

    4)预测输入级的类别

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

    5)获取模型的相关参数

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

    图5 特征的重要性

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

    图6 左右图分别为训练集与测试集中,第1个和第2个属性的分布 图7 左右图分别为训练集与测试集中,第3个和第4个属性的分布

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

    图8 获取标签类型

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

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

    相关文章

      网友评论

        本文标题:决策树(Decision tree,DT)算法笔记(二)-sci

        本文链接:https://www.haomeiwen.com/subject/merhnttx.html