精华内容
下载资源
问答
  • dt决策树算法
    千次阅读
    2019-03-04 09:55:26

    ML之DT:基于DT决策树算法(对比是否经特征筛选FS处理)对Titanic(泰坦尼克号)数据集进行二分类预测

     

     

     

    目录

    输出结果

    设计思路

    核心代码


     

     

     

     

    输出结果

    初步处理后的 X_train: (984, 474) 
       (0, 0)    31.19418104265403
      (0, 78)    1.0
      (0, 82)    1.0
      (0, 366)    1.0
      (0, 391)    1.0
      (0, 435)    1.0
      (0, 437)    1.0
      (0, 473)    1.0
      (1, 0)    31.19418104265403
      (1, 73)    1.0
      (1, 79)    1.0
      (1, 296)    1.0
      (1, 389)    1.0
      (1, 397)    1.0
      (1, 436)    1.0
      (1, 446)    1.0
      (2, 0)    31.19418104265403
      (2, 78)    1.0
      (2, 82)    1.0
      (2, 366)    1.0
      (2, 391)    1.0
      (2, 435)    1.0
      (2, 437)    1.0
      (2, 473)    1.0
      (3, 0)    32.0
      :    :
      (980, 473)    1.0
      (981, 0)    12.0
      (981, 73)    1.0
      (981, 81)    1.0
      (981, 84)    1.0
      (981, 390)    1.0
      (981, 435)    1.0
      (981, 436)    1.0
      (981, 473)    1.0
      (982, 0)    18.0
      (982, 78)    1.0
      (982, 81)    1.0
      (982, 277)    1.0
      (982, 390)    1.0
      (982, 435)    1.0
      (982, 437)    1.0
      (982, 473)    1.0
      (983, 0)    31.19418104265403
      (983, 78)    1.0
      (983, 82)    1.0
      (983, 366)    1.0
      (983, 391)    1.0
      (983, 435)    1.0
      (983, 436)    1.0
      (983, 473)    1.0
    经过FS处理后的 X_train_fs: (984, 94) 
       (0, 93)    1.0
      (0, 85)    1.0
      (0, 83)    1.0
      (0, 76)    1.0
      (0, 71)    1.0
      (0, 27)    1.0
      (0, 24)    1.0
      (0, 0)    31.19418104265403
      (1, 84)    1.0
      (1, 74)    1.0
      (1, 63)    1.0
      (1, 25)    1.0
      (1, 19)    1.0
      (1, 0)    31.19418104265403
      (2, 93)    1.0
      (2, 85)    1.0
      (2, 83)    1.0
      (2, 76)    1.0
      (2, 71)    1.0
      (2, 27)    1.0
      (2, 24)    1.0
      (2, 0)    31.19418104265403
      (3, 93)    1.0
      (3, 85)    1.0
      (3, 83)    1.0
      :    :
      (980, 24)    1.0
      (980, 0)    31.19418104265403
      (981, 93)    1.0
      (981, 84)    1.0
      (981, 83)    1.0
      (981, 75)    1.0
      (981, 28)    1.0
      (981, 26)    1.0
      (981, 19)    1.0
      (981, 0)    12.0
      (982, 93)    1.0
      (982, 85)    1.0
      (982, 83)    1.0
      (982, 75)    1.0
      (982, 26)    1.0
      (982, 24)    1.0
      (982, 0)    18.0
      (983, 93)    1.0
      (983, 84)    1.0
      (983, 83)    1.0
      (983, 76)    1.0
      (983, 71)    1.0
      (983, 27)    1.0
      (983, 24)    1.0
      (983, 0)    31.19418104265403

     

    设计思路

     

    核心代码

    class SelectPercentile Found at: sklearn.feature_selection.univariate_selection
    
    class SelectPercentile(_BaseFilter):
        """Select features according to a percentile of the highest scores.
        
        Read more in the :ref:`User Guide <univariate_feature_selection>`.
        
        Parameters
        ----------
        score_func : callable
        Function taking two arrays X and y, and returning a pair of arrays
        (scores, pvalues) or a single array with scores.
        Default is f_classif (see below "See also"). The default function only
        works with classification tasks.
        
        percentile : int, optional, default=10
        Percent of features to keep.
        
        Attributes
        ----------
        scores_ : array-like, shape=(n_features,)
        Scores of features.
        
        pvalues_ : array-like, shape=(n_features,)
        p-values of feature scores, None if `score_func` returned only scores.
        
        Notes
        -----
        Ties between features with equal scores will be broken in an unspecified
        way.
        
        See also
        --------
        f_classif: ANOVA F-value between label/feature for classification tasks.
        mutual_info_classif: Mutual information for a discrete target.
        chi2: Chi-squared stats of non-negative features for classification tasks.
        f_regression: F-value between label/feature for regression tasks.
        mutual_info_regression: Mutual information for a continuous target.
        SelectKBest: Select features based on the k highest scores.
        SelectFpr: Select features based on a false positive rate test.
        SelectFdr: Select features based on an estimated false discovery rate.
        SelectFwe: Select features based on family-wise error rate.
        GenericUnivariateSelect: Univariate feature selector with configurable mode.
        """
        def __init__(self, score_func=f_classif, percentile=10):
            super(SelectPercentile, self).__init__(score_func)
            self.percentile = percentile
        
        def _check_params(self, X, y):
            if not 0 <= self.percentile <= 100:
                raise ValueError(
                    "percentile should be >=0, <=100; got %r" % self.percentile)
        
        def _get_support_mask(self):
            check_is_fitted(self, 'scores_')
            # Cater for NaNs
            if self.percentile == 100:
                return np.ones(len(self.scores_), dtype=np.bool)
            elif self.percentile == 0:
                return np.zeros(len(self.scores_), dtype=np.bool)
            scores = _clean_nans(self.scores_)
            treshold = stats.scoreatpercentile(scores, 
                100 - self.percentile)
            mask = scores > treshold
            ties = np.where(scores == treshold)[0]
            if len(ties):
                max_feats = int(len(scores) * self.percentile / 100)
                kept_ties = ties[:max_feats - mask.sum()]
                mask[kept_ties] = True
            return mask

     

     

     

     

     

     

     

     

     

     

     

    更多相关内容
  • 8_DT_决策树算法.zip

    2019-12-10 10:10:32
    本资源是利用numpy库进行自编决策树代码,每行都有注释,包含训练数据(txt格式和xls格式)和测试数据(基于李航统计学习第二版的决策树示例)。代码亲测可行。
  • 调用于sklearn平台的决策树算法,有着较好的分类能力
  • ML之DT:基于DT决策树算法(交叉验证FS+for遍历最佳FS)对Titanic(泰坦尼克号)数据集进行二分类预测 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 ...

    ML之DT:基于DT决策树算法(交叉验证FS+for遍历最佳FS)对Titanic(泰坦尼克号)数据集进行二分类预测

     

     

     

    目录

    输出结果

    设计思路

    核心代码


     

     

     

     

    输出结果

     

     

     

    设计思路

     

    核心代码

    fs = feature_selection.SelectPercentile(feature_selection.chi2, percentile = i)
    X_train_fs = fs.fit_transform(X_train, y_train)
    scores = cross_val_score(dt, X_train_fs, y_train, cv=5)
    class SelectPercentile(_BaseFilter):
        """Select features according to a percentile of the highest scores.
        
        Read more in the :ref:`User Guide <univariate_feature_selection>`.
        
        Parameters
        ----------
        score_func : callable
        Function taking two arrays X and y, and returning a pair of arrays
        (scores, pvalues) or a single array with scores.
        Default is f_classif (see below "See also"). The default function only
        works with classification tasks.
        
        percentile : int, optional, default=10
        Percent of features to keep.
        
        Attributes
        ----------
        scores_ : array-like, shape=(n_features,)
        Scores of features.
        
        pvalues_ : array-like, shape=(n_features,)
        p-values of feature scores, None if `score_func` returned only scores.
        
        Notes
        -----
        Ties between features with equal scores will be broken in an unspecified
        way.
        
        See also
        --------
        f_classif: ANOVA F-value between label/feature for classification tasks.
        mutual_info_classif: Mutual information for a discrete target.
        chi2: Chi-squared stats of non-negative features for classification tasks.
        f_regression: F-value between label/feature for regression tasks.
        mutual_info_regression: Mutual information for a continuous target.
        SelectKBest: Select features based on the k highest scores.
        SelectFpr: Select features based on a false positive rate test.
        SelectFdr: Select features based on an estimated false discovery rate.
        SelectFwe: Select features based on family-wise error rate.
        GenericUnivariateSelect: Univariate feature selector with configurable mode.
        """
        def __init__(self, score_func=f_classif, percentile=10):
            super(SelectPercentile, self).__init__(score_func)
            self.percentile = percentile
        
        def _check_params(self, X, y):
            if not 0 <= self.percentile <= 100:
                raise ValueError(
                    "percentile should be >=0, <=100; got %r" % self.percentile)
        
        def _get_support_mask(self):
            check_is_fitted(self, 'scores_')
            # Cater for NaNs
            if self.percentile == 100:
                return np.ones(len(self.scores_), dtype=np.bool)
            elif self.percentile == 0:
                return np.zeros(len(self.scores_), dtype=np.bool)
            scores = _clean_nans(self.scores_)
            treshold = stats.scoreatpercentile(scores, 
                100 - self.percentile)
            mask = scores > treshold
            ties = np.where(scores == treshold)[0]
            if len(ties):
                max_feats = int(len(scores) * self.percentile / 100)
                kept_ties = ties[:max_feats - mask.sum()]
                mask[kept_ties] = True
            return mask

     

     

     

     

     

    展开全文
  • 决策树算法 决策树(Decision Tree,DT)分类法是一个简单且广泛使用的分类技术。 决策树是一个树状预测模型,它是由结点和有向边组成的层次结构。树中包含3种结点:根结点、内部结点和叶子结点。决策树只有一个根...
  • 机器学习-决策树算法

    千次阅读 2021-09-12 20:24:11
    决策树是非参数学习算法 决策树可以解决分类问题 决策树天然可以解决多分类问题 决策树可以解决回归问题:落在叶子节点(对应图中的A、B、C三点)的数据的平均值作为回归的结果 决策树可以应用于信用卡评级的案例...

    概念:

    • 是一种树形结构,本质是一颗由多个判断节点组成的树
    • 其中每个内部节点表示一个属性上的判断,
    • 每个分支代表一个判断结果的输出,
    • 最后每个叶节点代表一种分类结果

    通过分析可知:

    • 决策树是非参数学习算法
    • 决策树可以解决分类问题
    • 决策树天然可以解决多分类问题
    • 决策树可以解决回归问题:落在叶子节点(对应图中的A、B、C三点)的数据的平均值作为回归的结果
    • 决策树可以应用于信用卡评级的案例中,生成相应的分类规则。

    1、熵

    • 定义

      • 熵在信息论中代表随机变量不确定度的度量。
      • 熵越大,数据的不确定性度越高
      • 熵越小,数据的不确定性越低
    • 公式

      H=−∑i=1kpilog⁡(pi)

      • 例子1:假如有三个类别,分别占比为:{1/3,1/3,1/3},信息熵计算结果为:

        H=−13log⁡(13)−13log⁡(13)−13log⁡(13)=1.0986

      • 例子2:假如有三个类别,分别占比为:{1/10,2/10,7/10},信息熵计算结果为:

        H=−110log⁡(110)−210log⁡(210)−710log⁡(710)=0.8018

        熵越大,表示整个系统不确定性越大,越随机,反之确定性越强。

      • 例子3:假如有三个类别,分别占比为:{1,0,0},信息熵计算结果为:

        H=−1log⁡(1)=0

    • 公式的转换

      当数据类别只有两类的情况下,公式可以做如下转换   

    • 代码角度理解信息熵的概念
    • import numpy as np
      import matplotlib.pyplot as plt
      
      def entropy(p):
          return -p*np.log(p)-(1-p)*np.log(1-p)
          
      x = np.linspace(0.01,0.99,200)
      plt.plot(x,entropy(x))
      plt.show()

    2、信息增益 

     

    3、信息增益比 

     4、决策树生成-ID3算法&C4.5算法

    • ID3算法缺点

      • ID3算法不能处理具有连续值的属性
      • ID3算法不能处理属性具有缺失值的样本
      • 算法会生成很深的树,容易产生过拟合现象
      • 算法一般会优先选择有较多属性值的特征,因为属性值多的特征会有相对较大的信息增益,但这里的属性并不一定是最优的
    • C4.5算法的核心思想是ID3算法,对ID3算法进行了相应的改进。

      • C4.5使用的是信息增益比来选择特征,克服了ID3的不足。
      • 可以处理离散型描述属性,也可以处理连续数值型属性
      • 能处理不完整数据
    • C4.5算法优缺点

      • 优点:分类规则利于理解,准确率高

      • 缺点

        • 在构造过程中,需要对数据集进行多次的顺序扫描和排序,导致算法的低效
        • C4.5只适合于能够驻留内存的数据集,当数据集非常大时,程序无法运行
    • 无论是ID3还是C4.5最好在小数据集上使用,当特征取值很多时最好使用C4.5算法。

    5、决策树剪枝

     5.1 为何要进行树的剪枝?

    决策树是充分考虑了所有的数据点而生成的复杂树,有可能出现过拟合的情况,决策树越复杂,过拟合的程度会越高。

    考虑极端的情况:如果我们令所有的叶子节点都只含有一个数据点,那么我们能够保证所有的训练数据都能准确分类,但是很有可能得到高的预测误差,原因是将训练数据中所有的噪声数据都”准确划分”了,强化了噪声数据的作用。

    而剪枝修剪分裂前后分类误差相差不大的子树,能够降低决策树的复杂度,降低过拟合出现的概率。

    5.2 剪枝的方法

    5.2.1 先剪枝

    先剪枝是对决策树停止标准的修改。

    在ID3算法中,节点的分割一直到节点中的实例属于同一类别的时候才停止。对于包含较少实例的节点,很有可能被分割为单一实例的节点。为了避免这种情况,我们给出一个阈值,当一个节点分割导致的最大的不纯度下降小于a时,就把该节点看作是叶子结点。该方法选择的阈值对决策树的构建有很大的影响。

    (1)当阈值a选择的过大的时候,节点的不纯度依然很高就停止了分裂。此时的树由于生长不足,导致决策树过小,分类的错误率过高。因此需要调整a参数的合理范围之内的值。

    (2)当阈值a选择的过小的时候,比如a接近0,节点的分割过程近似于原始的分割过程。

    5.2.2 后剪枝

    后剪枝是从一个充分生长的树中,按照自低向上的方式修剪掉多余的分支,有两种方法:

    (1)用新的叶子结点替换子树,该叶子结点的类标号由子树记录中的多数类决定。

    (2)用子树中最常用的分支替代子树。

    通常计算前后预期分类错误率,如果修剪导致预期分类错误率变大,则放弃修剪,保留相应的各个分支,否则就将相应的节点分支修剪删除。

    通常采用后剪枝技术是最小的错误剪枝(MEP)技术,即在产生一系列的经过修剪后的决策树候选之后,利用一个独立的测试数据集,对这些经过修剪之后的决策树的分类准确性进行评价,保留下预期分类错误率最小的(修剪后)决策树。

    除了最小错误剪枝技术外,还有悲观错误剪枝(MEP)和代价复杂度剪枝(CCP)

    6、决策树算法的优缺点

    1) 决策树的优点:

    直观,便于理解,小规模数据集有效

    执行效率高,执行只需要一次构建,可反复使用

    (2)决策树的缺点:

    处理连续变量不好,较难预测连续字段

    类别较多时,错误增加的比较快

    对于时间序列数据需要做很多的预处理

    可规模性一般

    实际分类的时候只能根据一个字段进行

    7、构建决策树包括三个步骤:

    特征选择:选取有较强分类能力的特征。

    决策树生成:典型的算法有ID3和C4.5,它们生成决策树过程相似,ID3是采用信息增益作为特征选择度量,而C4.5采用信息增益比率。

    决策树剪枝:剪枝原因是决策树生成算法生成的树对训练数据的预测很准确,但是对于未知数据分类很差,这就产生了过拟合的现象。

    8、基尼指数和CART算法

    8.1 基尼指数

     8.2 CART算法

     9、决策树经典案例

      9.1Scikit-Learn库实现相亲约会的例子

    import pandas as pd
    from sklearn.tree import DecisionTreeClassifier
    
    # 加载数据集
    df = pd.read_csv('data/Sklearntest.csv')
    df
    
    # 划分数据集
    train,test = df.query('is_date!=-1'),df.query('is_date==-1')
    # 获取特征值目标值
    x_train,y_train = train.drop(['is_date'],axis=1),train['is_date']
    x_test = test.drop(['is_date'],axis=1)
    
    # 机器学习 参数可选Gini或Entropy
    model = DecisionTreeClassifier(criterion='gini')
    # 模型训练
    model.fit(x_train,y_train)
    
    # 预测x_test类别
    model.predict(x_test)
    
    # 决策树模型可视化
    from sklearn.tree import export_graphviz 
    from sklearn.externals.six import StringIO
    from IPython.display import Image
    import pydotplus 
    import os
    
    # windows 系统添加此行代码,Graphviz路径
    # os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'
    
    with open("dt.dot", "w") as f:
        export_graphviz(model, out_file=f)
    dot_data = StringIO()
    export_graphviz(model, out_file=dot_data,
                             feature_names=x_train.columns,
                             class_names=["is_date:no","is_date:yes"],
                             filled=True, rounded=True)
    graph = pydotplus.graph_from_dot_data(dot_data.getvalue()) 
    Image(graph.create_png())

    9.2 决策树解决泰坦尼克号问题

    #1.1导入数据
    import  pandas as pd
    #1.2.利用pandas的read.csv模块从互联网中收集泰坦尼克号数据集
    titanic=pd.read_csv("data/titanic.csv")
    
    #2.1首先观察数据的基本特征
    titanic.head()
    
    #2.2使用pandas的info属性查看数据的统计特征
    titanic.info()o
    #注:数据共有1313条乘客信息,有些特征是完整的,有一些是不完整的,如name和pclass是完整的,age是不完整的。
    #由于数据比较久远,难免会丢失掉一些数据造成数据的不完整,也有数据是没有量化的。
    #在决策树模型之前,需要对数据做一些预处理和分析的工作。
    
    #2.3特征选择,这里根据对泰坦尼克号的了解,sex,age,pclass作为判断生还的三个主要因素。
    X=titanic[['pclass','age','sex']]
    y=titanic['survived']
    #对当前选择的特征进行探查
    X.info()
    
    #2.4根据上面的输出,设计几个数据处理的任务
    #1)age这个数据列,只有633个,需要补全完整
    #2)sex和pclass两个数据列都是类别型的值,需要转化为数值,比如one-hot编码。
    #使用平均数或者中位数来填充,对模型偏离程度造成的影响比较小
    X['age'].fillna(X['age'].mean(),inplace=True)
    X.info()
    
    # 数据集的划分
    from sklearn.model_selection import train_test_split
    X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=33)
    
    # 数据集特征转化
    from sklearn.feature_extraction import DictVectorizer
    vec=DictVectorizer(sparse=False)
    #转换特征后,我们发现凡是类别型的值的特征都单独剥离出来了,独成一列特征,数据型不改变其值。
    X_train=vec.fit_transform(X_train.to_dict(orient='records'))
    
    X_train
    vec.feature_names_
    
    X_test=vec.transform(X_test.to_dict(orient='records'))
    
    # 使用决策树模型预测
    from sklearn.tree import DecisionTreeClassifier
    #使用默认的配置初始化决策树模型
    dtc=DecisionTreeClassifier()
    #使用分割的数据进行模型的学习
    dtc.fit(X_train,y_train)
    #用训练好的模型来对测试数据集进行预测
    y_predict=dtc.predict(X_test)
    
    # 决策树算法评估
    from sklearn.metrics import classification_report
    #输出预测准确率
    dtc.score(X_test,y_test)  #0.8340807174887892
    #输出更加详细的分类性能
    print(classification_report(y_predict,y_test,target_names=['died','survived']))

    展开全文
  • 决策树算法

    千次阅读 2019-12-29 11:26:40
    1、最早的决策树算法是由Hunt等人于1966年提出,Hunt算法是许多决策树算法的基础,包括ID3、C4.5和CART等 2、Hunt算法通过将训练记录相继划分为较纯的子集,以递归方式建立决策树。设Dt是与结点t相关联的训练记录集...

    决策树的起源:

    1、最早的决策树算法是由Hunt等人于1966年提出,Hunt算法是许多决策树算法的基础,包括ID3、C4.5和CART等

    2、Hunt算法通过将训练记录相继划分为较纯的子集,以递归方式建立决策树。设Dt是与结点t相关联的训练记录集,而y = { y1, y2, …, yc}为类标号

    3、Hunt算法的递归定义如下:

    (1)如果Dt中所有的记录都属于同一个类yt,则结点t是叶子结点,用yt标记;

    (2)如果Dt中包含多个类的记录,则选择一个属性测试条件,将记录划分为较小的子集。对于测试条件的每个输出,创建一个子女结点,并根据测试结果将Dt中的记录分布到子女结点中,然后对每个子女结点递归地调用该算法;

    决策树的概述:

    1. 一般,一棵决策树包含一个根节点,若干个内部结点和若干个叶结点;叶结点对应于决策结果,其他每个结点对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果划分到子结点中,根结点包含样本全集,从根结点到每个叶结点的路径对应了一个判定的测试序列。决策树学习的目的是产生一棵泛化能力强,即处理未见示例强的决策树。
    2. 决策树示意图如下:  椭圆-----内部结点即划分属性  方框----叶子节点即分类后的样本
    3.  
       

       

    决策树的划分选择

    1. 信息增益

            信息熵:当前样本集合D中第k类样本所占的比例为pk

         

            信息熵的值越小,则D的纯度越高

            信息增益:一般而言,信息增益越大,意味着使用属性a来进行划分所获得的 “纯度提升”越大

        

          ID3决策树学习算法就是以信息增益为准则来选择划分属性,信息增益准则对取值数目较多的属性有所偏好

     

         2.增益率

            增益率定义如下:

         

            其中:

         

        C4.5决策树算法采用的即是增益率,增益率准则一般对可取值数目较少的属性有所偏好,故一般不直接选用增益率最大的为    候选划分属性,而是先从候选的划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的

     

      3.基尼指数

        数据集D的纯度可用基尼值来度量

               

          (pk:数据集D中,第k类样本所占的概率)

          Gini(D)越小,数据集D的纯度越高

          数据集D在属性A条件下的基尼指数计算如下:

         

         CART决策树采用的是基尼指数来选择最优属性。在候选属性集合A中,选择那个使得划分后基尼指数最小的属性为最优划分  属性

    决策树算法

          决策树伪代码

     
     

          决策树示意图

     
     

    决策树的优化----剪枝

    剪枝是决策树学习算法对付“过拟合”的主要手段,决策树剪枝的基本策略有“预剪枝”和“后剪枝”

    预剪枝:是指在决策树生成过程中,对每个结点在划分前先进行估计,若在当前结点划分不会带来决策树的泛化性能提升,则停止划分,并将当前结点标记为叶结点

     
     

    后剪枝:是先从训练集生成一棵完整的决策树,然后自底向上对非叶子结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树的提升,则将子树替换为叶结点

     
     

     

     

     

     

     

     

     

     

     

     

    预剪枝与后剪枝的比较:

    后剪枝决策树通常比预剪枝决策树保留了更多的分支。一般情况下,后剪枝决策树的欠拟合风险很小,泛化性能往往由于预剪枝决策树,但是后剪枝过程是在生成完全决策树后进行的,并且要自下往上地对树中的非叶子节点逐一进行考察计算,因此训练时间的开销比为剪枝和预剪枝决策树都要大得多

    决策树的优缺点

    优点:
    (1)速度快: 计算量相对较小, 且容易转化成分类规则. 只要沿着树根向下一直走到叶, 沿途的分裂条件就能够唯一确定一条分类的谓词.
    (2)准确性高: 挖掘出来的分类规则准确性高, 便于理解, 即可以生成可以理解的规则.
    (3)可以处理连续和离散字段
    (4)不需要任何领域知识和参数假设
    (5)适合高维数据

    缺点:
    (1)对于各类别样本数量不一致的数据, 信息增益偏向于那些更多数值的特征

    (2)容易过拟合
    (3)忽略属性之间的相关性

     

    随机森林

    1. 随机森林(Random Forest,简称RF)是Bagging的一个扩展变体,RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择
    2. 什么是随机森林
    3. 随机森林分解开来就是“随机”和“森林”。“随机”即随机抽样以及随机属性选择;森林是由很多棵树组成的,因此随机森林的结果是依赖于多棵决策树的结果,这是一种集成学习的思想。森林里新来了一只动物,森林举办森林大会,判断这到底是什么动物,每棵树都必须发表意见,票数最多的结果将是最终的结果。随机森林最终的模型见下图示:


     

    随机森林基本思想

    1、有放回的随机采样(自助采样法 西瓜书2.2.3节)

    给定包含m个样本的数据集(初始训练集),有放回的随机抽取m次样本,得到m个样本采样集,初始训练集约有63.2%的数据出现在采样集中

    2、随机属性选择

    对基决策树的每个结点,先从该结点的属性集合(d个属性)中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最

    优属性用于划分;参数k控制了随机性引入程度;一般情况下,推荐值或者

    随机森林中基学习器的多样性不仅来自于样本扰动,还来自属性扰动,使得最 终集成的泛化性能可通过个体学习器之间的差异度的增加进一步提升


    随机抽样以及特征提取图示:

     

    随机森林模型图示:

     
     

    随机森林实现伪代码:

    1、获取数据集D

    2、初始化随机森林分类器中各个参数

    3、建立随机森林

    ①随机抽取m个训练样本

    ②利用训练样本建树,划分特征选取的方式为对于某一结点先随机选择k个特征,再从k个特征中选择最优划分特征,以此规则建树

    ③将建立的树放入集成池中,直至达到规定池的大小

    随机森林特点:

    1. 在当前所有算法中,具有极好的准确率
    2. 能够有效地运行在大数据集上
    3. 能够处理具有高维特征的输入样本,而且不需要降维
    4. 能够评估各个特征在分类问题上的重要性
    5. 在生成过程中,能够获取到内部生成误差的一种无偏估计

     

     

    展开全文
  • 决策树算法 决策树算法类型: 决策树是一系列算法,而不是一个算法。 决策树包含了 ID3分类算法,C4.5分类算法,Cart分类树算法,Cart回归树算法。 决策树既可以做分类算法,也可以做回归算法。因此决策树既可以解决...
  • 决策树算法Python实现

    2021-09-23 11:28:05
    一、决策树 二、使用步骤 1.引入库 2.读入数据 总结 前言 利用决策树实现一个简单的分类问题 根据毕业院校、学历、技能来预测是否能够被录取 一、决策树 一种基本的分类与回归方法,此处主要讨论...
  • python实现三种经典决策树算法

    千次阅读 2021-01-24 17:19:34
    决策树实现ID3、C4.5、CART算法 Author: 浅若清风cyf Date: 2020/12/15 一、创建数据集 手动 def createDataSet(): """ 创建测试的数据集 :return: """ dataSet = [ # 1 ['青绿', '蜷缩', '浊响', '清晰'...
  • 使用决策树算法进行鸢尾花数据分类(学习笔记) 决策树算法介绍 构建树的过程 从根节点开始,计算所有特征值的信息增益(信息增益比、基尼系数),选择计算结果最大的特征作为根节点。(信息熵增益->ID3,...
  • 数据挖掘十大经典算法(1) C4.5_决策树算法机器学习中,决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则...
  • 机器学习、数据挖掘中决策树算法的思路与关键代码,对想了解该算法实现步骤的同仁有用!
  • 决策树的决策标准:ID3(最大信息增益)【偏好性过强】、C4.5(最大信息增益率)【改进偏好性问题】、CART(基尼系数)【改进前面计算量大的问题】 后面的是对前面的改进
  • 决策树算法类型 决策树是一系列算法,而不是一个算法。 决策树包含了 ID3分类算法,C4.5分类算法,Cart分类树算法,Cart回归树算法。 决策树既可以做分类算法,也可以做回归算法。因此决策树既可以解决分类问题,也...
  • 决策树算法1. 目的2. 优缺点3. 信息熵 entropy计算方法:导库:导数据集:首先计算原本的信息熵:计算色泽特征下的信息熵:取数据集D1 D1为色泽=青绿的数据子集取子集D2 D2 为色泽=乌黑的数据子集取子集D3 D3为色泽=...
  • scikit-learn决策树算法使用

    千次阅读 2019-03-01 17:19:35
    之前对决策树的算法原理做了总结,今天就从实践的角度来介绍决策树算法,主要是讲解使用scikit-learn来跑决策树算法,结果的可视化以及一些参数调参的关键点。 这里直接使用实例进行简单的决策树分类讲解,至于...
  • 决策树决策树定义决策树概念熵条件熵经验熵, 经验条件熵信息增益算法信息增益算法ID3算法C4.5生成树的剪枝最小二乘回归树生成CART分类树生成实现以及统计学习书上实例信息增益算法实现训练数据打印树 决策树 定义 ...
  • 决策树DT

    千次阅读 2022-04-23 17:54:28
    一、什么是决策树 决策 + 树,我们的决策过程就像树的成长一样。由一个根(节点)不断的发散。 决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别...
  • 探究算法细节,深入了解算法原理 @[toc]决策树 DT 1. 的
  • 决策树算法原理以及决策树规则生成方法 决策树是一种可解释性较强的策略分析工具。creditmodel提供了分类回归树和条件推断树两种决策树生成和提取规则的方法。 每一个风险管理人员都应该掌握使用决策树发现规则和对...
  • 决策树模型是树形结构,既可以用于分类,也可以用于回归。它是if-then规则的集合,也是定义在特征空间与类空间上的条件概率分布。一颗决策树由结点和有向边组成,结点分为内部结点(包括根结点,表示特征)和叶结点...
  • sklearn决策树算法参数详解

    千次阅读 2019-07-19 14:18:40
    sklearn决策树算法参数详解1. 决策树分类器DecisionTreeClassifier2.回归树——CART 1. 决策树分类器DecisionTreeClassifier from sklearn.tree import DecisionTreeClassifier # 创建ID3决策树 clf = ...
  • 1:什么是决策树 顾名思义:决策树就是根据已有的条件进行决策从而产生的一棵树。 比如,这就是一颗决策树,根据不同的取值决定不同的走向 2、那么如何根据现有的属性来决定谁是第一个节点,谁是第二个节点呢,这里...
  • 关于决策树算法

    2020-05-04 21:17:34
    决策树属于监督学习算法,是一种树状结构模型,可应用与分类与回归场景。 决策树的三要素:特征选择、决策树的生成 和 决策树的剪枝。 1、特征选择 决策树在划分子树的特征过程中,通常会使用以下三种划分准则:信息...
  • 本文主要介绍基于集成学习的决策树,其主要通过不同学习框架生产基学习器,并综合所有基学习器的预测结果来改善单个基学习器的识别率和泛化性。集成学习常见的集成学习框架有三种:Bagging,Bo...
  • 决策树(Decision Tree)的核心思想是:根据训练样本构建这样一棵树,使得其叶节点是分类标签,非叶节点是判断条件,这样对于一个未知样本,能在树上找到一条路径到达叶节点,就得到了它的分类。举个简单的例子,如何...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,886
精华内容 1,954
关键字:

dt决策树算法